Geometria fraktalna, czyli zagadnienia związane z obliczeniami wyników funkcji iterowanych IFSIFSIFS, znajduje zastosowanie w kompresji danych.

Przyjrzyjmy się dwóm przykładowym fraktalomfraktalfraktalom zbudowanym z wykorzystaniem IFS. Będą to znane ci już paproć Barnsleya i smok Heighwaya.

1
Ważne!

W celu graficznego przedstawienia obrazu złożonego z wielu par punktów wygodnie jest użyć modułu matplotlibmatplotlibmatplotlib.

Paproć Barnsleya

Paproć Barnsleya jest fraktalem, który wyróżnia się ze względu na niezwykłe podobieństwo do liści paproci występujących w naturze. Aby utworzyć taki fraktal, należy wielokrotnie (najlepiej ok. 100 000 razy) przekształcać punkt początkowy z wykorzystaniem jednej z czterech funkcji. Funkcji tych trzeba użyć w sposób losowy w proporcjach A : B : C : D wynoszących:

85:7:7:1

Wspomnianymi wcześniej funkcjami są:

f1(x)=(0.85x+0.04y),f1(y)=(0.04x+0.85y+1.6)elementAproporcji(85)
f2(x)=(0.15x+0.28y),f2(y)=(0.26x+0.24y+0.44)elementBproporcji(7)
f3(x)=(0.20x0.26y),f3(y)=(0.23x+0.22y+1.6)elementCproporcji(7)
f4(x)=(0),f4(y)=(0.16y)elementDproporcji(1)
1
Przykład 1

Oto zapisany w postaci pseudokodu algorytm służący do skonstruowania paproci Barnsleya:

Linia 1. paprotka podkreślnik barnsleya. Linia 2. utwórz puste tablice X przecinek Y na kolejne wartości x przecinek y. Linia 3. x przecinek y przypisz współrzędne początkowe otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły. Linia 5. powtórz n razy dwukropek. Linia 6. q przypisz wartość proporcji od 0 do 100. Linia 7. w zależności od wartości q wykonaj dwukropek. Linia 8. dla q otwórz nawias ostrokątny 1 oblicz x i y bazując na funkcji otwórz nawias okrągły proporcja D zamknij nawias okrągły. Linia 9. dla q otwórz nawias ostrokątny 86 oblicz x i y bazując na funkcji otwórz nawias okrągły proporcja A zamknij nawias okrągły. Linia 10. dla q otwórz nawias ostrokątny 93 oblicz x i y bazując na funkcji otwórz nawias okrągły proporcja C zamknij nawias okrągły. Linia 11. dla pozostałych q oblicz x i y bazując na funkcji otwórz nawias okrągły proporcja B zamknij nawias okrągły. Linia 13. dodaj nowe x przecinek y do tablic X oraz Y. Linia 15. narysuj obraz zawierający punkty X i Y.
Polecenie 1

Przeanalizujmy działanie funkcji generującej rysunek paproci Barnsleya, napisanej na podstawie przedstawionego powyżej pseudokodu.

R3QH7LmM5hYN51
Przypomnij sobie tytuł abstraktu, wysłuchaj nagrania i spróbuj zaproponować własny temat dla dzisiejszej lekcji.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Smok Heighwaya

Smok Heighwaya jest obrazem powstającym w wyniku wielokrotnego przekształcenia punktu o współrzędnych (x,y) za pomocą stosowanych naprzemiennie funkcji:

f1(x)=(0.4x1),f1(y)=(0.4y+0.1)
f2(x)=(0.76x0.4y),f2(y)=(0.4x+0.76y)
1
Przykład 2

Przeanalizujmy algorytm opisujący tworzenie takiego fraktala:

Linia 1. smok podkreślnik heighwaya. Linia 2. utwórz puste tablice X przecinek Y na kolejne wartości x przecinek y. Linia 3. x przecinek y przypisz współrzędne początkowe otwórz nawias okrągły 0 przecinek 0 zamknij nawias okrągły. Linia 5. powtórz n razy dwukropek. Linia 6. wybierz losowo z jednakowym prawdopodobieństwem n 0 lub 1. Linia 7. jeśli n wynosi 1 wykonaj dwukropek. Linia 8. x znak równości −0 kropka 4 asterysk x − 1. Linia 9. y znak równości −0 kropka 4 asterysk y plus 0 kropka 1. Linia 10. w przeciwnym wypadku wykonaj dwukropek. Linia 11. x znak równości 0 kropka 76 asterysk x − 0 kropka 4 asterysk y. Linia 12. y znak równości 0 kropka 4 asterysk x plus 0 kropka 76 asterysk y. Linia 14. dodaj nowe x przecinek y do tablic X oraz Y. Linia 16. narysuj obraz zawierający punkty X i Y.

Zdefiniujmy funkcję, która zrealizuje przedstawiony pseudokod w języku Python.

Linia 1. def smok podkreślnik heighwaya otwórz nawias okrągły powtorzen zamknij nawias okrągły dwukropek. Linia 2. from random import randint. Linia 3. import matplotlib kropka pyplot as plt. Linia 5. X znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 6. Y znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 7. x przecinek y znak równości 0 przecinek 0. Linia 9. for kolejny in range otwórz nawias okrągły powtorzen zamknij nawias okrągły dwukropek. Linia 10. q znak równości randint otwórz nawias okrągły 0 przecinek 1 zamknij nawias okrągły. Linia 12. if q znak równości znak równości 1 dwukropek. Linia 13. x znak równości minus 0 kropka 4 asterysk x minus 1. Linia 14. y znak równości minus 0 kropka 4 asterysk y plus 0 kropka 1. Linia 15. else dwukropek. Linia 16. x znak równości 0 kropka 76 asterysk x minus 0 kropka 4 asterysk y. Linia 17. y znak równości 0 kropka 4 asterysk x plus 0 kropka 76 asterysk y. Linia 19. X kropka append otwórz nawias okrągły x zamknij nawias okrągły. Linia 20. Y kropka append otwórz nawias okrągły y zamknij nawias okrągły. Linia 22. kratka tworzenie wykresu minus niebieskie znaki apostrof plus apostrof. Linia 23. plt kropka plot otwórz nawias okrągły X przecinek Y przecinek apostrof b plus apostrof zamknij nawias okrągły. Linia 24. plt kropka show otwórz nawias okrągły zamknij nawias okrągły.

Wynikiem działania funkcji będzie następujący obraz:

R1IGfRggeGaJr
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Już wiesz

Podsumujmy najważniejsze elementy bieżącego e‑materiału:

  • funkcje IFS są używane do generowania fraktali;

  • moduł matplotlib jest wykorzystywany do generowania rysunków w Pythonie.

Słownik

IFS
IFS

(ang. iterated function system) system funkcji iterowanych, wykorzystywany do konstruowania fraktali

fraktal
fraktal

obiekt samopodobny (taki, którego poszczególne części są podobne do całości)

matplotlib
matplotlib

biblioteka służąca do przedstawienia obrazów złożonych z punktów o współrzędnych  x oraz y (wykresów, histogramów, rozkładów itp.); moduł matplotlib nie jest dostępny w standardowej instalacji Pythona; należy go zainstalować, korzystając z mechanizmu pip