smoki 1, 2

smoki 4, 5

smoki 7, 8

smoki 10, 11

Kolejna konstrukcja fraktalna nosi nazwę smoki.
Wczytajmy projekt SMOKI.LGP. Najpierw oglądamy rysunek smoka numer 1. Wynik przypomina schodek, tyle że obrócony o 45 stopni. Następnie rysowany jest smok numer 2. Mamy teraz 4 boki, do schodka "prawego" dołączył schodek "lewy". Popatrzmy jeszcze na następnego smoka, czy widzicie jakąś prawidłowość w narastaniu kolejnych odcinków? Jedno jest pewne - za każdym razem jest ich dwa razy więcej niż poprzednio.
Weźmy kartkę papieru, złóżmy ją w połowie i rozprostujmy, ale tylko do momentu, w którym między dwiema częściami będzie kąt 90 stopni - to może być model smoka numer 1. Teraz złóżmy kartkę ponownie, a następnie jeszcze raz - są na niej już trzy zgięcia. Rozprostowujmy kartkę ostrożnie do momentu aż każde zagięcie rozchyli się o kąt prosty. Popatrzcie na brzeg kartki - mamy model smoka numer 2. Teraz sami spróbujcie uzyskać model smoka numer 3.
Wiemy już jaka jest zasada konstrukcyjna, tylko jaki to ma związek ze smokami? No cóż obejrzyjmy smoki o wyższych numerach (10, 11, 12). Teraz chyba nie dziwi Was nazwa tych tworów.
Algorytm jest silnie rekurencyjny, przy czym jest to rekurencja pośrednia. Procedura SMOKPW wywołuje siebie i procedurę SMOKLW, która z kolei wywołuje procedurę SMOKPW i siebie.
oto starter
 cs ulw 2 ut 0
 przypisz "numer_smoka 0
 SMOKI 1
 cs
 SMOKI 4
 cs
 SMOKI 7
 cs
 SMOKI 10
już

oto bok :n
 jeśli :n = 0 [wynik 300]
 jeśli :n = 1 [wynik 300 / pwk 2]
 wynik ( bok :n - 2 ) / 2
już

oto SMOKI :n
 ugp 2
 powtórz 3 [przypisz "numer_smoka :n + numpow - 1 ~
 niech "bok bok :n + numpow - 1 pod nowexy -150 -40 ~
 skieruj -45 * reszta :n + numpow - 3 8 opu ukp 8 + 2 * numpow ~
 smokpw :n + numpow - 1 :bok czekaj 2500]
już

oto smoklw :n :bok
 jeśli :n = 0 [np :bok stop]
 smokpw :n - 1 :bok
 lw 90
 smoklw :n - 1 :bok
już

oto smokpw :n :bok
 jeśli :n = 0 [np :bok stop]
 smokpw :n - 1 :bok
 pw 90
 smoklw :n - 1 :bok
już

Projekt SMOKI.LGP w Komeniuszu (6 kB)