Liczby platformy
Symulacje fali 31
Fraktal Newtona
Metoda wyszukiwania pierwiastków Newtona zastosowana do zn−1 na płaszczyźnie zespolonej. Każdy piksel jest kolorowany w zależności od tego, do którego pierwiastka zbiega i jak szybko.
Otwórz →Model sterty piasku
Samoorganizująca się krytyczność Baka–Tanga–Wiesenfelda. Dodawaj ziarna, aż komórki się przewrócą; lawiny wszystkich rozmiarów pojawiają się bez żadnego strojenia parametrów.
Otwórz →Funkcje zespolone
Kolorowanie dziedziny f(z): odcień = arg f(z), jasność = |f(z)|. Wizualizuj bieguny, zera i cięcia gałęzi dla 12 klasycznych funkcji.
Otwórz →🌀 Fraktal Newtona
Algorytm
Metoda Newtona znajduje pierwiastki f(z) = 0 poprzez iterację:
zn+1 = zn − f(zn) / f′(zn)
Dla wielomianu f(z) = zk−1 pierwiastkami są k-te pierwiastki z jedynki: e2πin/k dla n = 0, 1, …, k−1. Fraktal powstaje, ponieważ granice między basenami przyciągania — zbiorami punktów startowych zbiegających do każdego pierwiastka — są nieskończenie szczegółowe.
Renderowanie piksel po pikselu
Każdy z 600×600 pikseli płótna odwzorowuje punkt z na płaszczyźnie zespolonej. Pętla wewnętrzna wykonuje kroki metody Newtona, dopóki odległość do najbliższego pierwiastka nie spadnie poniżej tolerancji ε albo nie zostanie osiągnięta maksymalna liczba iteracji. Szybkość zbieżności (liczba iteracji potrzebna do osiągnięcia tolerancji) moduluje jasność, tworząc cieniowany gradient, który nadaje obrazowi wrażenie trójwymiarowości.
- Odcień — określany przez to, do którego pierwiastka dotarto (jeden z k odrębnych kolorów z ROOT_HUES).
-
Jasność —
0.15 + 0.6 × (1 − iters/maxIter), więc szybka zbieżność jest jasna. - Brak zbieżności — punkty, które wyczerpują iteracje, są renderowane niemal na czarno.
Arytmetyka liczb zespolonych
Cała arytmetyka wykonywana jest na parach część rzeczywista/część
urojona. cmul(ar,ai,br,bi) zwraca
[ar·br−ai·bi, ar·bi+ai·br]. zn jest obliczane przez wielokrotne wywołanie
cmul, a nie za pomocą wzoru de Moivre'a (dzięki temu
kod pozostaje bez rozgałęzień dla dowolnego wykładnika całkowitego).
Dzielenie f(z)/f′(z) korzysta z cdiv ze
standardowym wzorem „sprzężenie przez kwadrat modułu”.
Co warto wypróbować
- Przełącz z z³−1 na z⁸−1 — liczba fraktalnych „płatków” rośnie wraz ze stopniem.
- Przeciągnij suwak ε niemal do zera — w pobliżu potrójnych punktów węzłowych pojawiają się cienkie baseny.
- Przybliż granicę basenu — fraktalna samopodobność jest widoczna w każdej skali.
- Zmniejsz maksymalną liczbę iteracji — stracisz szczegóły, ale szerokie kolorowe obszary pozostaną.
⏳ Model sterty piasku
Bak–Tang–Wiesenfeld (1987)
Sterta piasku BTW to kanoniczny model samoorganizującej się krytyczności (SOC). Całkowita wysokość hi,j jest przechowywana w każdej komórce siatki N×N. Dodanie ziarna do dowolnej komórki może wywołać kaskadę przewrotek zgodnie z regułą:
if h[i,j] ≥ K: h[i,j] −= K; each of 4 neighbours: h += 1
Ziarna, które opuszczają granicę, znikają (granica otwarta), więc całkowita liczba ziaren jest zachowana średnio. System samoorganizuje się do stanu krytycznego bez żadnego strojenia K, a rozkład rozmiarów lawin P(s) jest zgodny z prawem potęgowym P(s) ~ s−τ z τ ≈ 1.2.
Implementacja
Siatka to płaski Int32Array(N×N). Pętla
stabilizacji korzysta z podejścia opartego na kolejce BFS: komórki
krytyczne na początku upuszczenia są wprowadzane do kolejki, a
następnie przetwarzane jedna po drugiej. Nowo krytyczni sąsiedzi są
dołączani do kolejki. Rozmiar lawiny to całkowita liczba zdarzeń
przewrócenia. Kolory są przypisywane według wysokości całkowitej
(0=czarny, 1=ciemnozielony, 2=żółto-zielony, 3=bursztynowy,
≥K=czerwono-pomarańczowy) i zapisywane bezpośrednio w buforze
ImageData.
Co warto wypróbować
- Uruchom z upuszczaniem centralnym, aż sterta się nasyci — powstają koncentryczne pierścienie, które później rozpadają się na wzory przypominające fraktale.
- Przełącz na upuszczanie losowe, aby równomiernie wypełnić siatkę i obserwować ciągłe mikrolawiny.
- Użyj trybu kliknięcia, aby ręcznie wysypać 20 ziaren w dowolnym miejscu — wywołaj własną, celową lawinę.
- Obserwuj, jak histogram log-log pod płótnem tworzy prostą linię nachylenia — prawo potęgowe w akcji.
- Zmień K z 4 na 2 lub 8 i zobacz, jak próg krytyczny zmienia wzór nasycenia.
🎨 Funkcje zespolone
Kolorowanie dziedziny
Kolorowanie dziedziny to technika wizualizacji funkcji zespolonych f : ℂ → ℂ na płótnie 2D. Dla każdego punktu z = x + iy w oknie podglądu obliczamy f(z) = u + iv i odwzorowujemy wynik na kolor:
- Odcień = (arg f(z) + π)/(2π) × 360°, więc pełna tęcza przechodzi jeden cykl wokół każdego zera.
- Jasność = 0.35 + 0.4×((log|f(z)|) mod 1), co daje koncentryczne pierścienie izokonturowe modułu przy |f| = ek.
- Nasycenie = 85%, pozostaje stałe dla zachowania czytelności.
Arytmetyka liczb zespolonych w JS
Cała arytmetyka wykonywana jest analitycznie na parach (część rzeczywista, część urojona) — żaden obiekt liczby zespolonej nie jest alokowany, aby pętla wewnętrzna pozostała szybka:
- exp z = ex(cos y + i sin y)
- sin z = sin(x)cosh(y) + i cos(x)sinh(y)
- cos z = cos(x)cosh(y) − i sin(x)sinh(y)
- tan z = sin(z)/cos(z) poprzez dzielenie składowych
- sinh z = sinh(x)cos(y) + i cosh(x)sin(y)
- Möbius = (z−1)/(z+1) — konforemny automorfizm sfery Riemanna
Łącznie dostępnych jest dwanaście funkcji. Przełączenie funkcji uruchamia opóźnione ponowne renderowanie wszystkich 360 000 pikseli; podczas obliczeń (~30 ms) wyświetlana jest nakładka “Rendering…”.
Co warto wypróbować
- z² — dwa sektory, każdy kolor pojawia się dwukrotnie; pojedyncze zero w początku układu.
- 1/z — identyczny układ co z², ale odwrócony (pojedynczy biegun w początku układu).
- sin z — nieskończenie wiele zer wzdłuż osi rzeczywistej, w odstępach π; okresowa struktura kolumnowa.
- exp z — brak biegunów i zer w ogóle; jasność rośnie w prawo (Re z rośnie).
- tan z — bieguny przy z = π/2 + kπ; podwójnie nawinięte koło kolorów przy każdym z nich.
- Möbius — odwzorowuje płaszczyznę konforemnie; obserwuj, jak proste przekształcają się w okręgi.
- Włącz siatkę Re/Im, aby zobaczyć, jak f(z) deformuje kartezjańskie linie współrzędnych.
- Przybliż biegun lub zero — liczba nawinięć koloru wokół niego równa się jego rzędowi.
Najważniejsze rozwiązania techniczne
-
Fraktal Newtona —
newtonStep(zr, zi, n)oblicza zn przez wielokrotnecmul(bez trygonometrii, bez logarytmów, tylko wykładnik całkowity); obraz 600×600 renderuje się w <100 ms w nowoczesnej przeglądarce. DebouncescheduleRender()(30 ms) zapobiega zbyt częstym ponownym renderowaniom podczas przeciągania/ przewijania. Legenda przebudowuje się automatycznie przy zmianie stopnia. -
Sterta piasku — stabilizacja BFS z pojedynczym
płaskim polem bitowym kolejki
Uint8Arrayunika ponownego dodawania komórek do kolejki. Log lawin toMap<size, count>aktualizowana po każdej grupie upuszczeń, renderowana jako wykres liniowy log-log na drugim płótnie pod siatką. -
Funkcje zespolone — własna funkcja
hslToRgbzastępuje obliczenia CSS w gorącej pętli pikseli (unika parsowania łańcuchów znaków). Zoom przez przewijanie zachowuje pozycję kursora we współrzędnych płaszczyzny zespolonej (ta sama technika co w Fraktalu Newtona). Obsługiwane jest gesty szczypania na ekranach dotykowych. -
Wszystkie symulacje fali 31 wychodzą z pełnymi stronami EN + UK i
są zarejestrowane w
simulations.json.
Tagi
Metoda Newtona Fraktale Baseny przyciągania Sterta piasku Samoorganizująca się krytyczność Prawo potęgowe Analiza zespolona Kolorowanie dziedziny Odwzorowanie konforemne Fala 31
Zapowiedź fali 32
Trzy symulacje są projektowane na falę 32:
- Agregacja ograniczona dyfuzją — cząstki wykonują błądzenie losowe i przyklejają się przy kontakcie; powstały klaster DLA ma wymiar fraktalny ~1,71.
- Portret fazowy — interaktywna analiza płaszczyzny fazowej dla 2D autonomicznych równań różniczkowych zwyczajnych; wizualizuj izokliny zerowe, punkty stałe, cykle graniczne i baseny przyciągania dla układów Lotki-Volterry, van der Pola i własnych systemów.
- Wzory Turinga — mechanizm reakcji-dyfuzji Alana Turinga odpowiedzialny za morfogenezę; dwa morfogeny o różnych współczynnikach dyfuzji samoistnie tworzą plamy, paski i labirynty.
Wszystkie symulacje fali 32 wyjdą ze stronami EN + UK w dniu premiery.