If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

Kétdimenziós zaj

Az egydimenziós zajértékek alapján könnyebben megérthető a kétdimenziós zajtér. Kicsit gondoljuk ezt át! Az egydimenziós zaj egy olyan zajérték-sorozatot ad, ahol minden egyes pont hasonlít a szomszédaira. Mivel az érték egydimenziós, csak két szomszédja van: egy előtte (az ábrán a balra levő), és egy utána (a jobbra levő).
Kép a Nature of Code-ból
I.10 ábra: 1D zaj
A kétdimenziós zaj ugyanezen az elven alapul. A különbség az, hogy nem lineáris értékeket vizsgálunk, hanem rácshálón levő értékek sorozatát. Gondolj egy milliméterpapírra, ahol minden rubrikában számok vannak. Bármely adott érték hasonló lesz minden szomszédjához: fenn, lenn, jobbra, balra és minden átló mentén.
Kép a Nature of Code-ból
I.11 ábra:
Ha ezt a milliméterpapírt úgy jeleníted meg, hogy minden pontjához egy fényerősséget rendelsz, akkor egy felhőszerű képet fogsz kapni. A fehér mellett világosszürke van, ami mellett szürke látható, amellett pedig sötétszürke, utána fekete, majd sötétszürke jön, és így tovább.
Kép a Nature of Code-ból
Eredetileg pont ezért találták ki a zajt. Kicsit változtatod a paramétereket, vagy játszol a színekkel, hogy az eredmény jobban hasonlítson márványhoz, fához vagy valamilyen másik természetes anyaghoz.
Nézzük meg, hogyan alkalmazhatjuk a kétdimenziós zajt a ProcessingJS-ben! Ha véletlenszerűen akarod beszínezni egy ablak pixeleit, akkor egymásba ágyazott ciklusok kellenek, ami minden pixelhez véletlen fényerősséget rendel. (A programban található megjegyzések: 1. sor: Dan Shiffman, natureofcode.com példája alapján; 5. sor: Véletlenszerű fényerősség!)
A noise() függvénnyel színezett pixelekhez ugyanazt fogjuk csinálni, de a random() helyett a noise() függvényt fogjuk meghívni.
var bright = map(noise(x,y), 0, 1, 0, 255);
Ez elvileg jó kezdet — a kétdimenziós tér minden (x,y) pontjához hozzárendel egy zajértéket. A probléma ezzel az, hogy nem kapjuk meg a kívánt felhős jelleget. A 200-as pixelről a 201-es pixelre való ugrás túl nagy a zaj függvénnyel. Ne feledd, amikor az egydimenziós zajjal dolgoztunk, 0,01-el növeltük az időváltozót, nem 1-el! Erre a problémára jó megoldás, ha a zaj paraméterezéséhez más-más értékeket választunk. Például növelhetünk egy xoff nevű változót a vízszintes elmozduláshoz, és egy yoff változót a függőleges mozgáshoz az egymásba ágyazott ciklusokban.
Ebben a tananyagban a Perlin zaj több hagyományos alkalmazását elemeztük. Egydimenziós zajjal kapott simított értékeket rendeltünk egy tárgy helyzetéhez azért, hogy a bolyongás látszatát keltsük. Kétdimenziós zajjal kapott simított értékeket használtunk felhős minta készítéséhez a pixeltérben. De ne veszítsük szem elől, hogy a Perlin zajértékek önmagukban nem mások: pusztán értékek. Nincsenek pixelekhez, vagy színekhez kötve. A tananyag bármelyik példájában szereplő változóhoz rendelhetünk Perlin zajértéket. Ugyanez vonatkozik fraktálfa ágai által bezárt szögekre is, vagy áramlási mező szimulációjában mozgó tárgyak irányára és sebességére, amit az alábbi programban mutatunk be.
Az utolsó lecke elején arról beszéltünk, hogy milyen jó segítség lehet a véletlenszerűség. Sok esetben ez a legkézenfekvőbb megoldás az olyan, gyakran felmerülő problémákra, mint például egy adott tárgy mozgása vagy színe. Ez a kézenfekvő megoldás gyakran lusta megoldást jelent.
A tananyag végén azt is érdemes megjegyezni, könnyű abba a hibába esni, hogy Perlin zajt használunk mankónak. Hogyan mozogjon a tárgy? Milyen színű legyen? Perlin zaj! Milyen gyorsan nőjön? Perlin zaj!
A célunk nem az, hogy megmondjuk, használj-e véletlenszerűséget, vagy sem. Vagy hogy használd-e a Perlin zajt, vagy sem. A lényeg az, hogy a te rendszered szabályait te határozod meg, és minél több eszközt ismersz, annál több esélyed van arra, hogy meg tudod valósítani a szabályaidat. Ezeknek a tananyagoknak az a célja, hogy az eszközöket a kezedbe adja. Ha csak egyféle véletlenszerűséget ismersz, akkor minden modelled ugyanazt a sémát fogja követni. A Perlin zaj a programjaidban a véletlen másfajta megvalósítását teszi lehetővé. Ha már gyakoroltad egy kicsit a Perlin zajt, akkor áttérünk egy másik eszköz használatára, a vektorokra.

Ez a „Természetes szimulációk" tananyag a Daniel Shiffman által készített „The Nature of Code” alapján készült, a Creative Commons Attribution-NonCommercial 3.0 Unported License szerint.

Szeretnél részt venni a beszélgetésben?

Még nincs hozzászólás.
Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.