wtorek, 31 stycznia 2017

Reguła modulo w DWUWYMIAROWYM automacie komórkowym

Automat dwuwymiarowy od jednowymiarowego technicznie różni się nieznacznie. W zasadzie wystarczy zamiana tablicy jednowymiarowej na dwuwymiarową (linie 5-6). Reszta jest w zasadzie techniczną konsekwencją tej operacji - jednowymiarowe odniesienia zamieniają się na dwuwymiarowe (np. w liniach 18, 22, 34), pojedyncze pętle zamieniają się na podwójne (linie 16-18 i 31-42), no a reguła automatu musi uwzględniać drugi wymiar...


Reguła sięga teraz do lewego i prawego sąsiada każdej komórki i te indeksy (zmienne right i left deklarowane w liniach 47 i 48) obliczane są w pętli zewnętrznej. Uwzględniamy też sąsiadów na górze i na dole, których indeksy obliczamy już w pętli wewnętrznej (zmienne dw i up
 w liniach 52 i 53).  Reszta jest analogiczna...
Dodatkowym elementem jest jeszcze wyprowadzenie na okno tekstu z numerem kroku za pomocą dawno w tych przykładach nie używanej "komendy" text();

Pozostaje nam do prezentacji wynik. Jednak całe działanie automatu 2D nie da się już ująć na pojedynczym obrazku. Potrzebny byłby film (co będzie innym razem). Poniżej więc tylko jedna, dokładnie pięćset szesnasta klatka tego filmu.

Całość zobaczycie, jak zaimplementujecie. Naprawdę warto ;-)

1 komentarz:

  1. Automat działający wg. zasady:
    "zsumuj stany z sąsiedztwa von Neumana i weź resztę z dzielenia przez 3". A co to jest to "sąsiedztwo"?
    A to już Wikipedia: https://pl.wikipedia.org/wiki/Sąsiedztwo_von_Neumanna

    OdpowiedzUsuń