Prírodou inšpirované algoritmy

študijné materiály pre projekt mobilnej triedy umelej inteligencie

Späť ku kurzom triedy
Obsah
Úvod
Mandelbrotova množina
Dynamika iterovania a vzťah MM a JM
Algoritmus tvorby MM aJM
Galéria JM
Galéria MM
Java Applet
Literatúra a linky
Generovanie farieb v appletoch
O tejto kapitole



Ostatné kapitoly
Dimenzia pobrežia
Chaos - úvod
Model kyvadla
Pickoverove biomorfy
Fraktály v prírode
Teória katastrôf
Fractint
Lotka-Volterra model
IFS - systém iterovaných funkcií
Logistická rovnica
Mandelbrotova množina
Newtonova metóda generuje fraktály


Tutoriály
 Celulárne automaty
 Morfogenéza
 Simulátory
 Evolučné algoritmy
 Chaos
 Roboty
 Rôzne


Generovanie farieb v appletoch

Najjednoduchší spôsob vykreslenia Mandelbrotovej množiny (MM) je použitím dvoch farieb. Napr. čiernej a bielej. Čierna farba predstavuje tie body, ktoré ležia v MM, biela tie, ktoré v MM neležia.

čiernobiela Mandelbrotova množina
Čiernobiela Mandelbrotova množina

Už z predchádzajúcich článkov vieme, že body ktoré patria do MM majú absolútnu hodnotu menšiu ako 2. Tiež vieme, že ak v priebehu iteračného procesu absolútna hodnota prekročí 2, postupnosť diverguje a bod už neleží v MM.

Ak bod neleží vnútri MM, je možné ho zafarbiť na základe počtu iterácií, ktoré prebehnú od chvíle, keď absolútna hodnota prekročí 2. To sa dá využiť v tom jednoduchšom prípade na farbenie bodu rôznymi jasovými úrovňami šedej. Na obrázku tak vzniknú izoplochy, tj. súvislé jednofarebné plochy, ktorých farba odpovedá počtu iterácií potrebných pre zistenie, že pixel nepatrí do MM.

Programová realizácia v jave pomocou RGB modelu:

farba = 256 / cykly;
h.setColor(new Color(farba, farba, farba));

MM s rôznymi úrovňami šedej
MM s rôznymi úrovňami šedej
časť v bielom štvorci je zobrazená na obrázku nižšie
izoplochy
izoplochy vo zväčšenej časti MM
čísla udávajú počet iterácií

Ďalší veľmi podobný spôsob sa dá použiť na vyfarbenie farebnej MM. Vyfarbujú sa jednotlivé farebné zložky RGB modelu bodov, ktoré nepatria do MM. Nakoniec sú to však aj tak len jasové úrovne jednotlivých farieb.

Na zeleno vyfarbená MM:

farba = 256 / cykly;
h.setColor(new Color(0, farba, 0));

MM v zelenom prevedení
MM v zelenom prevedení

Oveľa zaujímavejší a aj krajší spôsob, je využitím goniometrický funkcií na generovanie farieb. Používa sa takisto RGB farebný model. Každá zložka modelu je generovaná z počtu iterácií pomocou niektorej goniometrickej funkcie.

Použitie goniometrických funkcií v jave na generovanie farieb:

farbar = 150 + 104 * Math.sin(cyklus/30);
farbag = 150 - 104 * Math.cos(cyklus/10);
farbab = 150 - 104 * Math.sin(cyklus/60);
h.setColor(new Color(farbar, farbag, farbab));

farebná MM
farebná MM
zväčšená časť
zväčšená časť MM

Ďalšou možnosťou je použitie farebného modelu HSV (HSB). Na rozdiel od modelu RGB jeho základné zložky nie sú farby ale:

  • Hue - farebný tón
  • Saturation - sýtosť farby
  • Value(Brightness) - hodnota jasu

Kód v jave:

farba = 256 / cykly;
h.setColor(Color.getHSBColor(farba, farba, farba));

MM v HSB modeli
MM v farebne vykreslená v HSB modeli
zväčšená časť MM
zväčšená časť MM

Hore
Kontakt: Marek Bundzel