
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ż