Strona główna » Poradniki » Logomocja » Galeria » Trójkąt Sierpińskiego
 

Trójkąt Sierpińskiego

Trójkąt Sierpińskiego

Wstęp

Trójkąt Sierpińskiego to fraktal. Pierwsze zapiski o nim są datowane na XIII w. Tworzy się go rysując trójkąt równobczony, a następnie rysując w nim kolejny trójkąt równoboczny, który dzieli większy na 4 równe części. Następnie dla każdego utworzonego trójkąta rysuje się w nim ponownie trójkąt.

Implementacja

Fraktale są to grafiki powstające rekurenycjnie w określony sposób w nieskończoność. Jednak rysowanie w nieskończoność doprowadziłoby do zamalowania strony całkowicie na czarno, a program nie skończyłby się wykonywać. Z tego powodu potrzebne jest założenie, że w przypadku rysowania trójkąta Sierpińskiego stopnia 1 procedura narysuje jedynie obwódkę największego trójkąta.

Kod

Program rysuje trójkąt Sierpińskiego w sposób rekurencyjny. Procedura przyjmuje dwa parametry: :a - określa długość boku aktualnie rysowanego trójkąta oraz :deep - określa ile jeszcze razy funkcja ma być wykonana rekurencyjnie.

  1. oto trójkątPascala :a :deep
  2.   jeśli (i :deep > 0 :a > 1)[
  3.     trójkątPascala :a/2 :deep-1
  4.     pw 30
  5.     np :a/2
  6.     lw 30
  7.     trójkątPascala :a/2 :deep-1
  8.     pw 30
  9.     np :a/2
  10.     pw 120
  11.     np :a
  12.     pw 120
  13.     np :a/2
  14.     pw 90
  15.     trójkątPascala :a/2 :deep-1
  16.     lw 90
  17.     np :a/2
  18.     pw 90
  19.   ]
  20. już

(2.) O ile dana iteracja ma być wywołana oraz jeśli jest sens rysować to: (3.) narysuj trójkąt w lewym dolnym rogu aktualnego trójkąta. Następnie (4. - 6.) poprzejściu do górnego trójkąta (7.) narysuj kolejny rekurencyjny. (8.) Następnie przejdź do wierzchołka trójkąta i narysuj prawy bok, a w drodze powrotnej do początku (15.) narysuj jeszcze jeden trójkąt rekurencyjnie i (16. - 18.) wróć tam skąd rozpoczęła się procedura.

Bardzo ważne, aby pamiętać, że podczas rekurencyjnego wywołania należy: ustawić nowy parametr :a na jedną trzecią aktualnego oraz wskazać, że kolejna warstwa została narysowana przekazując :deep - 1.