Naszym zadaniem będzie napisanie programu, który oblicza kolejne przybliżenia zbiorów fraktalnych. Inspiracją będą dla nas zbiory Julii i Mandelbrota, ale nasz program będzie bardziej ogólny.
Podstawową funkcją naszego programu, będzie funkcja:
M=approx(xrange,yrange,max_iter,max_value,f),
która zwraca macierz wyników iteracji funkcji f dla wszystkich par wartości z wektorów xrange i yrange, interpretowanych jako liczby zespolone.
M[a,b] = liczba iteracji funkcji f dla wartości xrange[a]+j*yrange[b], dla których wartość funkcji nie wykracza poza max_value, przy czym przybliżamy wynik poprzez wykonanie maksymalnie max_iter iteracji. Tzn jeśli po wykonaniu max_iter iteracji nigdy nie wykroczyliśmy poza zakres max_value, to zwracamy max_iter, w przeciwnym wypadku zwracamy ten numer iteracji, dla którego nasza wartość f(z,n) przekroczyla max_value. argument f powinien być funkcją przyjmującą 2 argumenty: z i n, gdzie z to liczba zespolona a n to stopień iteracji.
Oprócz funkcji approx(..), powinnismy zaimplementować funkcje Mandelbrot(z,n) i Julia(z,n), implementujące iterację dla zbioru Julii i Mandelbrota.
Nasz program powinien umożliwiać:
- Wywołanie z linii komend i podawanie parametrów: zakresy x,y, n, typ funkcji, typ wyjścia, dodatkowe parametry (np. c dla zbioru Julii)
- Wyświetlanie wyniku przy pomocy funkcji imshow() wg wybranej skali kolorów
- zapisywanie obrazka w pliku png, pdf lub macierzy w pliku (przy pomocy operacji np.save())
Punktacja:
- funkcja approx – 3 pkt
- funkcje mandelbrot, julia – 2 pkt
- obsługa z linii komend – 2 pkt
- wyswietlanie – 2 pkt
- zapis do pliku – 1 pkt
Rozwiązania wysyłamy do 25 III na adres e-mail wykładowcy z dopiskiem [ONA-1-2018]- w tytule
Przypominam, że na ćwiczeniach mówiliśmy o obsłudze parametrów z linii komend przy użyciu modułu argparse https://docs.python.org/3/library/argparse.html Warto się z nim zapoznać, jeśli chcą Państwo otrzymać wszystkie 10 punktów.