Fala 55: Eksplorator wielościanów, szkoła ryb 3D & SPH Dam Break

Przeglądarka brył geometrycznych, symulacja stadna Boids z polującym rekinem oraz przerwanie tamy SPH w czasie rzeczywistym — trzy bardzo różne eksploracje matematyki, zachowań zbiorowych i obliczeniowej dynamiki płynów dodane do mysimulator.uk w fali 55.

Fala 55 w skrócie

3
nowe symulacje
6
plików HTML
541
symulacji łącznie
1
wpis na blogu
🔷

Eksplorator wielościanów

Wszystkie 5 brył platońskich i 13 brył archimedesowych renderowanych z projekcją perspektywiczną. Przeciągnij, by obrócić, przewiń, by przybliżyć, przełącz siatkę szkieletową i etykiety wierzchołków. Formuła Eulera V−E+F=2 weryfikowana na żywo.

Otwórz symulację →
🐟

Szkoła ryb 3D

200 ryb kierowanych regułami Boids separacji, wyrównania i kohezji, z trzema warstwami głębi dla pseudo-3D realizmu. Rekin drapieżnik poluje na ławicę, wywołując zachowanie panicznej ucieczki w promieniu 110 px.

Otwórz symulację →
💧

SPH Dam Break

300 cząstek kierowanych ciśnieniem, lepkością i grawitacją w metodzie SPH. Tama wody zapada się i rozlewa przez zbiornik. Koloruj według prędkości, ciśnienia lub gęstości.

Otwórz symulację →

🔷 Eksplorator wielościanów

Wielościany — trójwymiarowe bryły ograniczone płaskimi ścianami wielokątnymi — należą do najbardziej badanych obiektów w matematyce. Starożytni Grecy sklasyfikowali pięć brył platońskich: wypukłych wielościanów, których wszystkie ściany są przystającymi wielokątami foremnymi, a wszystkie wierzchołki są sobie równoważne. Archimedes rozszerzył tę klasyfikację o 13 brył archimedesowych: wypukłych wielościanów o dwóch lub więcej rodzajach ścian wielokątów foremnych, ale wciąż wierzchołkowo przechodnich.

Formuła wielościenna Eulera

Leonhard Euler (1752) odkrył, że dla dowolnego wielościanu wypukłego — a właściwie dla dowolnej jednospójnej powierzchni wielościennej homeomorficznej ze sferą — liczby wierzchołków V, krawędzi E i ścian F spełniają zależność:

V − E + F = 2 — niezmiennik topologiczny, a nie geometryczny. Czworościan daje 4−6+4=2; dwunastościan daje 20−30+12=2; dwudziestościan ścięty (piłka nożna) daje 60−90+32=2. Liczba 2 to charakterystyka Eulera sfery.

Formuła uogólnia się: dla powierzchni rodzaju g (torus ma g=1), charakterystyka Eulera wynosi 2−2g. Torus spełnia V−E+F=0. Ten związek między własnościami kombinatorycznymi (liczby wierzchołków/krawędzi/ścian) a własnościami topologicznymi (rodzaj) jest fundamentem topologii algebraicznej.

Pięć brył platońskich i ich grupy symetrii

Bryły platońskie odpowiadają skończonym grupom obrotów przestrzeni 3D. Ich grupy symetrii są takie same jak symetrie obrotowe tych brył:

Istnieje ich tylko pięć, ponieważ wymóg regularności wypukłej bryły ogranicza możliwe kombinacje ścian wielokątów foremnych spotykających się w wierzchołku: suma kątów ścian w każdym wierzchołku musi być ściśle mniejsza niż 360°. Tylko trójkąty, kwadraty i pięciokąty dają prawidłowe rozwiązania, zanim ten kątowy deficyt się wyczerpie.

Projekcja perspektywiczna na Canvas 2D

Symulator wykorzystuje czystą projekcję perspektywiczną Canvas 2D: każdy wierzchołek 3D (x, y, z) jest najpierw obracany przez dwie macierze wyprowadzone z kwaternionów (odchylenie i pochylenie, aktualizowane przy każdym ruchu przeciągania), a następnie rzutowany na ekran wzorem sx = cx + f·X/(Z+d), sy = cy + f·Y/(Z+d), gdzie f to ogniskowa, a d to przesunięcie kamery. Ściany są sortowane malarsko według współrzędnej Z ich środka ciężkości, by uzyskać poprawne uporządkowanie głębi.

🐟 Szkoła ryb 3D — Boids z drapieżnikiem

W 1986 roku Craig Reynolds opublikował Boids — zwodniczo prosty model, który generuje uderzająco realistyczne zachowanie stadne z zaledwie trzech lokalnych reguł. Żaden globalny koordynator nie kieruje stadem; każdy agent reaguje jedynie na sąsiadów w promieniu percepcji. Wynikowe zachowanie emergentne jest nie do odróżnienia od prawdziwego rojenia się szpaków czy ławicy sardeli.

Trzy reguły Boids

Wypadkowa siła sterująca w każdym takcie to ważona suma:

F = wsep·Fsep + wali·Fali + wcoh·Fcoh — następnie ograniczana do maksymalnego przyspieszenia. Prędkość jest aktualizowana metodą całkowania Eulera i normalizowana do okna prędkości docelowej [vmin, vmax].

Warstwy głębi dla pseudo-3D

Canvas 2D uruchamia dwuwymiarową symulację Boids, ale trzy warstwy głębi symulują trójwymiarową strukturę prawdziwej ławicy ryb. Ryby przy powierzchni (warstwa 0) są rysowane większe i w jaśniejszym cyjanie; ryby w toni wodnej (warstwa 1) są średniej wielkości w oceanicznym błękicie; ryby głębokie (warstwa 2) są mniejsze i w ciemnym granacie. Warstwy używają nieco innych promieni Boids, dzięki czemu utrzymują odrębne pod-ławice, wciąż wzajemnie na siebie wpływając poprzez promienie kohezji i wyrównania.

Rekin drapieżnik

Rekin to pojedynczy agent z dedykowanym zachowaniem łownym:

Dynamika drapieżnik-ofiara w modelach Boids odtwarza kilka obserwacji terenowych: (a) ławice rozpadają się na fragmenty, gdy drapieżnik wchodzi do środka, a następnie odtwarzają się po jego odejściu — efekt fontanny; (b) drapieżnik odnosi największe sukcesy, atakując ryby samotne lub znajdujące się na peryferiach; (c) ławica N ryb w ścisłej formacji oferuje każdemu członkowi jedynie 1/N prawdopodobieństwa drapieżnictwa w porównaniu z rybą samotną — efekt rozcieńczenia.

Liczenie skupisk

Panel statystyk w każdej klatce raportuje liczbę odrębnych skupisk. Przynależność do skupiska jest wyznaczana prostym algorytmem union-find: dwie ryby należą do tego samego skupiska, jeśli ich wzajemna odległość jest mniejsza niż promień kohezji. Podczas normalnego stadnego zachowania liczba ta wynosi zwykle 1–3; podczas ataku rekina często skacze do 6–10, gdy ławica się rozpada.

💧 SPH Dam Break — hydrodynamika cząstek wygładzonych

Smoothed Particle Hydrodynamics (SPH) została wynaleziona jednocześnie i niezależnie przez Lucy'ego (1977) oraz Gingolda i Monaghana (1977) do symulacji zjawisk astrofizycznych, takich jak zderzenia gwiazd. W przeciwieństwie do metod siatkowych (Eulerowskich), SPH jest w pełni Lagrange'owska: płyn jest dyskretyzowany na cząstki niosące masę, prędkość i zmienne termodynamiczne. Siatka nie jest wymagana — same cząstki definiują domenę obliczeniową.

Aproksymacja SPH

Dowolna wielkość pola A w pozycji r może być aproksymowana jako ważona suma wkładów sąsiednich cząstek:

A(r) ≈ Σⱼ (mⱼ/ρⱼ) Aⱼ W(|rrⱼ|, h) — gdzie W to jądro wygładzające, a h to długość wygładzania. Jądro Poly6 W(r,h) = (315/64πh⁹)(h²−r²)³ jest używane do gęstości, natomiast gradient jądra Spiky (Munafo 1992, poprawiony przez Desbruna w 1996) jest używany do ciśnienia, by uniknąć skupiania się cząstek: ∇Wspiky = −(45/πh⁶)(h−r)² r̂.

Siły ciśnienia i lepkości

Najpierw dla każdej cząstki obliczana jest gęstość na podstawie sumy Poly6. Następnie ciśnienie jest wyprowadzane z prostego równania stanu:

p = k(ρ − ρ₀) — zlinearyzowane równanie Taita. k to sztywność ciśnienia (odwrotność ściśliwości); ρ₀ to gęstość spoczynkowa. Większe k czyni płyn mniej ściśliwym kosztem konieczności stosowania mniejszych kroków czasowych.

Siła ciśnienia działająca na cząstkę i od wszystkich sąsiadów j to:

Fpres = −mⱼ (pᵢ+pⱼ)/(2ρⱼ) ∇Wspiky — symetryczna średnia (pᵢ+pⱼ)/2 zapewnia zachowanie pędu liniowego. Lepkość wykorzystuje jądro Laplace'a ∇²Wvisc = (45/πh⁶)(h−r) do wygładzania różnic prędkości między cząstkami.

Stabilność: podkroki i tłumienie

Symulacja wykonuje 3 podkroki na klatkę animacji z ustalonym dt = 0,004 s. Sprężyste odbicie od granic wykorzystuje współczynnik tłumienia 0,4, więc energia kinetyczna jest usuwana przy kontakcie ze ścianą — odwzorowując niesprężysty charakter rzeczywistych granic beton/płyn. Dla N ≤ 600 wyszukiwanie sąsiadów O(N²) działa w pojedynczej pętli JS przy 60 fps na nowoczesnym sprzęcie; przyspieszenie siatkowe (hasz przestrzenny) rozszerzyłoby limit do ~5000 cząstek.

Rzeczywiste zastosowania SPH: symulacja wody w Half-Life 2 i wielu nowoczesnych silnikach gier; prognozowanie powodzi przybrzeżnych i modele fal cofkowo-tsunami; symulacje zderzeniowe zbiorników paliwa; astrofizyczne połączenia gwiazd podwójnych i wyrzuty materii z supernowych; symulacja przepływu krwi w tętniakach mózgu; kształtowanie metalu i uderzenia wysokoprędkościowe w inżynierii lotniczej.
← Devlog #74: Synchronizacja Van der Pola, chemotaksja bakteryjna i ewolucja genetyczna Spis blogu →