Przeczytaj
Dzięki funkcjom rekurencyjnymrekurencyjnym możemy uzyskać różne znane fraktalefraktale. Są to między innymi:
zbiór Cantora,
płatek Kocha,
dywan Sierpińskiego,
drzewo binarne.
Do tworzenia takich obrazów w języku Python doskonale nadaje się moduł turtleturtle.
W funkcjach będziemy wykorzystywać obiekt klasy Turtle
do utworzenia obiektu żółwia. Ponieważ funkcja rekurencyjna wywołuje samą siebie wielokrotnie, obiekt żółwia musi być do niej przekazany jako jeden z parametrów. W przeciwnym razie wyniki działania funkcji rekurencyjnej mogłyby być nieprzewidywalne.
Algorytm opisowy do generowania dywanu Sierpińskiego
Dywan Sierpińskiego otrzymujemy z kwadratu przez podzielenie go na dziewięć mniejszych kwadratów (3 x 3). Następnie środkowy kwadrat zostaje zamalowany. Ponownie rekurencyjnie wywołujemy tę funkcję dla każdego z pozostałych kwadratów.
Spróbujmy zdefiniować algorytm tworzenia geometrycznej prezentacji:
Na podstawie powyższego opisu zapiszemy kod funkcji:
Efekt wykonania algorytmu wygląda następująco:
![Zdjęcie ukazuje efekt wykonania algorytmu. Dywan Sierpińskiego w kształcie kwadratu. Z środka został usunięty zbiór w kształcie kwadratu, następnie dla kolejnych części usuwane są coraz mniejsze zbiory w kształcie kwadratów.](https://static.zpe.gov.pl/portal/f/res-minimized/R11c8pYfgKo8V/1665413844/6q8DOhvcTqEmI65HgyscMm3Fyzc4zHOl.png)
Algorytm opisowy do generowania zbioru Cantora
Zbiór Cantora to odcinek, z którego wycinamy część środkową, pozostawiając odcinki pierwszej i trzeciej części. Następnie analogicznie postępujemy z każdą z pozostałych części. W każdym kolejnym kroku liczba części odcinka zwiększa się dwukrotnie, a długość narysowanych odcinków maleje. Kolejne kroki narysowane jeden pod drugim tworzą układ fraktalny.
Spróbujmy zdefiniować algorytm tworzenia geometrycznej prezentacji:
Opierając się na powyższym algorytmie, wykonamy implementację w języku Python. W tym celu wykorzystamy moduł turtle
:
Powyższy kod nie spowoduje jednak wyrysowania fraktala – brakuje w nim poleceń, które wywołałyby rysowanie na różnych poziomach. Musimy zatem napisać dodatkową funkcję, która pomoże w tworzeniu obrazu:
Kod niezbędny do wyrysowania fraktala i wygenerowania obrazu to:
![Zbiór Cantora - efekt po wykonaniu kilku pierwszych kroków. Jest to Linia, która w kolejnych rzędach dzieli się na dwie równe części.](https://static.zpe.gov.pl/portal/f/res-minimized/RiYi70fnyGR2o/1665413844/O94QthyxnkNB6YNNQq5BXZL7CgboQtHp.png)
Algorytm opisowy do generowania płatka Kocha
Płatek Kocha powstaje w wyniku podziału odcinka na trzy części i usunięcia środkowej, a w jej miejsce wstawieniu trójkąta równobocznego o boku długości usuniętego odcinka. Taki algorytm stosujemy dla każdego fragmentu odcinka bazowego, a następnie dla każdego fragmentu każdego kolejnego pododcinka – i tak dalej. Taka figura może mieć nieskończoną długość, gdyż każdy podział tworzy cztery razy więcej odcinków niż poprzedni.
Spróbujmy zdefiniować algorytm tworzenia geometrycznej prezentacji:
Na podstawie takiego opisu zapiszemy kod funkcji:
A oto efekt wykonania algorytmu:
![Płatek Kocha – efekt po wykonaniu kilku pierwszych kroków. Jest to figura w kształcie płatka śniegu, stworzona z jednej krzywej z ostrymi krawędziami.](https://static.zpe.gov.pl/portal/f/res-minimized/R1Ap30iRUGOu5/1665413844/2TFE5ApmX3x31R9qCEkfQv302qio9YGU.png)
Algorytm opisowy do generowania drzewa binarnego
Drzewo binarne to odcinek, który dzieli się na dwa kolejne, każdy rysowany pod kątem 45 stopni w lewo i 45 stopni w prawo. W ten sposób powstaje swego rodzaju „korona drzewa”. W kolejnym module tego e‑materiału znajdziesz prezentację multimedialną, dzięki której dokładnie prześledzisz proces powstawania tego fraktala.
Spróbujmy zdefiniować algorytm tworzenia geometrycznej prezentacji:
Na podstawie powyższego opisu zapiszemy kod funkcji:
Efekt wykonania algorytmu wygląda następująco:
![Drzewo binarne - efekt po wykonaniu kilku pierwszych kroków. Od korzenia, jedna linia dzieli się na dwie. Linie te dzielą się na dwie w każdym kolejnym kroku wykonania algorytmu.](https://static.zpe.gov.pl/portal/f/res-minimized/RrBjln6KuCTGg/1665413844/2SiKyFdf4ZHzkwp2Qz83uVFInGJcYkFN.png)
Podsumujmy najważniejsze elementy tego e‑materiału.
Fraktale to figury geometrycznie nieskończenie samopodobne.
Możemy przygotować funkcje rekurencyjne i wizualizować je za pomocą modułu
turtle
.Obiekt żółwia przy funkcjach rekurencyjnych musimy tworzyć poza przestrzenią nazwprzestrzenią nazw funkcji.
Słownik
(łac. fractus – złamany, cząstkowy, ułamkowy) obiekt składający się z coraz bardziej złożonych detali, z których każdy jest podobny do całości
(ang. namespace) miejsce w pamięci operacyjnej, w której jest przechowywana dana zmienna; najczęściej przestrzeń nazw wiąże się z funkcją, a zmienne używane w niej są widoczne tylko w obrębie tej przestrzeni – jest to „zakres obowiązywania” tych zmiennych
proces polegający na wywoływaniu funkcji przez siebie samą do momentu rozwiązania określonego zadania
(z ang. żółw) moduł (standardowa biblioteka) w języku Python realizujący grafikę żółwia