Enkla transformationer.
Simple transformations.

Till startsidan Föregående sida Innehåll

Transformationer i 1 dimension.

Ett mycket enkelt sätt att skapa kaotiska system och utifrån dom fraktaler är att använda enkla transformationer som endast bygger på skalning och translation. I 1D kan man skapa en formel som ser ut såhär : x = x · k + p. Multiplikationen ger stroleksförändring (skalning) och additionen positionsförändring (translation) och man kan genom att sätta k och p till vissa värden få skalningen och translationen att arbeta emot varandra. Exempel:

x = 1.0
k = 0.5
p = 0.5
x = x · k + p = 1.0

Vi får tillbaka samma belopp som vi startade med. Väljer vi ett annat värde än 1 på x i utgångsläget (vilket som helst duger även noll) och sedan upprepar beräkningen ett antal gånger så kommer x att konvergera mot värdet 1 men aldrig att nå ända fram, ju fler iterationer ju bättre närmevärde erhålls. Vi kan säga att vi med dom här värdena på konstanterna k och p skapat en attraktor i punkten 1.

Om vi nu väljer att skapa en indexerad variabel av punkten (vektorn) p på formatet p [i] där [i] är indexet (nummret) som anger vilken av dom olika konstanterna som avses så kan vi få x att bete sig lite oväntat. Om vi använder exemplet ovan och i stället skapar två stycken konstanter : p [0] = -0.5 och p [1] = 0.5 så får vi två attraktorer att välja på, en vid -1.0 och en vid +1.0. Om vi nu väljer att transformera x i två iterationer med [i] satt till antingen 0 eller 1 så får vi fyra kombinationer :

x     =  1.0
k     =  0.5
p [0] = -0.5
p [1] =  0.5
1; x = x · k + p [0] =  1.0  :  x = x · k + p [0] =  1.0
2; x = x · k + p [0] =  1.0  :  x = x · k + p [1] =  0.0
3; x = x · k + p [1] =  0.0  :  x = x · k + p [0] =  0.5
4; x = x · k + p [1] =  0.0  :  x = x · k + p [1] = -0.5

Vi når fyra olika resultat beroende på vilken kombination vi valt att använda. Vid fler iterationer så uppstår ytterligare kombinationer och därmed ökar även antalet möjliga resultat. Antalet möjliga resultat är : konstanter^iterationer. Med två olika konstanter och åtta iterationer får vi alltså 2^8 = 256 olika resultat som samtliga ligger mellan dom båda attraktorerna vid -1.0 och 1.0

Om vi nu väljer att iteriera någon av kombinationerna ovan så finner vi att vi har 1 attraktor för varje kombination av attraktorer. Dom kombinationerna där vi har samma index i båda iterationerna (rad 1 och 4) skiljer sig givetvis inte från den enkla varianten utan har samma attraktorer. Rad 1 kommer alltå presis som innan att gå mot 1.0 och rad 4 mot -1.0. Rad 2 däremot får en ny attraktor i -1 / 3 och rad 3 har sin attraktor vid +1 / 3.

Vad som händer egentligen är att vi efter den första transformationen skapar en ny färändrad värld där dom båda attraktorerna ochså transformeras till den nya världen och kommer sålunda utifrån den världens perspektiv fortfarande endast vara två stycken som utifrån den världens skala forfarande ligger vid -1.0 och +1.0. Vi i egenskap av skapare har gudsperspektiv och kan se samtliga världar samtidigt.

Utökar vi nu antalet iterationer i sekvensen så kan vi alltså skapa ytterligare nya attraktorer och om vi sedan transformerar det ursprungliga x med kombinationerna som ges vid n iterationer så kan man skapa en karta över alla attraktorer som finns i samtliga nya världar som skapats. Antalet attraktorer fås som tidigare med : konstanter^iterationer.

I teorin så kan man välja att använda ett oändligt antal iterationer som i sin tur ger lika många kombinationer och sålunda attraktorer. Dessa attraktorer utgör tillsammans en fraktal dimension. Om vi plottar punkterna på en tallinje så kommer vi med dessa värden på k, p [0] och p [1] att skapa en linje med attraktorer i samtliga punkter mellan -1.0 och +1.0. Om vi i stället sätter k = 1 / 3, p [0] = -2 / 3 och p [1] = 2 / 3 och på samma sätt plottar alla attraktorer så har vi skapat fraktalen cantordamm.


Cantordamm.

Det går givetvis inte att upprepa ett oändligt antal kombinationer i ett oändligt antal iterationer men nu finns det ett sätt att ta lite genvägar förbi problemet. Om vi i utgångsläget sätter x till en av attraktorerna, det kan man göra genom att upprepa samma transformation exempelvis: x = x · k + p [0] ett antal gånger. Parametern x kommer då att konvergera mot attraktorn för p [0]. Ca 10-15 gånger räcker för att nå ett tillräckligt bra närmevärde. När x är lika med en attraktor så befinner vi oss i situtionen vi skulle gort om vi iterierat i den kombinationen som ger den första attraktorn. För att sedan beräkna nästa punkt så behöver vi inte göra om hela sekvensen och byta ut endast en av konstanterna vilket krävs för att hela nästa kombination skall utföras enligt ovan.

Eftersom vi redan har gort en kombination så har vi gort alla transformationerna i en annan sekvens utom den sista, resten kommer från den förra sekvensen så behöver vi i det här läget endast utföra ytterligare en transformation för att komplettera nästa sekvens. Vi behöver inte ens veta vilken sekvens vi skall utföra härnäst utan kan lungt singla slant om hurvida vi skall använda p [0] eller p [1]. Slumpen kommer med tiden att skapa alla kombinationer av sekvenser. Vi slipper därför krångla med att försöka skapa en algoritm som utför alla olika sekvenser. Det här var något som först påvisades av matematikern Michael Barnsley.

Transformationer i två dimensioner.

Nästa steg är att utöka antalet dimensioner. Då kommer formeln ovan att anges i komplexa tal på formen z = z · k + p. Dom komplexa talen i sin tur består av två reella tal, parametern z ser då ut så här : z = [x, y] likadant är det med p = [a, b] medans däremot k är ett vanligt reellt tal vilket betyder att skalningen alltid är lika stor för x och y. Själva beräkningen av formeln däremot gör vi med dom reella komponenterna som dom komplexa talen består av :

x = x · k + a
y = y · k + b

Skulle vi nu försöka skapa någonting nytt med endast två olika konstanter: p [0] och p [1] på samma sätt som ovan så skulle vi bli besvikna, det skulle endast resultera i ett likadant system som det tidigare med den enda skillnaden att det lutar beroende på hur vi placerar dom två attraktorerna som ingår i den första iterationen.

Om vi däremot väljer tre olika konstanter i p [i] så har vi skapat ett nytt system med tre huvudattraktorer (Inte huvudattraktioner - det här är ingen cirkus även om det verkar så : -) Om vi som innan sätter k = 0,5 och sedan p [0] = [-0.5, 0.5], p [1] = [0.5, 0,5] och p [2] = [-0.5, -0.5] och sedan markerar alla uppkomna attraktorer så har vi skapat en sierpinskytriangel. Det intressanta här är att nu får vi inte bara en mer eller mindre fragmentarisk linje mellan dom primära attraktorerna utan även likadana linjer mellan dom sekundära, mellan dom trinära o.s.v. Så sker även vid 1D men syns inte då samtliga sekundära o.s.v attraktorer ligger i linjen mellan dom primära. Här finner vi även att helt i sin ordning så hittar vi dom trinära attraktorerna mellan dom sekundära. I den sekundära världen är det som för oss är det trinära endast det sekundära och utifrån det perspektivet så ligger dom mellan dom primära.

Nu faller det sig så, att det går att skapa samma sierpinskytriangel med samma transformationskonstanter som ovan fast med en helt annan metod. Om vi först skapar en kvadratisk yta med utbredningen x = -1 till 1 och likadant för y. Ytan motsvaras av den första rutan i bilden nedan och sedan transformerar hela ytan med samtliga i systemet ingånde transformatorer, med p [0] så kommer ytan att transformeras till block A, p [1] är block B och p [2] block C. Om vi låter bakgrunden synas där den ursprungliga ytan inte täcks av någon av dom sekundära så kommer vi att få tre stycken mindre kopior av ytan inom den ursprungliga. Om vi sedan upprepar detta så kommer vi att få tre kopior av den nya bilden som i sin tur består av 3 · 3 kopior av orginalet.

Fortsätter vi sedan på samma sätt så kommer vi slutligen att återigen få vår sierpinskytriangel. Med den här lilla bilden så räckte det med sex iterationer för att nå pixelstorlek. Ytterligare transformationer skapar givetvis ytterligare attraktorer men dom kommer att hamna inom samma punkt på bilden och därför kommer det visuella resultatet förbli det samma.

På samma sätt har titelbilden på startsidan skapats fast då användes en bild som sattes i det tomma hörnet av ytan. På ett liknande sätt har även bakgrundsbilden på samma sida skapats.

Till startsidan Föregående sida Innehåll

Har du synpunkter på innehållet? Vill du rätta fel? Göra tillägg? Ställa frågor? då kan du kontakta Fractalus.