torstai 12. tammikuuta 2017

Maisemia fraktaaleista

Tietokoneella piirretty luminen vuoristomaisema.

(Terragen-ohjelmalla luotu vuoristo. Levyznin/Wikimedia Commons/PD.)

Viime kerralla löysimme fraktaaleita luonnosta. Tällä kertaa teemmekin saman toisin päin: löydämme luontoa fraktaaleista!

Luonnon on helppoa muodostaa fraktaaleita, joissa sama kuvio toistuu suurennostason kasvaessa. Kuvitellaan kasvi, joka kasvaessaan aika ajoin haarautuu kahteen osaan. Nämä haarat kasvavat ja haarautuvat yhä pienemmiksi haaroiksi. Tuloksena on jotain, miltä matemaattisen mielen omaava puu saattaisi näyttää:

Erittäin symmetrinen haarautuva kuvio.

Luonnossa ei tietenkään esiinny mitään näin eksaktia, koska lukemattomat tekijät vaikuttavat kasvin kasvuun. Muokataankin menetelmää niin, että jakovälit ja haarojen välinen kulma ovat lievästi satunnaisia:

Kolme huomattavasti luonnollisempaa kuviota.

Edelleen keinotekoisen näköisiä, mutta jo reippaasti luonnollisempia! Luomamme puu on äärellinen fraktaali. Parantelemalla menetelmää edelleen saataisiin vielä luonnollisempia kasveja — tietokoneanimaatioissa ja -peleissä erilaisia puita luodaan juurikin tällä tavoin. Entäpä maisema ympärille? Totta kai!

Muokataan menetelmää niin, että kasvin haarojen sijaan luodaankin korkeuskäyrä. Kuvitellaan kolmio, jonka leveä sivu on maassa ja huippu jollakin korkeudella. Sitten luodaan uudet kärjet huipun vasemmalle ja oikealle puolelle, ja siirretään niitä sopivalle korkeudelle. Tätä toistetaan, kunnes ollaan saatu haluttu muoto. Kuten kasvissa, jaot ovat aina edellistä pienempiä.

Tätä menetelmää en demonstroi pelkällä kuvalla, vaan tein sitä varten pienen ohjelman. Demo piirtää sekä kumpupilviä, joiden huippu on keskellä, että vuoria, joiden huippu on satunnaisessa paikassa. Kokeile muuttaa jakojen asetuksia säätimillä: pienellä arvolla vain alkuperäinen kolmio näkyy. Suuremmilla arvoilla jaot vaikuttavat muotoon enemmän, kunnes maksimissa jokaisella pisteellä on yhtä paljon liikkumatilaa.

Selaimesi ei näytä tukevan <canvas>-elementtiä, joka vaaditaan tähän demoon.

Vuoret:
Pilvet:

Tietenkin käytännössä luodaan kolmiulotteisia kasveja ja maisemia, mutta perusperiaate on sama. Tällainen jakoalgoritmi on yksinkertaisuutensa vuoksi hieman kehnon näköinen, minkä takia yleensä käytetään esimerkiksi Perlin-kohinan kaltaisia, visuaalisesti miellyttävämpiä menetelmiä. Samantyylisillä fraktaaleilla voidaan luoda myös luonnollisemman näköisiä pintoja tai näyttäviä erikoistehosteita. Kiinnostavaa on, kuinka muutamaa parametria muokkaamalla saadaan täysin erilaisia sovelluksia!

Näihin olet törmännytkin, mikäli olet viime vuosikymmeninä katsonut elokuvia tai televisiota.


Kasvi- ja maisemademojen lähdekoodi on saatavilla GitHub-palvelussa vapaalla MIT-lisenssillä.

Ei kommentteja:

Lähetä kommentti

Kommentit ovat moderoituja — yritän hyväksyä kommenttisi mahdollisimman pian. Voit kirjoittaa kommenttiin LaTeX-koodia tai yksinkertaista HTML-merkintää: lue lisää Kommentointi-sivulta.