Also ich hab hier ein Programm geschrieben, das eigentlich Julia-Mengen ausgeben soll:
import java.awt.*;
import java.awt.event.*;
class JuliaMengen extends Frame {
public JuliaMengen() {
setTitle("JuliaMengen");
}
public static void main (String[] args) {
Frame f= new JuliaMengen();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize (1000, 780);
f.setVisible(true);
}
public void paint (Graphics g) {
int a = 254;
int b = 130;
double z;
double n;
double xa;
double xb;
int i;
while(true)
{
if(a==754) {
a = 254;
b++;
}
if(b==631){
break;
}
a++;
xa = (a-504)/125;
xb = (380-b)/125;
i = 0;
while(i<=10) {
z = xa*xa-xb*xb;
xb = 2*xa*xb;
xa = z;
i++;
}
n = Math.sqrt(xa*xa+xb*xb);
if(n<=2) {
g.setColor (Color.black);
g.drawLine (a,b,a,b);
}
}
}
}
Zunächst werden hier die Pixel umgerechnet in Koordinaten:
xa1 = (a-504)/125;
xb1 = (380-b)/125;
Es handelt sich um ein Koordinatensystem mit reeller x-Achse und komplexer y-Achse. (Darum gehts ja bei den Julia-Mengen)
Nun werden halt die Pixel in Koordinaten umgerechnet und die jeweilige komplexe Zahl (xa+xb*i) iteriert:
while(i<=10) {
z = xa*xa-xb*xb;
xb = 2*xa*xb;
xa = z;
i++;
}
Wie man komplexe Zahlen halt quadriert.
Wenn jetzt die Zahl nach mehreren Quadrierungen immernoch von Koordinatenursprung einen Abstand von weniger als 2 hat:
n = Math.sqrt(xa*xa+xb*xb);
if(n<=2) {
g.setColor (Color.black);
g.drawLine (a,b,a,b);
}
Dann wird der Punkt an die jeweilige Stelle als Pixel gesetzt. Eigentlich müsste in diesem einfachen Fall ein Kreis rauskommen. Aber dieses dumme Programm gibt mir immer so ein komisches zwölfeck aus, das dem roten Kreuz nicht unähnlich ist (nur halt eben schwarz). Ich weiss nicht, was ich falsch gemacht habe, ob es sich hier um einen fatalen Denkfehler meinerseits handelt oder die Angelegenheit aufgrund einer Eigenschaft meiner Methode überhaupt nicht realisierbar ist. Wenn ihr den Fehler gefunden habt, bitte ich euch, ihn mir möglichst verständlich beizubringen. Ich bin nämlich noch Anfänger.
Danke an alle im Voraus
Matthias