next up previous contents
Next: Výpočet transformačních matic Up: Vytváření IFS kódu Previous: Afinní transformace

Vytvoření základního objektu a jeho pokrytí

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
\begin{figure}\hspace{5cm} \special{em:graph tr1.pcx}
\vspace{2cm}
\end{figure}


 
Figure: Pokrytí základního objektu s rozšířením dvou transformací
\begin{figure}\hspace{5cm} \special{em:graph tr2.pcx}
\vspace{2cm}
\end{figure}

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 up previous contents
Next: Výpočet transformačních matic Up: Vytváření IFS kódu Previous: Afinní transformace
Tisnovsky Pavel
1999-05-30