Først av alt: Dette blir et drøyt langt innlegg, og jeg vet mange tenker "too long didn't read" når man blir møtt av en vegg av tekst, så jeg kan si med en gang at de 7 første avsnittene dreier seg om å forklare konspetet med Mandelbrot-mengden for de som ikke aner hva det er. Hvis du kun er ute etter programmeringsaspektet, hopp ned til innlegg nummber 2 med undertittelen programmering. Jeg vet jeg overforklarer litt, men samtidig så er dette her litt kompliserte saker og jeg liker å skrive for alle, ikke bare de med programmeringserfaring. Jeg har faktisk prestert å overskride makslengden, så jeg har splittet opp i to innlegg. Men det er litt bilder også!
1 - Om Mandelbrot-mengden
For en stund siden stumblet jeg over en helt sinnsykt stilig video. Det er en av de lengste Mandelbrot-filmene jeg har sett.
Ikke bare er videoen i seg selv ganske fascinerende - i et mørkt rom på fullskjerm føles det som om du mister kontakt med omverdenen etter et pa minutter - men konseptet med Mandelbrot-mengden er skikkelig stilig. Det er ganske enkel, men samtidig ganske avansert matematikk det dreier seg om. Jeg er slett ingen matematiker; er faktisk ganske så dårlig på det, så min kunnskap om dette emnet er i beste fall svært begrenset. Men om du som leser ikke har peiling på hva dette dreier seg om i det hele tatt så kan jeg begynne med en liten forklaring.
Bildet du ser av den sorte figuren med masse farger rundt seg er Mandelbrot-mengden representert visuelt (et bilde av den). Engelskmenn kaller det "The Mandelbrot set", og denne "mengden" er et sett med komplekse tall. Et komplekst tall er et to-dimensjonalt tall, og kan sammenlignes med koordinater. Det er altså et tall som har to verdier. Hvis du ser for deg et vanlig koordinatsystem (X og Y), så kan du sette fingeren på et eller annet punkt (et koordinat). Deretter kjører du koordinatet du har valgt gjennom en formel (Mandelbrot-formelen). Resultatet av denne formelen tar du og kjører gjennom formelen enda en gang. Og igjen. Dette gjentar du helt til tallet du ender opp med enten nærmer seg uendelig stort eller 0. Hvis tallet til slutt blir 0 så farger du det koordinatet du valgte sort. Hvis det nærmer seg uendelig, så farger du det hvitt. Gjenta denne prosessen for alle koordinatene du måtte ha, og du vil ende opp med et bilde som ser nogenlunde slik ut:
http://www.kiwhen.com/resources/nff/mandelbrot1.jpg
Her har jeg tegnet på aksene X og Y og denne svarte Mandelbrot-figuren. Formelen vi bruker er følgende:
Zn+1 = Zn2 + c
Jeg er som sagt ingen matematiker, så jeg kan rett og slett ikke bryte opp og forklare det matematiske aspektet noe særlig mer detaljert; men det er også litt av grunnen til at jeg oppretter dette emnet; Det er garantert noen her som har stålkontroll på komplekse, kvadratiske polynomer *host* Slashdot *kremt* som kan fortelle litt mer om noen er interesserte. Jeg vet at jeg er.
De spenstige fargene du ofte ser i Mandelbrot-bilder har faktisk ikke så mye med selve mengden å gjøre. De er der egentlig mest for å gjøre bildet mer visuelt spennende. Prosessen med å skape fargene kan likevel automatiseres. Den vanligste måten å gjøre det på, er å telle det antallet iterasjoner (eng. "iterations") du bruker før du slår fast at resultatet av et valgt koordinat er 0 eller uendelig. Det vil si at du teller hvor mange ganger du kjører formelen på et tall, og velger en farge ut i fra hvor mange ganger dette er. Å jobbe med konseptet uendelighet på en datamaskin er ikke så enkelt, og det jeg har funnet ut i research er at man i utgangspunktet kan fastslå at et tall vil bli uendelig hvis det på et tidspunkt blir større enn 2:
*) Forfatteren av denne artikkelen bruker utrykket imaginary (tenkt, forkortet til "i", derav 0+0i - origo/nullpunkt i koordinatsystemet) om den delen av tallene vi plasserer på Y-aksen. Dette er noe av konseptet med komplekse tall.
Du er også nødt til å definere et maksantall iterasjoner, hvor datamaskinen bare skal stanse og gå videre. Jeg smurfer nå på en 1.6 GHz dual core intel-prosessor, og med en lokal server begynner maskina slite om jeg overskrider 50 iterasjoner. Det vil si at jeg erklærer resultatet som 0 hvis jeg ikke overskrider verdien 2 etter 50 iterasjoner (kjøringer av formelen). I praksis betyr det at jeg kjører en loop hvor jeg bruker formelen, sjekker om resultatet er over 2 - hvis det ER så kan jeg fastslå at dette koordinatet faller på utsiden av Mandelbrot-mengden. Derfra kan jeg se på hvor mange iterasjoner jeg har kjørt og fargelegge deretter. Bildet blir spesielt stilig hvis Mandelbrot-figuren er svart, og alle felter på utsiden som veldig raskt går mot uendelig er svarte. Felter som bruker flere iterasjoner på å gå mot uendelig gis en sterkere farge, som gjør at vi får en gradient som blir lysere og lysere, med den sorte figuren i midten.
Mandelbrot-mengden ble forøvrig mer eller mindre oppdaget av Benoit Mandelbrot, som også introduserte begrepet fraktaler i matematikken. Et fraktal er en geometrisk figur av noe slag som kan forstørres i det uendelige og avsløre nye, skjulte detaljer jo nærmere man kikker på dem. Mandelbrot-figuren er, som vist av videoen øverst i dette innlegget, nettopp en slik figur.
1 - Om Mandelbrot-mengden
For en stund siden stumblet jeg over en helt sinnsykt stilig video. Det er en av de lengste Mandelbrot-filmene jeg har sett.
Sitat av Linken over
The final magnification is e.214. Want some perspective? [...] e.21 would make a particle look the same size as the milky way and e.42 would be equal to the universe.
Vis hele sitatet...
Bildet du ser av den sorte figuren med masse farger rundt seg er Mandelbrot-mengden representert visuelt (et bilde av den). Engelskmenn kaller det "The Mandelbrot set", og denne "mengden" er et sett med komplekse tall. Et komplekst tall er et to-dimensjonalt tall, og kan sammenlignes med koordinater. Det er altså et tall som har to verdier. Hvis du ser for deg et vanlig koordinatsystem (X og Y), så kan du sette fingeren på et eller annet punkt (et koordinat). Deretter kjører du koordinatet du har valgt gjennom en formel (Mandelbrot-formelen). Resultatet av denne formelen tar du og kjører gjennom formelen enda en gang. Og igjen. Dette gjentar du helt til tallet du ender opp med enten nærmer seg uendelig stort eller 0. Hvis tallet til slutt blir 0 så farger du det koordinatet du valgte sort. Hvis det nærmer seg uendelig, så farger du det hvitt. Gjenta denne prosessen for alle koordinatene du måtte ha, og du vil ende opp med et bilde som ser nogenlunde slik ut:
http://www.kiwhen.com/resources/nff/mandelbrot1.jpg
Her har jeg tegnet på aksene X og Y og denne svarte Mandelbrot-figuren. Formelen vi bruker er følgende:
Zn+1 = Zn2 + c
Jeg er som sagt ingen matematiker, så jeg kan rett og slett ikke bryte opp og forklare det matematiske aspektet noe særlig mer detaljert; men det er også litt av grunnen til at jeg oppretter dette emnet; Det er garantert noen her som har stålkontroll på komplekse, kvadratiske polynomer *host* Slashdot *kremt* som kan fortelle litt mer om noen er interesserte. Jeg vet at jeg er.
De spenstige fargene du ofte ser i Mandelbrot-bilder har faktisk ikke så mye med selve mengden å gjøre. De er der egentlig mest for å gjøre bildet mer visuelt spennende. Prosessen med å skape fargene kan likevel automatiseres. Den vanligste måten å gjøre det på, er å telle det antallet iterasjoner (eng. "iterations") du bruker før du slår fast at resultatet av et valgt koordinat er 0 eller uendelig. Det vil si at du teller hvor mange ganger du kjører formelen på et tall, og velger en farge ut i fra hvor mange ganger dette er. Å jobbe med konseptet uendelighet på en datamaskin er ikke så enkelt, og det jeg har funnet ut i research er at man i utgangspunktet kan fastslå at et tall vil bli uendelig hvis det på et tidspunkt blir større enn 2:
Sitat av Ukjent forfatter
It can be quite easily proven from the mathematical definition that if the absolute value of Z (that is, its distance from 0+0i*) ever gets bigger than 2, it will never return to a place closer than 2, but it will actually rapidly escape to infinity.
This means that it suffices to check whether Z went farther away from origin than 2. If it went, we know that it will inevitably go to infinity. That is, we don't have to check it for infinity, just for 2.
This means that it suffices to check whether Z went farther away from origin than 2. If it went, we know that it will inevitably go to infinity. That is, we don't have to check it for infinity, just for 2.
Vis hele sitatet...
Du er også nødt til å definere et maksantall iterasjoner, hvor datamaskinen bare skal stanse og gå videre. Jeg smurfer nå på en 1.6 GHz dual core intel-prosessor, og med en lokal server begynner maskina slite om jeg overskrider 50 iterasjoner. Det vil si at jeg erklærer resultatet som 0 hvis jeg ikke overskrider verdien 2 etter 50 iterasjoner (kjøringer av formelen). I praksis betyr det at jeg kjører en loop hvor jeg bruker formelen, sjekker om resultatet er over 2 - hvis det ER så kan jeg fastslå at dette koordinatet faller på utsiden av Mandelbrot-mengden. Derfra kan jeg se på hvor mange iterasjoner jeg har kjørt og fargelegge deretter. Bildet blir spesielt stilig hvis Mandelbrot-figuren er svart, og alle felter på utsiden som veldig raskt går mot uendelig er svarte. Felter som bruker flere iterasjoner på å gå mot uendelig gis en sterkere farge, som gjør at vi får en gradient som blir lysere og lysere, med den sorte figuren i midten.
Mandelbrot-mengden ble forøvrig mer eller mindre oppdaget av Benoit Mandelbrot, som også introduserte begrepet fraktaler i matematikken. Et fraktal er en geometrisk figur av noe slag som kan forstørres i det uendelige og avsløre nye, skjulte detaljer jo nærmere man kikker på dem. Mandelbrot-figuren er, som vist av videoen øverst i dette innlegget, nettopp en slik figur.