Chapter 6 · Section 4
The Disk Measured: Rotation Curve, Shear, Arms and Pitch
The BPT law
BPT Part 3.14 (Spiral Arms) opens: "No one places a galaxy's arms. A disk turns faster near its centre than at its edge, so any clump in it is sheared into a trailing streak; while it shears, the disk's own gravity pulls more stars and gas into it, and for a moment the streak grows many times over before it winds away. This is swing amplification ... Three numbers, all set by how the disk turns and how heavy it is, decide what the arms look like." The three are laws of the book:
Shear Rate Γ = (R / Ω) · (Ω_drop / R_step)
Epicyclic Frequency κ_ep = Ω · √(2 · (2 − Γ))
Arm Number m_a = κ_ep² · R / (4 · π · G · S_d)
Arm Pitch Angle i_p = arctan((2 / 7) · √(4 − 2 · Γ) / Γ)
Γ is "0 for a disk turning as one, 1 for a flat rotation curve, 1.5 round a lone central mass"; κ_ep "is √2 Ω for a flat rotation curve and Ω round a lone central mass"; the arm number is read at "the radius where the arms are read, two disk scale lengths", where S_d is "the disk's surface density there", and "a heavy, self-gravitating disk grows two or three grand arms; a light disk in a heavy halo grows many short ones, flocculent." The pitch is "about 22° for a flat rotation curve, about 11° round a dominant central mass ... Observed spirals run from about 5° to 40°." The rotation curve itself is BPT Part 3.12 (Disk Rotation), v = √(G·M/R) with M the mass within R: "The inner parts of a disk turn faster in angle than the outer, so the disk shears; spiral arms form and wind in it, and stars form along them." And BPT Part 3.14 (The Game's Reading) says how the game uses them: its inner structure "is drawn by the known laws from what the simulation measures in it: from the mass round its well, its rotation curve, and from that its shear rate, epicyclic frequency, disk surface density, its number of arms (Arm Number) and their pitch (Arm Pitch Angle)."
The established physics
- Swing amplification and the arm number from the critical wavelength (Toomre 1981, What amplifies the spirals?; Carlberg & Freedman 1985, Dissipative models of spiral galaxies).
- The epicyclic frequency κ = Ω·√(2(2 − Γ)): √2·Ω on a flat curve, Ω round a point mass (Binney & Tremaine 2008, Galactic dynamics).
- The pitch from the shear (Michikoshi & Kokubo 2014, as the code and BPT cite it): about 22° on a flat curve, 11° round a dominant central mass.
- An exponential disk Σ(r) = Σ₀·e^(−r/R_d), Σ₀ = M/(2π·R_d²), has a mass-weighted mean radius of exactly 2·R_d (∫r²e^(−r)dr / ∫r·e^(−r)dr = 2), and its surface density at 2·R_d is Σ₀·e⁻².
- Simulated disks need about a hundred thousand particles for arms to rise and last (Fujii et al. 2011); a game galaxy holds tens of bodies, so the arms are read, not grown.
The game's math
galaxyOf() app.js:3018–3025, using the member list mem = [(d, m)] gathered in Part 6.3.
G_k = matter.G · matter.gk the near-field pull the game uses round a well
M_w = max(1, w.mass)
R_d = max(0.75, Σm·d / Σm / 2) (R/4 if the galaxy has no mass) cells
M(<r) = M_w + Σ_{d<r} m
Ω(r) = √(G_k · M(<r) / r³) radians a flip
r₁ = R_d, r₂ = min(R, 3·R_d)
Γ = clamp(−ln(Ω(r₂)/Ω(r₁)) / ln(r₂/r₁), 0.05, 1.95) if r₂ > 1.2·r₁ and Ω(r₁) > 0, else 1.5
R_a = 2·R_d
κ_ep = Ω(R_a) · √(2·(2 − Γ))
S_d = Σm · e⁻² / (2π·R_d²)
m_raw = κ_ep² · R_a / (4π · G_k · S_d) (2 if G_k or S_d is zero)
arms = clamp(round(m_raw), 2, 8)
pitch = clamp(arctan((2/7)·√(4 − 2Γ)/Γ) in degrees, 5°, 45°)
Γ is the shear rate measured as the negative log slope of Ω between R_d and 3·R_d, the book's Ω_drop/R_step taken over a finite step. A lone central mass gives Ω ∝ r^−1.5, so Γ = 1.5, the default when the two radii are too close to measure a slope.
Example: on a flat curve, Γ = 1: κ_ep = √2·Ω, pitch = arctan((2/7)·√2) = arctan(0.404) = 22.0°. Round a well that dominates its disk, Γ = 1.5: pitch = arctan((2/7)·1/1.5) = arctan(0.190) = 10.8°. At the ends of the clamp, Γ = 1.95 gives 2.7°, raised to 5°; Γ = 0.05 gives 85°, lowered to 45°.
The brightest kinds of star (app.js:2974–2977, 3026). Each living star group adds n·L(m) to a bin keyed by its class, whether it is a giant, and round(2·log₂ m), a half-octave in mass; L(m) is luminosity() from stars.js (m^3.5). The bins are sorted by light and the brightest 14 are kept as pop. The scene draws a galaxy's points from these kinds in proportion to their light (Part 6.8), "so the few young blue stars light a forming disk's arms".
What reaches the scene. The arms, the pitch and pop are passed on. The measured Γ is not: the list in updateGalaxies() passes gamma: 1 (app.js:3112), a flat curve for the turning, and the turn rate is the law of Part 6.6, not Ω(R_a). galaxyOf() also returns omega = min(0.6, Ω(R_a)) (app.js:3035), which updateGalaxies() replaces with diskTurnRate(w).
In the game
The arms are the most visible thing the book's laws put on screen. A spiral or starburst is drawn with m_a arms of young blue-white stars wound at the measured pitch round a warm core (setGalaxies() scene3d.js:516–546): two grand arms on a heavy disk, more on a light one, tight round a dominant well, open on a flat curve. Arm stars are drawn 1.3 times larger and at full brightness, the rest of the disk at 0.85, so the arms read as lanes of light. The arms trail: their winding runs against the galaxy's turning sense (φ = −sense · cot(pitch) · ln(ρ/ρ₀)), the sense measured from the bodies' own angular momentum L_z.
The numbers are named in the dive banner after the return to the Source: for a spiral or a starburst the galaxy line carries "· 2 arms, pitch 22°" (the count and the rounded pitch, app.js:3027), so a player can read the law's answer for any galaxy they tap. The brightest kinds (pop) decide the colors the eye sees: a forming disk's points are mostly its few young blue stars, because they carry most of its light; a quiet one's are its giants and old dwarfs. As the readings repeat every four Pulses the arm count and pitch can change while the mass round the well changes; each change is redrawn at the next reading.
The scale model
The rotation curve is read from drawn bodies a cell or more across, so Ω(r), Γ, κ_ep and S_d are the drawn galaxy's. The arms are not simulated: the game takes the measured disk and asks the laws how many arms and what pitch a disk like it would raise. The arm count and the pitch are dimensionless and do not scale with starMult (G_k·S_d and κ_ep² scale together). A disk is never measured smaller than three quarters of a cell, whatever its real size.
Where the game and the theory differ
- BPT gives the arm number and the pitch with no bounds beyond the observed range. The game holds the arm count to 2–8 and the pitch to 5°–45°; BPT gives the observed top of the pitch as about 40°, so the game allows 5° more.
- The measured scale length has a floor of 0.75 cells, and a disk with no mass is given R_d = R/4; neither is in BPT.
- BPT ties the turning of each star to the shear of the disk (Spiral Arms; Disk Turn Rate). The game measures Γ but does not pass it to the scene: the scene turns every galaxy on a flat curve, gamma 1 (app.js:3112). The comment at app.js:3017 still says "the pattern turning at Ω(2 R_d) a flip", and the one at scene3d.js:699 "at its disk's measured Ω(2 R_d)"; the code turns it by the Disk Turn Rate (Part 6.6). The returned omega, min(0.6, Ω(R_a)), is unused.
- Only the 14 brightest kinds of star are kept for drawing; BPT draws "its stars ... its own population, by type", with no count stated.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 1 | app.js:3018 | max(1, w.mass): least well mass in the rotation curve | METHOD (keeps Ω real for a massless well) |
| 2 | app.js:3020 | mean radius of an exponential disk = 2·R_d | PHYSICS (exponential disk, exact) |
| 0.75 | app.js:3020 | least measured scale length, cells | CAP |
| 4 | app.js:3020 | R_d = R/4 when the galaxy has no mass | METHOD (a placeholder; never drawn, as a massless galaxy has no stars) |
| 3 | app.js:3021 | outer radius of the shear measure, 3·R_d | BPT (Part 3.14: "the shear rate Γ between R_d and 3 R_d") |
| 1.2 | app.js:3022 | least ratio r₂/r₁ for a slope to be measured | METHOD (avoids a slope over too short a step) |
| 0.05 | app.js:3022 | least Γ | METHOD (keeps the pitch formula finite) |
| 1.95 | app.js:3022 | greatest Γ | METHOD (keeps √(2(2 − Γ)) and √(4 − 2Γ) real) |
| 1.5 | app.js:3022 | Γ when no slope can be measured: a lone central mass | PHYSICS (Keplerian Ω ∝ r^−1.5) |
| 2 | app.js:3023 | arms read at R_a = 2·R_d | BPT (Part 3.14, Arm Number: "two disk scale lengths") |
| 2, 2 | app.js:3023 | κ_ep = Ω·√(2(2 − Γ)) | PHYSICS (Binney & Tremaine 2008) |
| e⁻², 2π | app.js:3023 | exponential disk surface density at 2·R_d | PHYSICS (exponential disk, exact) |
| 4π | app.js:3024 | m_a = κ²R/(4πG·S_d) | PHYSICS (Toomre 1981; Carlberg & Freedman 1985) |
| 2 | app.js:3024 | arm number when it cannot be computed | METHOD (a two-armed default) |
| 2 | app.js:3024 | least arm number | CAP |
| 8 | app.js:3024 | greatest arm number | CAP |
| 2/7, 4, 2 | app.js:3025 | i_p = arctan((2/7)√(4 − 2Γ)/Γ) | PHYSICS (Michikoshi & Kokubo 2014) |
| 5 | app.js:3025 | least pitch, degrees | PHYSICS (observed spirals from about 5°, BPT Part 3.14) |
| 45 | app.js:3025 | greatest pitch, degrees | CAP (BPT gives the observed top as about 40°) |
| 14 | app.js:3026 | the brightest kinds of star kept for drawing | CAP |
| 2 | app.js:2976 | kinds binned by round(2·log₂ m), half-octaves in mass | METHOD (a binning width) |
| 0.6 | app.js:3035 | top on the returned omega; replaced before use | CAP (dormant) |