Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Mandelbrotova množina a jak na ní
sdl now
28. března 2002, 00.00 | Tento nádherný fraktál je velice snadné vytvořit. V SDL stačí napsat jen asi 100 řádek kódu a náš program bude umět i zoomování do libovolného místa, které určíme myší....
Tento nádherný fraktál je velice snadné vytvořit. Pro každý pixel počítáme tuto rovnici (iterujem)
Zn+1=Zn2+C
do té doby než se Z dostane mimo obrazovku. Nutno podotknout, že Z i C jsou komplexní čísla a na počátku je Z=0 a C odpovídá souřadnicím bodu, pro který počítáme barvu. Po té co se Z dostane mimo obrazovku zobrazíme v bodě C barvu podle počtu kroků, jež to trvalo. Pokud Z neopustí obrazovku do námi stanoveného kroku vykreslíme černou barvu, neboť se jedná o vnitřek fraktálu. Nutno podotknout, že pokud Z opustí obrazovku bude se většinou zvětšovat do nekonečna a tedy oblast fraktalu nenáleží, dá se testovat i zda Z>2, což je hlavně na krajích přesnější,ale pomalejší.
Jelikož Céčko nepracuje s komplexními čísli vyjádříme si rovnici pro výpočet takto
Zi=2*Zi1*Zr1+Ci;
Zr=(Zr1*Zr1)-(Zi1*Zi1)+cr;
Přičemž index i znamená imaginární část, index r reálnou část a
index 1 označuje předchozí hodnotu (n-1)
Teď se již můžeme vrhnout do napsání funkce, která nám naš fraktál zobrazí.
|
A teďka trochu komentáře, na začátku zamkneme surface a zacílíme ukazatel misto na první pixel zobrazovacího surfacu screen. Dále pro všechny pixely surfacu počítáme naší rovnici s tím, že do počátečních podmínek zahrneme zvetšení zoom a posun pos_x, pos_y. Nakonec každý pixel vykreslíme a přesuneme ukazatel misto na další pixel, poté surface odemkneme. Je třeba podotknout, že pokud bod [zr,zi] neopustí obrazovku do 128 kroků (maximální počet iretací) cyklus skončí, pokud bychom mez položili větší musíme to zohlednit při počítání barvy, zmenšení konstanty nám program zrychlí, ale též nás ochudí o detaily na hranicích mandelbrotovy množiny.
Aby dojem z fraktálu vynikl napíšeme krátkou aplikaci na jeho zobrazení a přibližování.
Zde je zdrojový kód
|
Myslím, že program je víceméně jasný, používá se v něm pole pozice pro uložení středu obrazovky tedy bodu, ve kterém fraktál kreslíme. Počet položek 100 ani nevyužijeme, neboť při dvojnásobném zvětšení pro každé přiblížení dříve dosáhneme přesnosti typu double, což se projeví zpixelovatěním obrázku. Pokud nerozumíte některým příkazům SDL, tak nahlédněte do předchozích článků o SDL nebo do přehledného anglického helpu k této unitě.
Zde je program ke stažení fraktal.zip (124KB)
Obsah seriálu (více o seriálu):
- SDL - profesionální hry jednoduše a snadno
- SDL a šetřič obrazovky
- SDL - 5 tipů a triků
- Mandelbrotova množina a jak na ní
- SDL_mixer - zvuky a hudba jednoduše a snadno
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007