Next: Výpočet transformačních matic
Up: Vytváření IFS kódu
Previous: Afinní transformace
Objekty, které budeme chtít zobrazit pomocí metody IFS, budeme
reprezentovat obrysově. Existují i jiné možnosti reprezentace, například
reprezentace plošná, ale u ní je transformační matice rozšířena o změnu
barvy a kontrastu. Obrysová reprezentace má tu výhodu, že je jednoduchá
jak pro zadávání dat uživatelem, tak i pro uložení dat v paměti
počítače.
Práce při návrhu IFS spočívá v tom, že uživatel navrhne základní objekt,
což není nic jiného než uspořádaný seznam vrcholů pospojovaných
úsečkami. Zde se na uživatele nekladou žádné meze, je možné například
vytvořit objekt, který má některé hrany protnuté. Na výsledný IFS nemá
tvar základního objektu žádný vliv.
Další činnost, kterou musí uživatel vykonat, je pokrytí nakresleného
základního objektu. To se děje tak, že uživatel na základní objekt
pokládá objekty vzniklé ze základního objektu lineárními
transformacemi. Uživatel tedy vytvoří kopii základního objektu, tu
podrobí některé transformaci (nebo i více transformacím) a výsledný
objekt potom položí na objekt základní.
Záleží jen na uživateli jak dokonale pokryje základní objekt. Při
dokonalém pokrytí (to znamená, že se transformované objekty budou
dotýkat přesně hranami a nebudou se překrývat) bude výsledná IFS koláž
přesnou kopií základního objektu. Určité nepřesnosti jsou způsobeny
matematickou chybou (vzhledem k iteračnímu procesu se chyby kumulují) a
nedostatečným počtem iterací.
Figure:
Ukázka pokrytí základního objektu
|
Figure:
Pokrytí základního objektu s rozšířením dvou transformací
|
Při neúplném pokrytí vznikají ve výsledné IFS koláži prázdná místa, což
může v některých případech vytvořit zajímavý motiv. Jestliže se naopak
transformované objekty překrývají, má to za následek pomalejší
vykreslování IFS koláže v důsledku toho, že jsou některé části koláže
neustále překreslovány.
Jestliže uživatel vytvoří transformovaný objekt, jehož transformace není
kontrakcí, je na to před vykreslením IFS koláže upozorněn.
Program může vygenerovat i obrázek s takovouto transformací. V tomto
případě ale již nejde o IFS, protože IFS je definován jako systém, ve
kterém jsou funkce mající atraktor. Funkce, která není kontrakcí, nemá
atraktor (ve skutečnosti je atraktorem nekonečno, myšleno ve smyslu dvou
dimenzí). Problémem zde může být, že při generování IFS s nekontrahující
transformací může nastat aritmetická chyba v důsledku přetečení výsledku
transformace. V případě regulárních IFS (když jsou všechny transformace
kontrahující) tento problém samozřejmě nenastává.
Celá práce uživatele při vytváření IFS tedy spočívá v nakreslení
základního objektu a v jeho pokrytí. Tomu odpovídá i datová reprezentace
v programu. První datovou strukturou je seznam vrcholů základního
objektu, druhou datovou strukturou je seznam jednotlivých transformací.
Některé programy na vytváření IFS místo seznamu transformací udržují v
paměti seznam vrcholů všech objektů, tedy objektu základního i objektů
transformovaných. To má výhodu v rychlejším vykreslování vlastních
objektů v editoru. Nevýhodou je nutnost výpočtu transformačních matic
při generování IFS. Diskutabilní je paměťová náročnost. První metoda je
příznivější v případě, že základní objekt má více než šest vrcholů, v
opačném případě je lepší metoda druhá.
Next: Výpočet transformačních matic
Up: Vytváření IFS kódu
Previous: Afinní transformace
Tisnovsky Pavel
1999-05-30