Zdravim
Kedysi som sa fraktalom venoval (este na strednej skole a potom na univerzite) a konkretne aj metodou generovania mrakov/hor. Tento clanok som z casovych dvovodov necital (posledne uz len pozriem obrazky :-) ), no prave z obrazkov som si vsimol, ze vo vsetkych vidno kolme hviezdy (krize) - to je standardny problem tejto metody. Pamatam sa, ze som vo svojom fraktalovom programe v ramci semestralnej prace venoval dost mojho mozgoveho vykonu, aby vygnerovane hory (+ aj mracnove textury) neobsahovali tento umely defekt :-) - a to som necerpal zo ziadnych inych zdrojov. Takze verim, ze existuje aj lepsia metoda ;-). To len tak na okraj.
Clanky su inac super; keby som mal tieto k dispozicii pred par rokmi, boli by pre mna velmi uzitocne ;-)
Názory k článku
Metoda přesouvání prostředního bodu a obrázky plasmy
12. 9. 2006 9:11
Nový
Re: krize v mrakoch
celé vlákno
Dobrý den,
máte naprostou pravdu v tom, že dnes uvedená metoda trpí právě tímto nedostatkem (je však nejjednodušší, proto se také hodí pro demonstraci). Při tvorbě fraktálních krajin tento nedostatek prakticky vůbec nevadí, ale při zobrazení plasmy jako textury již ano - je to způsobeno tím, že lidské oko+muzek jsou vytrénovány na hledání hran v obrázcích, protože hrany (prudké změny v barevné intenzitě) nesou podle našich zkušeností nejvíce informací.
Optická chyba s hranami je způsobena tím, že se při dělení čtverce přesouvá pouze jeho prosřední bod (střed) a ostatní čtyři body (středy stran čtverce) jsou vypočteny pouze interpolací - to znamená, že pixely na hranách největšího čtverce mají konstantně se měnící intenzitu. Tyto "středohranové" body není možné (alepospoň při klasické rekurzi) přesunout, protože po rozdělení čtverce by došlo ke "zlomům" na hranici dvou čtverců (problém známý pod pojmem cracked edge).
Řešení tohoto problému samozřejmě existuje, ale poněkud komplikuje celý výpočet. Při dělení čtverce je totiž zapotřebí znát i jeho okolí - sousedy - aby bylo možné posouvat i body na středech hran. Z toho důvodu se musí rekurzivní výpočet upravit tak, že se všechny čtverce na jedné úrovni vypočítají současně a teprve poté se všechny v jednom kroku rozděli. Asi nejjednodušší je sdílet celou bitmapu s plasmou a přenášet pouze úroveň zanoření a index čtverce v daném zanoření.
máte naprostou pravdu v tom, že dnes uvedená metoda trpí právě tímto nedostatkem (je však nejjednodušší, proto se také hodí pro demonstraci). Při tvorbě fraktálních krajin tento nedostatek prakticky vůbec nevadí, ale při zobrazení plasmy jako textury již ano - je to způsobeno tím, že lidské oko+muzek jsou vytrénovány na hledání hran v obrázcích, protože hrany (prudké změny v barevné intenzitě) nesou podle našich zkušeností nejvíce informací.
Optická chyba s hranami je způsobena tím, že se při dělení čtverce přesouvá pouze jeho prosřední bod (střed) a ostatní čtyři body (středy stran čtverce) jsou vypočteny pouze interpolací - to znamená, že pixely na hranách největšího čtverce mají konstantně se měnící intenzitu. Tyto "středohranové" body není možné (alepospoň při klasické rekurzi) přesunout, protože po rozdělení čtverce by došlo ke "zlomům" na hranici dvou čtverců (problém známý pod pojmem cracked edge).
Řešení tohoto problému samozřejmě existuje, ale poněkud komplikuje celý výpočet. Při dělení čtverce je totiž zapotřebí znát i jeho okolí - sousedy - aby bylo možné posouvat i body na středech hran. Z toho důvodu se musí rekurzivní výpočet upravit tak, že se všechny čtverce na jedné úrovni vypočítají současně a teprve poté se všechny v jednom kroku rozděli. Asi nejjednodušší je sdílet celou bitmapu s plasmou a přenášet pouze úroveň zanoření a index čtverce v daném zanoření.
krocan (neregistrovaný)
27. 12. 2006 22:30
Nový
Dotaz ohledne vzorcu
celé vlákno
Zajmalo by me, jak je to se vzorcem pro výpočet rozptylu. V teorii je uveden vzorec , ktery jsem nasel i v jinych materialech, σi^2=σ^2/(2^2H(i+1)). V kodu pak ale dale pocitate se vzorcem d=Delta/(pow(2.0, 2.0*Hexp*(i+0))). Zajmalo by me jestli se jedna jen o zjednodusseni, nebo je v tom jiny umysl. Obrazky totiz s implementovanym vzorcem vypadaji lepe nez s tim teoretickym.
tisnik (neregistrovaný)
5. 4. 2007 16:15
Nový
Re: Dotaz ohledne vzorcu
celé vlákno
je to schvalne prave kvuli tomu, aby se amplituda snizovala po jine krivce, nez je "teoreticky spravne"
uživatel si přál zůstat v anonymitě
6. 2. 2008 10:43
Nový
Delta
celé vlákno
Moc dobre nechapu, proc delta musim byt vetsi nez nula a jak se dospelu k tomuto tvaru (x+(rand()%(delta*2)-delta)
if ((x2-x1>2) && (delta>0))
dc=displac(dc, delta);
if ((x2-x1>2) && (delta>0))
dc=displac(dc, delta);

