• Strona główna
  • Makler
  • Nauka
  • O autorze
  • To czytam
  • West Highland Way
Niebieski Pomarańczowy Zielony Różowy Purpurowy

Zbiór Mandelbrota

Post z kategorii nauka. Napisał Newton, a był to Luty 18, 2007 roku.
lut 18

Kiedyś, gdy byłem dość młodym użytkownikiem 8-bitowego komputera Atari 65XE (z magnetofonem XC12 jako pamięcią masową) zobaczyłem w telewizji program edukacyjny poświęcony fraktalom. Zaciekawiło mnie to, że każdy fragment takiego fraktala po przybliżeniu daje w obraz bardzo podobny do całości. Marzyło mi się, żeby móc narysować coś takiego na moim komputerze – niestety nie posiadałem w tamtym czasie dostatecznych umiejętności matematyczynych, by zrozumieć w ogóle czym np. taki zbiór Mandelbrota jest (nie miałem zresztą również skąd zaczerpnąć tej wiedzy).

Na szczęście teraz mam dostęp do Wikipedii, a także znam już liczby zespolone – okazuje się, że nic więcej nie potrzeba, by zrozumieć, czym jest fraktal i jak go narysować. Jeśli jednak drogi czytelniku nie wiesz, czym są liczby zespolone, to nie przejmuj się tym za bardzo. Na użytek poniższego tekstu możemy przyjąć po prostu, że liczba zespolona określa pewien punkt na płaszczyźnie (tak jak liczba rzeczywista określa pewien punkt na prostej). Liczby zespolone najczęściej zapisuje się tak: (a,b), lub tak: a+bi. Liczba i ma taką ciekawą właściwość, że podniesiona do kwadratu daje -1: i^2=-1. Wiedza ta przyda nam się do wyprowadzenia wzoru na kwadrat liczby zespolonej, który to wzór jest niezbędny do narysowania ładnego fraktala: (a+bi)^2=a^2+2abi+(bi)^2=a^2+2abi-b^2=a^2-b^2+(2ab)i.

Wiemy już, czym są liczby zespolone, jak można taką liczbę podnieść do kwadratu, możemy więc określić, czym jest zbiór Mandelbrota. Otóż, zbiór Mandelbrota, to zbiór takich liczby zespolonych p, dla których ciąg określony wzorem rekurencyjnym:

z_0=0
z_{n+1}={z_n}^2+p

ma określoną granicę (nie dąży do nieskończoności). W praktyce wystarczy sprawdzić, czy punkt określony przez tę liczbę zespoloną, leży w odległości mniejszej od \sqrt{2} od początku układu współrzędnych (w Wikipedii napisane jest, że dla 2, a nie dla \sqrt{2}, ale widocznie działa i tak i tak). Odległość punktu określonego przez liczbę zespoloną od początku układu współrzędnych można dość prosto obliczyć. Dla liczby zespolonej (a,b) jest to po prostu \sqrt{a^2+b^2}. Odległość ta nazywa się modułem liczby zespolonej. Moduł ten musi więc wynosić mniej niż \sqrt{2} dla pewnej liczby pierwszych wyrazów ciągu z_n. Powstaje oczywiście pytanie: ile tych pierwszych wyrazów trzeba zbadać. Odpowiedź nie jest taka prosta – im mniej wyrazów zbadamy, tym szybszy uzyskamy algorytm, ale z drugiej strony – tym mniej dokładny obraz fraktala powstanie.

Pozostaje jeszcze pytanie o kolory. Fraktale, które widziałem w telewizji były bardzo kolorowe, tymczasem w/w algorytm pozwala nam jedynie domyśleć się, gdzie postawić kropkę, a gdzie jej nie stawiać. Otóż, jeśli w pewnych punktach n-ty wyraz ciągu z ma moduł większy od \sqrt{2}, to n możemy sobie zapamiętać i na jego podstawie pokolorować punkt, który aktualnie rozważamy.

„Przepis” na narysowanie fraktalu Mandelbrota jak widać nie jest bardzo skomplikowany, a pozwala uzyskać zadziwiające efekty. Pół godziny pracy w C# zaowocowało następującym obrazkiem:

Zbiór Mandelbrota narysowany przy użyciu programu w C#.

Jednak to nie koniec. Zachęcony powodzeniem tej operacji, postanowiłem sprawdzić, czy małe Atari poradzi sobie z narysowaniem fraktala (pomyślałem, że wystarczy przedstawienie dwukolorowe). Efektem krótkiego (nieco ponad 20 linijek!) programu w Basicu jest następujący obrazek:

Zbiór Mandelbrota narysowany przy użyciu Atari 65XE.

Mimo, że program w Basicu był krótszy niż ten w C# (a może właśnie dlatego), wykonywał się on o wiele dłużej. Uruchomiłem go na emulatorze z opcją Full speed (prędkość 10-krotnie przewyższająca oryginalne Atari), a mimo to obrazek powstawał przez kilkanaście godzin. Może gdyby zakodować to w asemblerze…

Listing programu w Basicu.

Źródła w C#.

Komentarze: 6

  1. Endrju on Luty 23rd, 2007

    Nie czaje :(

  2. Newton on Luty 23rd, 2007

    A czego konkretnie nie czaisz Andrzeju?

  3. c on Październik 14th, 2008

    Linki do obrazow i źródeł są nieaktualne :(

  4. Newton on Październik 15th, 2008

    Poprawione.

  5. c on Październik 16th, 2008

    Dzieki

  6. r on Kwiecień 13th, 2011

    Czym jest to p we wzorze? w ogole nie wiem jak to narysowac… mało ci zrozumialem.



Zostaw odpowiedź

Blog Newtona

Nazywam się Newton. Teraz będę kłamał.

  • Kategorie
    • arduino
    • emo
    • filmy
    • inne
    • książki
    • muzyka
    • nauka
    • podróże
    • technikalia
    • wiara
  • Archiwa
    • Styczeń 2012
    • Grudzień 2011
    • Wrzesień 2011
    • Sierpień 2011
    • Maj 2011
    • Marzec 2011
    • Luty 2011
    • Styczeń 2011
    • Grudzień 2010
    • Listopad 2010
    • Październik 2010
    • Sierpień 2010
    • Lipiec 2010
    • Maj 2010
    • Kwiecień 2010
    • Luty 2010
    • Grudzień 2009
    • Listopad 2009
    • Październik 2009
    • Wrzesień 2009
    • Sierpień 2009
    • Lipiec 2009
    • Czerwiec 2009
    • Maj 2009
    • Kwiecień 2009
    • Marzec 2009
    • Luty 2009
    • Styczeń 2009
    • Grudzień 2008
    • Listopad 2008
    • Październik 2008
    • Wrzesień 2008
    • Sierpień 2008
    • Lipiec 2008
    • Czerwiec 2008
    • Maj 2008
    • Kwiecień 2008
    • Marzec 2008
    • Luty 2008
    • Styczeń 2008
    • Grudzień 2007
    • Listopad 2007
    • Październik 2007
    • Wrzesień 2007
    • Sierpień 2007
    • Maj 2007
    • Kwiecień 2007
    • Marzec 2007
    • Luty 2007
  • Wyszukiwanie






  • Strona główna
  • Makler
  • Nauka
  • O autorze
  • To czytam
  • West Highland Way

© Copyright Blog Newtona. All rights reserved.
Designed by FTL Wordpress Themes brought to you by Smashing Magazine

Do góry!