Kildekode til Mandelbrot.java
//******************************************************************************
// Mandelbrot.java: Applet
//
//******************************************************************************
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Event;
import java.awt.Color;
import java.lang.Math;
//==============================================================================
// Main Class for applet Mandelbrot
//
//==============================================================================
public class Mandelbrot extends Applet
{
double maxX, maxY, minX, minY;
double dx, dy;
int x, y;
int horisontalOppløsning, vertikalOppløsning;
int mandelbrotMengde[][];
double reell, imaginær, gammel_reell;
double lengde_Z;
int iterering;
int maxIterering = 256;
int maxVerdi;
int n;
boolean ferdig = false;
Color[] farge = new Color[256];
public String getAppletInfo() {
return "Name: Mandelbrot\r\n" +
"Author: Dennis G. Landsem\r\n" +
"Created with Microsoft Visual J++ Version 1.1";
}
public void init() {
//Finner skjermoppløsningen
horisontalOppløsning = bounds().width;
vertikalOppløsning = bounds().height;
//Leser inn plotteområde
String overførtmaxX = getParameter("MAXX");
Double temp = Double.valueOf(overførtmaxX);
maxX = temp.doubleValue();
String overførtmaxY = getParameter("MAXY");
temp = Double.valueOf(overførtmaxY);
maxY = temp.doubleValue();
String overførtminX = getParameter("MINX");
temp = Double.valueOf(overførtminX);
minX = temp.doubleValue();
String overførtminY = getParameter("MINY");
temp = Double.valueOf(overførtminY);
minY = temp.doubleValue();
resize(horisontalOppløsning, vertikalOppløsning);
}
// Mandelbrot Paint Handler
//--------------------------------------------------------------------------
public void paint(Graphics g) {
if (!ferdig) {
//Oppretter en matrise med 256 elementer. Hvert element representerer en vilkårlig farge
int i;
for (i = 0; i < 256; i++) {
farge[i] = new Color((int)(Math.random() * 256), (int)(Math.random() * 256), (int)(Math.random() * 256));
}
mandelbrotMengde = new int[horisontalOppløsning][vertikalOppløsning];
dx = (maxX - minX) / horisontalOppløsning;
dy = (maxY - minY) / vertikalOppløsning;
for (y = 0; y < vertikalOppløsning - 1; y++) {
for (x = 0; x < horisontalOppløsning - 1; x++) {
reell = 0;
imaginær = 0;
iterering = 0;
do {
gammel_reell = reell;
reell = reell * reell - imaginær * imaginær + (minX + (double)x * dx);
imaginær = 2 * gammel_reell * imaginær + (minY + (double)y * dy);
iterering++;
lengde_Z = reell * reell + imaginær * imaginær;
} while ((lengde_Z <= 4.0) && (iterering <= maxIterering));
if (iterering <= maxIterering) {
g.setColor(farge[iterering - 1]);
mandelbrotMengde[x][y] = iterering - 1;
//g.setColor(farge[(int)((iterering/maxIterering) * 10)]);
}
else {
g.setColor(Color.black);
mandelbrotMengde[x][y] = 0;
}
g.drawLine(x, y, x, y);
}
}
ferdig = true;
}
else {
for (y = 0; y < vertikalOppløsning - 1; y++) {
for (x = 0; x < horisontalOppløsning - 1; x++) {
if (mandelbrotMengde[x][y] != 0) {
g.setColor(farge[mandelbrotMengde[x][y]]);
}
else g.setColor(Color.black);
g.drawLine(x, y, x, y);
}
}
}
}
}