Fraktale to obiekty powstające na skutek powtarzania tego samego elementu wiele razy w różnym powiększeniu.
Rysowanie fraktali można zaprogramować w Pythonie.
Tworzenie grafiki wymaga zainstalowania środowiska, którego najnowsza wersja znajduje się pod adresem:
https://www.python.org/downloads/
Grafika możliwa jest poprzez wydawanie poleceń obiektowi (tzw. żółw), który znajduje się na ekranie.
Może się on poruszać o określoną ilość punktów i obracać o podany kąt w prawo lub lewo.
W Pythonie za grafikę odpowiada moduł turtle i należy go zaimoprtować za pomocą polecenia:
from turtle import*
W poniższej tabeli zestawiłem podstawowe polecenia, które można wydawać:
Polecenie | Opis działania |
---|---|
fd(n) | Przesunięcie obiektu o n kroków do przodu |
bk(n) | Przesunięcie obiektu o n kroków do tyłu |
rt(alfa) | Obrót obiektu o alfa stopni w prawo |
lt(alfa) | Obrót obiektu o alfa stopni w lewo |
pu() | Podniesienie pisaka - przemieszczanie obiektu bez rysowania |
pd() | Opuszczenie pisaka - rysowanie podczas przemieszczania |
Obiekt domyślnie znajduje się na środku ekranu i jest skierowany w prawą stronę z opuszczonym pisakiem.
Przykładowa procedura rysująca kwadrat wygląda następująco: W wyniku uruchomienia otrzymujemy:
Pierwszym zadaniem jest narysowanie gwiazdy przedstawionej na rysunku:
Należy "wyszukać" element, który się powtarza.
Popatrzmy na rysunek:
Widać tu, że powtarzany jest zaznaczony na czerwono element.
Napiszmy procedurę fragment, która narysuje wskazany element: w efekcie otrzymujemy:
Jeśli powtórzymy rysowanie 4 razy (strzałka skierowana jest w prawo, zatem po narysowaniu fragmentu należy obrócić obiekt o 90 stopni w lewo) otrzymamy naszą gwiazdę, zatem: rysuje całą gwiazdę.
Krzywa Kocha stopnia 0 ma postać odcinaka o długości a
Aby utworzyć krzywą stopnia 1 należy podzielić odcinek na trzy części. Środkowa część zyskuje kształt "ząbka" będącego bokami trójkąta równobocznego, podobnie jak przy rysowaniu fragmentu gwiazdki.
W zależności od stopnia uzyskujemy następujące efekty (podstawowa dłuość boku wynosi 400):
stopień 0 procedura:
stopień 1 procedura:
stopień 2 procedura:
stopień 3 procedura:
stopień 4 procedura:
Jak widać utworzenie rysunku wyższego stopnia wymaga wywołania procedury poprzedniej dla krótszej długości boku.
Takie tworzenie procedur prowadzi nas prosto do tzw. rekurencji, czyli procedura wywołuje samą siebie
dla zmniejszonych wartości parametru.
Warunkiem koniecznym jest zdefiniowanie instrukcji warunkowej kończącej działanie procedury.
Procedura rekurencyjna rysująca krzywą Kocha stopnia n:
Rysunki przedstawiają wersje dla stopnia 0,1,2,3.
Jak to wykonać?
Krzywa Kocha... 120° i gotowe.
...i wynik...
Idea drzewa binarnego polega na tym, że z każdej gałązki "wyrastają" dwie pod różnymi kątami.
Dla drzewa stopnia 0 nie ma gałązek - rysowany jest tylko "pień" drzewa, czyli pionowa kreska.
Jeśli założymy, że drzewo jest symetryczne lewa gałązka może wyrastać po kątem 30°, prawa również.
Zatem kąt pomiędzy nimi wynosi 60°.
Drzewo stopnia 1 wygląda następująco:
Najbardziej właściwym sposobem jest użycie procedury rekurencyjnej.
Dla stopnia 0 rysuje odcinek do przodu i wstecz.
Dla stopnia pierwszego:
Możemy zatem zdefiniować procedurę, która narysuje drzewo dowolnego stopnia:
Praktyczne rozwiązanie wygląda następująco:
Trójkąt Sierpińskiego otrzymuje się następująco:
Dla procedury rekurencyjnej możemy wykonać następujące kroki:
Wywołując procedurę dla różnego n otrzymujemy:
Procedura:
Praktyczne rozwiązanie wygląda następująco: