wstecz

22.07.2014 by noniwoo

EnergySimulation

Automaty komórkowe to ciekawy kawałek informatyki - małe programy o prostych regułach, które w trakcie działania mogą produkować ciekawe kształty i zachowania.

Ponieważ przyszedł mi do głowy pewien automat komórkowy, postanowiłem go napisać. Po kilku dniach nauki SDL2 i programowania stworzyłem program, który daje bardzo interesujący efekt. Ale najpierw trochę o regułach.

Każda komórka posiada swoją wartość - energię w postaci (nieujemnych) liczb całkowitych. W każdej iteracji przekazuje ona sąsiednim komórkom swoją wartość, jednak każdemu po równo. Jeśli jakiś kawałek energii nie da się podzielić równo po sąsiadach, to ta reszta zostaje w komórce.

Przykładowo:

wartość komórki = 20
liczba sąsiadów = 8
przekazana wartość do każdego sąsiada = 20 / 8 = 2
wartość komórki po iteracji = 20 - (2*8) = 4

Przestrzeń komórek jest regularną kwadratową siatką o skończonych rozmiarach. Stąd komórki na brzegach mają mniej sąsiadów. Nie jest więc to przestrzeń nieskończona ani ciągła na brzegach (w tym sensie że przechodząc przez jeden brzeg znadujemy się przy drugim przeciwnym).

Początek symulacji to jedna komórka na środku planszy o dużej wartości np. 1000000. Efekt końcowy, program symulujący oraz jego kod źródłowy są dostępne poniżej.

Jeśli chciałbyś się dowiedzieć więcej o podobnych rzeczach, warto poszukać pod hasłami: automat komórkowy (cellular automata), emergencja (emergence), oraz nieco oddalona ale dająca podobne efekty kymatyka (cymatics).

Przykładowy obraz końcowego etapu symulacji

EnergySimulation

Źródła programu + projekt MS Visual C++ 2010 + Makefile dla Linuxa (dzięki dozziemu): EnergySimulation source

Program pod Windows: EnergySimulation Windows bin