Hlavní navigace

Fraktály vytvářené ve čtyřrozměrném prostoru

9. 1. 2007
Doba čtení: 10 minut

Sdílet

V dnešním článku si uvedeme základní informace o tvorbě fraktálů ve čtyřrozměrném (4D) prostoru. Vysvětlíme si zejména význam hyperkomplexních čísel a kvaternionů. Ty hrají v počítačové grafice poměrně význačnou roli při vykreslování fraktálních útvarů a při zápisech lineárních transformací.

Obsah

1. Fraktály vytvářené ve čtyřrozměrném prostoru
2. Od komplexních čísel k číslům hyperkomplexním
3. Kvaterniony a kvaternionová algebra
4. Hyperkomplexní čísla a hyperkomplexní algebra
5. Odkazy na další informační zdroje
6. Obsah dalšího pokračování tohoto seriálu

1. Fraktály vytvářené ve čtyřrozměrném prostoru

Velmi zajímavou skupinou fraktálních útvarů jsou fraktály vytvářené ve čtyřrozměrném prostoru (4D fraktály). V předcházejících částech tohoto seriálu jsme se zabývali především fraktálními objekty kreslenými v rovině (2D fraktály) a také v trojrozměrném prostoru (3D fraktály). Pouze jediný popisovaný fraktál byl jednorozměrný – jednalo se o Cantorovu množinu. Významnou skupinou fraktálů kreslených v ploše jsou mapy dynamických systémů ležících v komplexní rovině, mezi něž patří i známá Mandelbrotova množina, Juliovy množiny, fraktály typu Magnet, Barnsley, Lambda, Phoenix atd. Zdaleka nejpoužívanějším způsobem vizualizace těchto dynamických systémů je barevné zvýraznění počtu iterací, tj. celkového počtu opakování iterační funkce dynamického systému do té doby, než je splněna nějaká předem známá podmínka (například překročení bailout u Mandelbrotovy množiny a množin Juliových).

Naskýtá se otázka, zda není možné podobné dynamické systémy, které při zobrazení v ploše vypadají velmi zajímavě, vytvářet i v trojrozměrném prostoru. Možností vytvoření a následného zobrazení například trojrozměrné Mandelbrotovy množiny či Juliových množin je hned několik – jednotlivé metody se liší svou pracností, časovou náročností a v neposlední řadě také tvarem výsledného objektu. Nejjednodušší a pravděpodobně stále nejpoužívanější metodou tvorby prostorových fraktálů je zobrazení původně plošného fraktálního objektu pomocí výškového pole (heightfield). Čím větší počet iterací je nutné provést v daném místě prostoru, tím vyšší či naopak nižší je poloha vrcholu ve výškovém poli. Základem výškového pole je většinou plocha, ale může se jednat i o jiné těleso, například kouli, která je vhodná například pro modelování povrchů planet.

Tento oblíbený a snadno použitelný způsob zobrazení Mandelbrotovy množiny je demonstrován na prvních třech obrázcích, které byly vytvořeny pomocí raytraceru POVRay a modelovacího programu Vista. Vstupem byl – kromě samotného popisu trojrozměrné scény – obyčejný plošný obrázek výřezu Mandelbrotovy množiny. Na prvním obrázku je Mandelbrotova množina použita pro výškové pole, jehož základem je rovina. Body ležící uvnitř Mandelbrotovy množiny mají přiřazenu nulovou výšku. Druhý obrázek představuje modely několika planet, které vznikly z výškových polí, jejichž základem je koule. Třetí obrázek se podobá obrázku prvnímu, pouze s tím rozdílem, že výškové pole je vytvořeno „inverzním“ způsobem – vnitřní části Mandelbrotovy množiny nepředstavují hory, jako na druhém obrázku, ale naopak dno jezera. Nízký počet iterací v tomto případě značí vysoký terén a naopak.

fractals62_1

Obrázek 1: Trojrozměrná Mandelbrotova množina použitá jako výškové pole

fractals62_2

Obrázek 2: Použití výškových polí, jejichž základním tvarem je koule

fractals62_3

Obrázek 3: Mandelbrotova množina je v této scéně použita pro model pobřeží jezera

Druhý způsob použití původně plošných dynamických komplexních systémů v prostoru je jejich složení do několika vrstev. Ve své podstatě se jedná o jednoduchou reprezentaci 3D těles pomocí elementárních objemových prvků – voxelů. Každá vrstva je představována jedním plošným obrázkem, ve kterém jsou například pixely ležící uvnitř atraktoru dynamického systému považovány za vyplněné voxely a zbývající pixely za voxely prázdné (pixel tedy získá výšku rovnou vzdálenosti mezi jednotlivými vrstvami). Pokud se dynamické systémy ležící v sousedních vrstvách liší pouze o malou startovací hodnotu, je výsledkem složení všech vrstev trojrozměrný model fraktálního útvaru. Tento typ objektů je podporován například i v programu Fractint, viz. fraktály nazvané Julibrot. Na čtvrtém obrázku je podobný trojrozměrný objekt zobrazen. Jedná se o 128 vrstev Juliovy množiny, v každé vrstvě je použita nepatrně odlišná hodnota c=cre+ici. Čím vyšší je světlost pixelu, tím blíže se daný voxel nachází k pozorovateli.

fractals62_4

Obrázek 4: Fraktální objekt typu Julibrot – 128 vrstev složených z Juliových množin

Třetím způsobem přechodu od plošných fraktálů k fraktálům trojrozměrným (popř. čtyřroz­měrným) je náhrada komplexních čísel a komplexních iteračních funkcí čísly a funkcemi hyperkomplexními. Tímto tématem se budeme podrobněji zabývat v následujících kapitolách; příklad fraktálu vytvořeného ve čtyřrozměrném prostoru s provedenou projekcí do trojrozměrného prostoru je ukázán na pátém obrázku. Jedná se o model vytvořený v programu Quat, který je dostupný jak pro Unixy (s GUI i jako program ovládaný z příkazové řádky), tak i pro operační systémy DOS a Microsoft Windows (DOSová verze GUI neobsahuje). Na první pohled vypadá přidaný (tj. čtvrtý) rozměr nadbytečný – ve skutečnosti však díky němu získáváme možnost provádění jednoduché animace celého fraktálu popř. i další parametry ovlivňující jeho tvar.

fractals62_5

Obrázek 5: Původně čtyřrozměrný fraktální objekt po projekci do trojrozměrného prostoru (vykresleno raycastingem)

2. Od komplexních čísel k číslům hyperkomplexním

V komplexní rovině je každá číselná hodnota – neboli komplexní číslo – vyjádřeno pomocí lineární kombinace dvou základních (bázových) čísel, které většinou označujeme symboly 1 a i a nazýváme je jednotkami: 1 je reálná jednotka, i je jednotka imaginární. Tyto dvě číselné hodnoty mají jednotkovou délku a jsou na sebe při zobrazení v rovině (nazývané rovina komplexní) kolmé, přičemž je stanoveno speciální pravidlo pro umocnění jednotky i:

i2=-1

Množinu všech komplexních čísel tedy můžeme zapsat ve tvaru výše zmiňované lineární kombinace:

C={a+bi: i2=-1}

(jednotku 1 není zapotřebí zapisovat, protože vždy platí 1a=a=a1 pro jakékoli a). Hodnotu a nazýváme reálná složka komplexního čísla, hodnotu b složka imaginární. Aditivní operace (součet, rozdíl) se v komplexní rovině provádí stejným způsobem, jako v každém jiném vektorovém prostoru, tj. složku po složce: výsledná reálná složka je vypočtena součtem obou reálných složek, stejný výpočet se provede i pro složku imaginární. Rozdíl nastává při násobení dvou komplexních čísel, protože musíme vědět, jaký výsledek vznikne při násobení dvou jednotek. Pomůže nám jednoduchá tabulka:

Multiplikativní operace Výsledek
1×1 1
1×i i
i×1 i
i×i –1

Všechny algebraické operace s komplexními čísly zachovávají asociativitu i komutativitu. Pro každé komplexní číslo z různé od nuly existuje i inverzní prvek z' takový, že platí vztah zz'=1. Množina komplexních čísel spolu s operacemi + a × tvoří algebraickou strukturu komutativní těleso. Současně můžeme vyjádřit i velikost každého komplexního čísla: |z|=(a2+b2)1/­2, množina komplexních čísel tedy tvoří metrický prostor. Čtyři základní aditivní a multiplikativní operace prováděné nad komplexními čísly je možné zapsat následujícím způsobem (u operace dělení se výpočet musel uspořádat tak, aby pod zlomkovou čarou byla pouze reálná hodnota):

(u+iv) + (x+iy) = (u+x) + i(v+y)
(u+iv) - (x+iy) = (u-x) + i(v-y)
(u+iv) * (x+iy) = (ux - vy) + i(vx + uy)
(u+iv) / (x+iy) = ((ux + vy) + i(vx - uy)) / (x^2 + y^2) 

Pomocí komplexních čísel je možné popsat jakýkoli bod v rovině. Podobným způsobem lze vyjádřit číselnou hodnotu ve čtyřrozměrném (hyperkomplexním) prostoru. Zajímavé přitom je, že zatímco pro komplexní čísla jsou zachovány vlastnosti komutativního tělesa jako je asociativita, komutativita, existence inverzního prvku apod., ve čtyřrozměrném prostoru je vždy alespoň jedna z těchto vlastností porušena (nesplněna). V následujících kapitolách si popíšeme dvě různé cesty z komplexní roviny do 4D prostoru.

fractals62_6

Obrázek 6: Další původně čtyřrozměrný fraktální objekt po projekci do trojrozměrného prostoru (vykresleno raytracingem)

3. Kvaterniony a kvaternionová algebra

Kvaterniony (quaternions) a kvaternionovou algebru vymyslel v roce 1843 známý matematik William Rowan Hamilton, který původně hledal rozšíření komplexních čísel z 2D plochy do 3D prostoru. Takové rozšíření však není možné vytvořit, nejbližší ekvivalent komplexních čísel jsou až čtyřrozměrné struktury. Hamilton provedl revoluční krok v tom, že jím vymyšlené kvaterniony nesplňovaly vlastnost do té doby považovanou za samozřejmost – komutativitu. Později se objevily i další užitečné struktury, které komutativitu nesplňují, například matice. Matematici s oblibou vypráví historku, že Hamiltona základní vztahy kvaternionové algebry napadly, když na procházce se svou manželkou procházel pod mostem Broom Bridge (viz odkazy uvedené v páté kapitole); na onom mostě se dnes nachází kamenná deska s připomínkou této události. Broom Bridge je v současnosti místem častého setkání matematiků.

fractals62_7

Obrázek 7: Most s pamětní deskou objasňující historii vzniku kvaternionů

fractals62_8

Obrázek 8: Detail pamětní desky, dnes již dokonce „ozdobené“ barevnou čmouhou

Kvaterniony jsou obdobou komplexních čísel, ovšem s tím rozdílem, že mají čtyři na sebe kolmé jednotky, které označujeme symboly 1, i, j a k. Jednotka 1 se někdy nazývá skalární složkou, zbylé tři jednotky i, j, k pak složkami vektorovými (to souvisí s využitím kvaternionů při popisu rotací). Každý kvaternion lze popsat lineární kombinací všech čtyř jednotek: q=x+yi+zj+wk. Pro vzájemné násobení těchto jednotek platí následující vztahy:

Multiplikativní operace Výsledek
1×1 1
1×i i
1×j j
1×k k
i×1 i
j×1 j
k×1 k
i×j k
j×i -k
j×k i
k×j -i
k×i j
i×k -j
i×i=j×j=k×k –1
i×j×k –1

Všimněte si, že při násobení není obecně zachována komutativita operací, tj. například výsledek operace jk se nerovná výsledku operace kj. To znamená, že kvaterniony netvoří algebraickou strukturu – komutativní těleso a při násobení dvou kvaternionů si musíme dát pozor na pořadí operací (ostatně podobně jako při násobení matic). Násobení jedničkou (skalární složkou, 1) zachovává hodnotu druhého prvku, podobně jako je tomu u reálných i komplexních čísel. Kvaterniony tvoří největší algebraické nadtěleso množiny reálných čísel (i komplexní čísla jsou nadtělesem reálných čísel).

Pokud máme dva kvaterniony:

q1=x1+y1i+z1j­+w1k
a
q2=x2+y2i+z2j­+w2k

je možné jejich vzájemné vynásobení provést podle následujícího schématu:

q1q2=
    1(x1x2 – y1y2 – z1z2 – w1w2) +
    i(y1x2 + x1y2 + w1z2 – z1w2) +
    j(z1x2 – w1y2 + x1z2 + y1w2) +
    k(w1x2 + z1y2 – y1z2 + x1w2

4. Hyperkomplexní čísla a hyperkomplexní algebra

Hyperkomplexní čísla jsou v mnohém podobné kvaternionům. Není divu, protože je taktéž vynalezl William Rowan Hamilton (avšak žádné známé poutní místo již není s jejich vznikem spojeno, kupodivu…). Opět se jedná o čísla, jež můžeme vyjádřit jako lineární kombinaci čtyř jednotek 1, i, j a k. Pro hyperkomplexní algebru platí, že je sice splněn komutativní zákon, tj. ab=ba, pro všechny prvky však nemusí (ale v některých případech může) existovat inverzní prvek. Základní pravidla pro provádění výpočtů v hyperkomplexní algebře jsou následující:

Multiplikativní operace Výsledek
1×1 1
1×i i
1×j j
1×k k
i×1 i
j×1 j
k×1 k
i×j k
j×i k
j×k -i
k×j -i
k×i -j
i×k -j
i×i=j×j=-k×k –1
i×j×k 1

Vidíme, že operace již nejsou tak symetrické jako v případě kvaternionů (viz například předposlední řádek tabulky), ovšem je zachována komutativita operací. Pokud máme dvě hyperkomplexní hodnoty:

h1=x1+y1i+z1j­+w1k
a
h2=x2+y2i+z2j­+w2k

můžeme vyjádřit jejich vzájemné vynásobení vztahem:

h1h2=
1(x1x2 – y1y2 – z1z2 + w1w2) +
i(y1x2 + x1y2 – w1z2 – z1w2) +
j(z1x2 – w1y2 + x1z2 – y1w2) +
k(w1x2 + z1y2 + y1z2 + x1w2

Ve výše uvedeném vztahu můžeme opět vidět v porovnání s kvaterniony určitou nesymetričnost.

ict ve školství 24

5. Odkazy na další informační zdroje

  1. Étienne Martineau: On a Bicomplex Distance Estimation for the Tetrabrot,
    June 2004
  2. Norton Alan: Julia Sets in the Quaternions,
    Computers and Graphics, 13, 2 (1989), pp. 267–278
  3. Norton Alan: Generation and Display of Geometric Fractals in 3-D,
    SIGGRAPH, 1982, pp. 61–67
  4. Frode Gill's quaternions page:
    http://www.krs­.hia.no/~fgill/qu­atern.html
  5. Výlety matematiků na Broom Bridge:
    http://math.u­cr.edu/home/ba­ez/octonions/no­de24.html
  6. Wikipedia: Quaterniony:
    http://en.wiki­pedia.org/wiki/Qu­aternion
  7. Wikipedia: William Rowan Hamilton:
    http://en.wiki­pedia.org/wiki/Wi­lliam_Rowan_Ha­milton
  8. Wikipedia: Broom Bridge:
    http://en.wiki­pedia.org/wiki/Bro­om_Bridge
  9. Wikipedia: Field Mathematics (o algebraických tělesech):
    http://en.wiki­pedia.org/wiki/Fi­eld_%28mathema­tics%29
  10. Wikipedia CZ: Algebraická tělesa:
    http://cs.wiki­pedia.org/wiki/T%C4%9Ble­so_%28algebra%29

6. Obsah dalšího pokračování tohoto seriálu

V následujícím pokračování tohoto seriálu si ukážeme, jakým způsobem je možné kvaternionovou a hyperkomplexní algebru použít pro vytváření čtyřrozměrných fraktálních objektů, které se posléze již klasickým počítačně-grafickým způsobem, tj. promítáním, přetransformují do trojrozměrných těles, které je možné vykreslovat mnoha různými metodami, například pomocí rastrování s využitím Z-bufferu, raycastingem, raytracingem, integrací podle paprsku apod. Také si řekneme, jakým způsobem je možné smysluplně využít na první pohled „nadbytečný“ čtvrtý rozměr.

ikonka

Zajímá vás toto téma? Chcete se o něm dozvědět víc?

Objednejte si upozornění na nově vydané články do vašeho mailu. Žádný článek vám tak neuteče.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.