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.

1
Przykład 1

Spróbujmy zdefiniować algorytm tworzenia geometrycznej prezentacji:

Linia 1. zbiór podkreślnik cantora otwórz nawias okrągły długość podkreślnik linii przecinek wycięcie przecinek liczba podkreślnik linii zamknij nawias okrągły. Linia 3. jeśli liczba podkreślnik linii jest równa 0. Linia 4. narysuj podkreślnik odcinek podkreślnik długości długość podkreślnik linii. Linia 5. w przeciwnym wypadku. Linia 6. nowa podkreślnik długość znak równości długość podkreślnik linii asterysk otwórz nawias okrągły otwórz nawias okrągły 1 minus wycięcie zamknij nawias okrągły prawy ukośnik 2 zamknij nawias okrągły. Linia 7. przenieś podkreślnik pisak. Linia 8. zbiór podkreślnik cantora otwórz nawias okrągły nowa podkreślnik długość przecinek wycięcie przecinek liczba podkreślnik linii minus 1 zamknij nawias okrągły. Linia 9. przenieś podkreślnik pisak o odległość otwórz nawias okrągły długość podkreślnik linii asterysk wycięcie zamknij nawias okrągły. Linia 10. zbiór podkreślnik cantora otwórz nawias okrągły nowa podkreślnik długość przecinek wycięcie przecinek liczba podkreślnik linii minus 1 zamknij nawias okrągły.

Opierając się na powyższym algorytmie, wykonamy implementację w języku Python. W tym celu wykorzystamy moduł turtle:

Linia 1. def zbior podkreślnik cantora otwórz nawias okrągły z przecinek dlugosc podkreślnik linii przecinek wyciecie przecinek liczba podkreślnik linii zamknij nawias okrągły dwukropek. Linia 2. if liczba podkreślnik linii znak równości znak równości 0 dwukropek. Linia 3. z kropka pd otwórz nawias okrągły zamknij nawias okrągły. Linia 4. z kropka fd otwórz nawias okrągły dlugosc podkreślnik linii zamknij nawias okrągły. Linia 5. z kropka pu otwórz nawias okrągły zamknij nawias okrągły. Linia 6. else dwukropek. Linia 7. nowa podkreślnik dlugosc znak równości dlugosc podkreślnik linii asterysk otwórz nawias okrągły 1 minus wyciecie zamknij nawias okrągły prawy ukośnik 2. Linia 8. zbior podkreślnik cantora otwórz nawias okrągły z przecinek nowa podkreślnik dlugosc przecinek wyciecie przecinek liczba podkreślnik linii minus 1 zamknij nawias okrągły. Linia 9. z kropka fd otwórz nawias okrągły dlugosc podkreślnik linii asterysk wyciecie zamknij nawias okrągły. Linia 10. zbior podkreślnik cantora otwórz nawias okrągły z przecinek nowa podkreślnik dlugosc przecinek wyciecie przecinek liczba podkreślnik linii minus 1 zamknij nawias okrągły.

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:

Linia 1. def fraktal podkreślnik cantora otwórz nawias okrągły z przecinek dlugosc podkreślnik lini przecinek ile zamknij nawias okrągły dwukropek. Linia 2. for i in range otwórz nawias okrągły ile zamknij nawias okrągły dwukropek. Linia 3. zbior podkreślnik cantora otwórz nawias okrągły z przecinek dlugosc podkreślnik lini przecinek 1 prawy ukośnik 3 przecinek i zamknij nawias okrągły. Linia 4. z kropka back otwórz nawias okrągły dlugosc podkreślnik lini zamknij nawias okrągły. Linia 5. z kropka lt otwórz nawias okrągły 90 zamknij nawias okrągły. Linia 6. z kropka back otwórz nawias okrągły 100 prawy ukośnik ile minus 1 zamknij nawias okrągły. Linia 7. z kropka rt otwórz nawias okrągły 90 zamknij nawias okrągły.

Kod niezbędny do wyrysowania fraktala i wygenerowania obrazu to:

Linia 1. kratka poniższe wiersze niezbędne są dla wykonania. Linia 2. from turtle import Turtle. Linia 3. zlw znak równości Turtle otwórz nawias okrągły zamknij nawias okrągły. Linia 5. kratka wykonaj obraz. Linia 6. fraktal podkreślnik cantora otwórz nawias okrągły zlw przecinek 300 przecinek 5 zamknij nawias okrągły.
RiYi70fnyGR2o1
Zbiór Cantora – efekt po wykonaniu kilku pierwszych kroków
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.