Matematik
Mandelbrotmängden
Programmering
Att göra ett program som ritar mandelbrotmängden handlar i stort sett om att göra en loop som för varje punkt i koordinatsystemet räknar efter om talföljden konvergerar eller inte i denna punkt. Jag har skrivit koden för java, men det borde inte vara några större problem att översätta till valfritt programmeringsspråk.
Initiering
Vi börjar med att tilldela värden till koordinaterna för fönstrets storlek. Eftersom mandelbrotmängden ryms i ett område som är 3×3 underlättar det om man låter bilden vara 300×300 pixlar.
double xmin = -2.25, xmax = 0.75,
ymin = -1.5, ymax = 1.5,
steg = 0.01;
Kärnan i programmet
Programmet går igenom hela bilden pixel för pixel. Varje pixel utgör ett värde på c i iterationsformeln zn+1 = zn² + c
//ange startpunkten för c. x=Re(c), y=Im(c)
double x = xmin, y = ymin;
for (int i=0; i<300; i++) //gå igenom pixlarna i y-led
{
for (int j=0; j<300; j++) //gå igenom pixlarna i x-led
{
// Ange begynnelsevärde, vi ska starta i origo
double a0 = 0.0, b0 = 0.0;
// a1 och b1 är nästa värde i iterationen
double a1, b1,
int counter = 0; //nollställ räknaren
do //upprepa Zn+1=Zn^2+c
{
a1 = a0*a0 - b0*b0 + x; //först realdelen
b1 = 2*a0*b0 + y; //och sedan imaginärdelen
counter++; //räkna upp räknaren
a0 = a1;
b0 = b1; //byt Zn mot Zn+1
}
//Kontrollera om vi är färdiga
while ( ((a1*a1+b1*b1) <= 4.0)&&(counter <= 100) );
/*
Här kommer kod som ger en viss färg till
pixel[i,j] beroende på värdet på counter
Om counter=100 ska det vara svart
*/
x = x + steg; //gå till nästa punkt i raden
}
y = y + steg; //gå till nästa rad
x = xmin; //gå till början på denna rad
} //nu skulle det vara klart
I "do while"-loopen utförs själva iterationen. Övertyga dig själv om att de beräkningar som utförs verkligen är riktiga!
Om färgsättningen
Att ge en färg till varje pixel beroende på hur många iterationer som behövdes för att avgöra dess öde kan man nog göra på väldigt många sätt. Färgsättningen i sig kan ju också diskuteras. Färgerna är ju baserade på RGB-systemet. Var och en av komponenteran RED, GREEN och BLUE kan tilldelas ett värde från 0 till 255 (FF hexadecimalt). Om alla tre komponenter är noll får man svart och om alla tre är 255 får man vitt. Genom att göra något lämpligt "case"-test på counter kan man stega sig igenom en färgskala som man tycker om.
Om du har frågor eller åsikter om koden får du gärna höra av dej via epost.
Lycka till med programmeringen!