IFSMaker

IFSMaker je softwarový nástroj generující fraktály typu IFS (bude popsáno dále). Pracuje s vlastním formátem FRC, který lze ukládat, načítat a exportovat do dalších nástrojů.

  • nejnovější verze: 1.0c
  • dostupná verze: 1.0c
  • vývoj softwaru: 2008-2010
  • autoři: Miloslav Čapek, Pavel Hazdra, Pavel Hamouz, Jan Eichler (všichni K13117, katedra elektromagnetického pole)
  • kontakt: miloslav.capek@fel.cvut.cz

 Screenshot IFSMakeru

Požadavky a specifikace

Program vyžaduje spuštěný Matlab, požadovaná je verze Matlab2009a a výše. Program je postaven na objektovém paradigmatu definovaném firmou Mathworks (více zde), obsahuje více než 130 funkcí a 200 nested funkcí. Jedná se o rozsáhlejší kód (>15000 řádek).

Pro nekomerční využití je tento program zdarma. Součastně s tím žadají autoři případné uživatele o zaslání vlastních námětů a zkušeností s prací s IFSMakerem.


Teorie

V této sekci se budeme krátce věnovat teorii, tj. pojmům fraktál, iterované funkční systémy a možnostem výpočtu tzv. fraktální dimenze.

Fraktály

Na otázku co je to fraktál, existují obecně dvě často společně uváděné definice. První tvrzení pochází od B.B.Mandelbrota, druhé je čistě matematickou definicí.

  • Fraktál podle B.B.Mandelbrota: Fraktálem je každý objekt, jehož topologická dimenze se liší od dimenze fraktální (Hausdorffovy).
  • Exaktní definice fraktálu: Fraktál je objekt, jehož geometrická struktura se opakuje v něm samém. Fraktály se dělí na soběpodobné a soběpříbuzné.

V dalším bude tedy nezbytné vymezit pojem topologickéa fraktální dimenze.

IFS systémy

Iterované funkční systémy (Iterated Function System) jsou jedním z typů fraktálů. Jsou generovány pomocí jednoduchých afinních transformací, které jsou iterativně prováděny nad množinou počátečních bodů. Generace je velice názorná a rychlá, proto jsou tyto typy fraktálů využívány v počítačové grafice, ale i v umění a dalších oborech.

Matematicky lze dláždění fraktálu postihnout pomocí tzv. Hutchinsonova operátoru. Definujme tedy soběpodobnou podmnožinu Graph obecně Graph -rozměrného euklidovského prostoru Graph tak, že existuje konečně mnoho kontraktivních, příp. i afinních zobrazení (transformací):

Graph

takových, že dále platí:

Graph

přitom pro libovolná Graph obsahuje průnik

Graph

jen konečný počet prvků (nebo je prázdný). Na potenci Graph je zobrazeními definován operátor

Graph

který se nazývá Hutchinsonův operátor.

Množina definovaná pomocí tohoto operátoru má několik velmi zajímavých vlastností:

  • Soběpodobná množina vzniká opakováním sebe sama při určité transformaci (změna měřítka, rotace, posunutí, zkosení …).
  • Soběpodobné množiny jsou invariantní vůči změně měřítka. Při libovolném zvětšení či zmenšení vypadají stejně (viz obrázky níže).
  • Soběpodobná množina vzniká sama ze sebe, resp. vzniká opakováním motivu.

Z výše uvedeného vidíme, jakým způsobem je IFS generováno (Hutchisonůn operátor) a jaké podmínky musíme splnit (kontrakce, atd.). Základní objekt (zadán body, v podstatě jde o inicializační polygon) je v každé iteraci transformován jedním nebo několika zobrazeními a vznikají tak nové podmnožiny. Tyto podmnožiny jsou rekurzivně využity pro dláždění další iterace. Princip zobrazuje následující obrázek.

 Generování fraktálního IFS objektu
První iterace vznikla díky 8 transformacím původního (čtvercového) objektu. Další iterace vznikají transformováním iterace předešlé. Díky kontrakci jsou velikosti transformovaných objektů vždy nanejvýše stejně velké jako vzor, velikost koláže tedy neroste. Základní objekt může být libovolného tvaru a nebudeme se jím více zabývat. (Afinních) transformací je několik základních typů, krátce se tedy o nich zmiňme.

Afinní transformace

Afinní transformace je definována vztahem: Graph

Tato rovnice může být dále rozepsána: Graph

Jednotlivé koeficienty matice Graph se uplatňují při rotaci, zkosení a změně měřítka, koeficienty matice Graph při posunutí. Souřadnice Graph a Graph náleží iterovanému bodu. Předchozí výraz lze upravit tak, aby celá transformace byla v jedné matici a kombinace transformací šla získat jejich násobením. Program IFSMaker využívá pro popis transformací často citované transkripce: Graph , kde význam jednotlivých parametrů je určen podle následujícího obrázku:

 Výpočet fraktální dimenze pomocí metody box-counting
Z toho je vidět, že mezi afinní transformace počítáme:

  • posun o danou vzdálenost ve směru x/y
  • změna měřítka (horizontálního Mx, vertikálního My nebo Mx a My současně)
  • horizontální nebo vertikální zešikmení (nebo současně)
  • rotace kolem daného úhlu

Pozn.: Pro bližší informace o tomto i následujícím tématu je čtenář odkázán do bakalářské příp. diplomové práce M.Čapka (ke stažení na domovských stránkách).

Fraktální dimenze - výpočet

Jelikož fraktální objekty jsou typicky definovány pomocí neceločíselné dimenze, je vhodné dokázat tuto dimenzi určit. K tomu slouží celá řada technik, nejznámější z nich je potom box-counting. Jak tato metoda pracuje?

Vše je založeno na výpočtu mřížkové dimenze, jejíž výpočet je relativně jednoduše implementovatelný a rychlý. Je založena na měření s měřítkem Graph, které se postupně zmenšuje k nule. Situace je podobná, jakou sledoval Richardson s měřením obvodu Korsiky. Nepravidelnosti menší, než je rozměr měřítka zanedbáváme. Procházíme postupně celou množinu (pobřeží) a počítáme, kolik délek Graph (pásem, metrů, centimetrů) je potřeba pro její úplné pokrytí.

Jak lze dokázat, pro velkou třídu (kam spadají i IFS) množin podává mřížková dimenze stejné výsledky jako Hausdorffova dimenze. Je-li neprázdná ohraničená podmnožina Graph a Graph je nejmenší počet množin s diametrem Graph, které pokrývají množinu , potom definujeme dolní a horní mřížkovou dimenzi množiny následovně:

Graph

Graph

Pokud se Graph, mluvíme o mřížkové dimenzi:

Graph

Kdyby byla množina prázdná nebo neohraničená, hrozí hodnoty Graph příp. Graph ve jmenovateli. Tvar množin i jejich rozměr Graph je volitelný, ale pro naše účely je nejvhodnější pracovat s mřížkou postupně se zjemňujících čtverců se stranou Graph. Takový systém je na obrázku níže.

 Parametry určující afinní transformace i IFSMakeru

Zároveň platí následující vztah mezi Graph a Graph pro Graph:

Graph

Ve velké části případů (IFS nevyjímaje) se Hausdorffova a mřížková dimenze přímo rovná, nicméně je i skupina objektů, kde striktně platí uvedená nerovnost.


Popis IFSMakeru

IFSMaker implementuje popis IFS fraktálů uvedený výše. Pro správné vygenerování požadovaného fraktálu je nezbytné zadat množinu základních bodů, požadované afinní transformace a počet iterací. Přesný popis ovládání je uveden v následující části, dále jsou pak popsány jednotlivé utility IFSMakeru.

Počet bodů zakládního objektu není v zásadě omezen. Body lze dodatečně mazat, přidávat a měnit jejich polohu. Postup je uveden níže. Vybraný inicializační polygon je potřeba vytvořit a označit jako výchozí pro generaci IFS. Do polygonu lze vybrat jen určité, všechny nebo žádné body:

Výběr bodů do nového polygonu
Polygonů může být více, avšak jako inicializační polygon pro IFS může být vybrán vždy jen jeden.

Počet transformací není rovněž omezen, přičemž jen vybrané transformace jsou zahrnuty do výsledné koláže. Je nutné uvážit pouze afinní (=kontraktivní) zobrazení.

Iterace jsou přednastaveny defaultně, lze je však měnit, a to jak celkový počet vygenerovaných iterací, tak i počet zobrazených iterací. Z důvodu názornosti koláže a rychlosti vykreslovaní je počet iterací omezen na 3, tento počet lze však dodatečně změnit v Matlabu editovaním pole FRC.iter.

Pohled na počáteční body a transformace a na vygenerované fraktály různé iterace poskytují následující obrázky.

Základní body a transformace Sierpinského trojúhelníku Sierpinského trojůhelník v 1., 2. a 3. iteraci

Základní body a transformace fraktálu FRC_D FRC_D v 1., 2. a 3. iteraci

Základní body a transformace Minkowského fr. Minkowského fr. v 1., 2. a 3. iteraci

Všechny zobrazené příklady jsou součástí IFSMakeru v adrešáři !source.

Ovládání IFSMakeru

Uživatelským komfortem jsme se snažili přiblížit komerčním programům - grafické prvky lze vybírat rámečkem myši (windows), společně s klávesou SHIFT přidávat, s CTRL ubírat. Rozměry plátna i gridu lze přednastavit do slotů. Ty vyvoláme ikonou (viz video tutoriál na konci této stránky) příp. klávesami 1-4. K dispozici je grid podobný jako v programu CorelDraw. Ten lze využít na konstrukci bodů, pomoc. čar (není dokončeno), pro měření vzdáleností apod. (v další verzi).

Přiblížení lze realizovat kolečkem myši nebo klávesami +/- (lze navíc nastavit velikost přírustku; defaultně nastavena o jedno políčko gridu). Posun po canvasu provádíme šipkami (krok nastavitelný). Pozice kursoru se vypisuje v pravém horním rohu. Pod tím se zobrazuje aktivovaný snap režim, včetně souvisejících informací (k čemu je kursor přichycen). V pravém dolním rohu je drobná konzole, určená pro komunikaci směrem k uživateli (dokončené úkoly, chyby apod.).

Snap režimy, známé např. z AutoCadu, významně usnadňují práci s grafikou. Na výběr je trojice režimů: Snap free, Snap to Grid a Snap to Points. Vzdálenosti přichycení lze nastavit. Zobrazení všech těchto informací na plátně jsou volitelné.

Utility IFSMakeru

Nastavení plátna

Rozměry plátna a velikost mřížky lze nastavit jak ručně, tak předvolit jednotlivé hodnoty v nejvýše třech slotech, které jsou trvale uloženy v paměti IFSMakeru. Práce s kreslícím plátnem je zobrazena i v tutoriálu níže. Klikem na žlutou ikonku Opt., příp. stiskem klávesy „4“ je otevřen správce slotů. V těchto slotech lze nastavit požadované rozměry (šipky « a » umožňují zkopírování zadaných hodnot do sousedního slotu. Požadované rozměry plátna jsou potom vyvolány klikem na žluté ikonky '1' / '2' / '3'. Sloty lze aktivovat i pomocí kláves „1“ / „2“ / „3“.

Nastavení mezních rozměrů plátna a gridu

Modifikace

Tato utilita umožňuje provést všechny standartní modifikace (změna atributu objektů, posun, změna měřítka, rotace) nad vybranou množinou bodů. Nejprve je nutné pomocí myši vybrat body. To lze učinit i pomocí operace Selection - můžeme vybrat všechny nebo pouze některé body. Tyto body lze odznačit, smazat nebo zneviditelnit. Seznam všech vybraných bodů lze zobrazit kliknutím na List.

Selection list

Máme-li vybrány body, nastavíme požadovanou operaci v okně Modification/Options (Modification setting)

Okno modifikací
dále můžeme zvolit, zda se upraví současné body nebo jejich nově vzniklé kopie. Lze volitelně nastavit krok modifikace, a tím např. sledovat změnu koláže při posuvu o jistou vzdálenost v 10 krocích. Nyní můžeme modifikaci uložit nebo zvolit Apply, což je ekvivalent náhledu.

Úprava transformací

V některých případech je nutné prozkoumat případy, kdy se u jedné nebo více transformací mění jeden z koeficientů, příp. chceme fraktál upravit do požadovaného tvaru. Pro tyto účely slouží jemné interaktivní dolazování transformací. Nejprve vybereme požadované transformace zaškrtnutím pole Tune v tabulce transformací. Dále zvolíme koeficient transformace/í, ktery bude lazen a klikneme na sousední tlačítko Tune. Otevře se rozhraní, umožňující po nastavitelných krocích měnit vybrané koeficienty transformací.

Úprava transformací


FRC formát

FRC formát plně popisuje daný IFS fraktál. S ohledem na počet polí FRC byl navržen multidimenzionární optimalizér PSOptimizer i modální řešiče EvalInFem a TCMapp. Každý fraktál se skládá z následujících polí:

Název pole Typ/hodnota Popis
FRC.base matice (n,2) matice bodů základního útvaru (n ~ počet bodů)
FRC.tran matice (m,6) matice afinních transformací (m ~ počet transformací)
FRC.iter matice (1,3) počet iterací ve formátu [it1 it2 it3]
FRC.type 'pntstrns' defaultní string řetězec, označuje typ proměnné

Proměnnou lze tedy vytvořit příp. editovat i mimo IFSMaker.

Propojení s dalšími nástroji

Výstupem generátoru IFSMaker je proměnná FRC, kterou lze využít např. jako anténní motiv. Takový motiv lze řešit jedním ze solverů, příp. dále optimalizovat. Vstup všech výše uvedených programů je zcela univerzální a přizpůsoben i specifikům fraktální geometrie (FRC formát neobsahuje výsledné polygony, ale jenom informace o typu a složení koláže - před každým řešením musí být podle zadaných údajů koláž znovu vygenerována. Výhodou je, že lze optimalizovat přímo fraktální koeficienty.).

Dále viz:

Schéma propojení jednotlivých programů:  Schéma propojení programů

Tutoriál

Zde je k dispozici video tutoriál popisující základní práci s IFSMakerem.

Video tutoriál práce s IFSMakerem (8.2MB)

Další vývoj

Práce na této aplikaci byly dočasně zastaveny, neboť současný stav postačuje pro generaci vhodných anténních kandidátů. Výhledově však počítáme s těmito úpravami:

  1. možnost uložit celkový stav IFSMakeru vč. nastavení
  2. možnost práce s polygony, nikoliv nutně s IFS fraktály - umožní generovat složité struktury složené pouze z polygonů
  3. přímé propojení s Comsolem a dutinovým modelem - rychlé orientační zjištění rezonanční frekvence útvaru, jeho celistvosti a spektra módů
  4. utilita zahrnující výpočet fraktální dimenze pomocí metody box-counting
  5. další podpůrné funkce (pomocné čáry a kolmice, měření vzdálenosti a úhlů)

V souvislosti s touto problematikou nabízíme rovněž celou řadu témat na semestrální projekty, příp. bakalářské a diplomové práce.


Miloslav Čapek 2010/11/27 14:19