Диск, який мав розірватись задовго до того
Спіральна галактика обертається диференційно: зірки поблизу центру завершують один оберт значно швидше, ніж зірки далеко зовні, оскільки швидкість обертання залишається приблизно незмінною, а коло циркумференції збільшується з радіусом. Якби спіральна рука була незмінним набором тих самих зірок, ця диференційнаrotation закрутила б її в тісний, невидимий спір у кілька галактичних обертів — декілька столітінь мільйонів років, мізерну частку віку галактики. Реальні галактики мають мільярди років і все ще демонструють дві або чотири чисті відкриті рукави. Це суперечність розв’язана лише в 1960-х роках.
Розв’язок, від Chia-Chiao Lin та Frank Shu (1964), полягає в тому, що спіральна рука не є фіксованим набором зірок — це хвильовий імпульс щільності: повільно обертання гравітаційної стиснення, яке проходять зірки, як затор на трасі, який утримує форму під час руху окремих автомобілів. Паттерн обертається незмінно з однією швидкістю обертання Ω_p, тоді як кожна зірка зберігає свою власну швидкість обертання, швидшу або повільніше. Зірка переходить у руку, тимчасово сповільнюється під дією гравітації та випадає з неї наперед від патерну. Рука виживає безперервно, оскільки це стаціонарна хвиля, а не фіксований набір зірок.
Чому рукави світяться блакитним: газний зв'язок
Зірка, як щільність хвилі, — це тонке перенасичення кількох відсотків — не яскраво-блакитні рукави, які показують фотографії. Візуальна яскравість походить від газу. Міжзоряні хмари, на відміну від зірок, стикаються та втрачають орбітальну енергію при стисненні, тому вони накопичуються різко на потенційному мінімумі хвилі та колапсують у нові зірки. Результатом є хвиля новонароджених, короткоживучих, надзвичайно яскравих блакитнувато-білих зірок типу O та B, які простежують рукав — вони живуть лише кілька мільйонів років, занадто короткий час, щоб далеко відійти від місця свого утворення, фарбуючи рукав колір, який не могли б ніколи побачити звичайні старі зірки (які плавно рухаються), які не можуть відійти)
Зірка, як щільність хвилі, — це тонке перенасичення кількох відсотків — не яскраво-блакитні рукави, які показують фотографії. Візуальна яскравість походить від газу. Міжзоряні хмари, на відміну від зірок, стикаються та втрачають орбітальну енергію при стисненні, тому вони накопичуються різко на потенційному мінімумі хвилі та колапсують у нові зірки. Результатом є хвиля новонароджених, короткоживучих, надзвичайно яскравих блакитнувато-білих зірок типу O та B, які простежують рукав — вони живуть лише кілька мільйонів років, занадто короткий час, щоб далеко відійти від місця свого утворення, фарбуючи рукав колір, який не могли б ніколи побачити звичайні старі зірки (які плавно рухаються), які не можуть відійти)
Placing 80,000 stars without 80,000 physics updates
Honestly simulating this with real gravity is an N-body problem: 80,000 mutually attracting points is billions of pairwise interactions per step, far beyond real time in a browser tab. This page instead uses a kinematic density-wave model: each star keeps a fixed guiding radius and birth angle, and its screen position each frame comes from a closed-form spiral function, not an integrated force.
theta = theta0 + omega(r) * t // differential rotation, faster near centre + pitch * Math.log(r / r0); // logarithmic-spiral phase offset x = r * Math.cos(theta); z = r * Math.sin(theta); // colour and brightness biased near the arm's density maximum armPhase = (theta - pitch * Math.log(r / r0)) % (2 * Math.PI); A logarithmic spiral — the curve r = r₀·e^(θ/tan α) for a fixed pitch angle α — is what real spiral arms fit best; the Milky Way's arms have pitch angles of roughly 10–15°. Stars near the arm’s density maximum are drawn brighter and slightly bluer to mimic ongoing star formation, and the bulge and halo are rendered as separate particle populations with their own radial profiles, since the galaxy is not one disc but three overlapping structures.
theta = theta0
+ omega(r) * t // differential rotation, faster near centre
+ pitch * Math.log(r / r0); // logarithmic-spiral phase offset
x = r * Math.cos(theta);
z = r * Math.sin(theta);
// colour and brightness biased near the arm's density maximum
armPhase = (theta - pitch * Math.log(r / r0)) % (2 * Math.PI);
GLSL instancing: why 80,000 sprites cost one draw call
Rendering 80,000 independent billboards — one draw call per star — would collapse frame rate long before the physics does. Instancing uploads each star's attributes (radius, angle, colour, size) once into a single buffer and asks the GPU to draw one base geometry (a small quad) tens of thousands of times in a single call, computing each instance's final position in the vertex shader from its own attribute row. The CPU touches the star data once per frame to update phase; the GPU does the rest in parallel, which is why 80,000 moving points and a bulge glow can hold 60 fps in WebGL where a naive scene graph would not clear a tenth of that.
Frequently asked questions
Чому галактичні спіральні рукави не звиваються з часом?
Бо спіральний рукав є хвилевим піком щільності, а не фіксованою групою зірок. Хвильовий патерн обертається як жорстка спіраль на власну швидкість, тоді як окремі зірки обертаються через нього зі своєю, зазвичай різною, швидкістю — тому форма зберігається, незважаючи на те, що зірки всередині неї постійно змінюються.
Чому спіральні рукави блакитні, а решта диску виглядає жовтуватою?
Газ стискається більш різко, ніж зірки на мінімумі хвильового піку щільності, і утворює нові зірки там. Найяскравіші з них — масивні, надзвичайно гарячі зірки O та B, які спалюються за кілька мільйонів років — занадто швидко, щоб віддалитися від рукава; тому рукав непропорційно освітлений молодими, блакитними, короткоживучими зірками.
Чи використовує ця симуляція реальну гравітацію між зірками?
Ні. Моделювання реальної взаємної гравітації для 80 000 тіл неможливе в режимі реального часу у браузері, тому зірки розміщуються кінематично на основі логарифмічної формули хвильового піку щільності замість інтегрування від сил — візуально точно відображає поведінку справжніх дискувих галактик без використання розв’язувача N-тіла.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Spiral Galaxy і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Spiral Galaxy