Hallo,
also ich und ein Kollege sitzen grade an einem Programm, dass die MandelbrotMenge ausgeben soll.
Wir sind zwar schon soweit gekommen, das hoffentlich die Berechnungen stimmen, aber der Helligkeitswert den wir einer setColor übergeben ist immer 1, also schwarz.
Irgendwie stimmen wohl unsere Berechnungen nicht oder wir verstehen die Aufgabenstellung falsch.
Hier mal der Java Code:
Und die Aufgabenstellung:
Ich hoffe jemand kann uns vielleicht ein wenig Hilfestellung geben um dann doch zur Lösung zu gelangen.
Mfg,
Strece
also ich und ein Kollege sitzen grade an einem Programm, dass die MandelbrotMenge ausgeben soll.
Wir sind zwar schon soweit gekommen, das hoffentlich die Berechnungen stimmen, aber der Helligkeitswert den wir einer setColor übergeben ist immer 1, also schwarz.
Irgendwie stimmen wohl unsere Berechnungen nicht oder wir verstehen die Aufgabenstellung falsch.
Hier mal der Java Code:
Java:
import java.awt.Color;
import java.awt.Point;
import java.awt.*;
public class MandelbrotGraphics {
private static Point p;
private static int n;
private int width;
private int height;
private int maxGray;
private double left;
private double right;
private double lower;
private double upper;
public static void mandelbrot
(GraphicsWindow gw,
int width, int height, int maxGray,
double left, double right, double lower, double upper)
{
//Point p = new Point(x, y);
double point_y = 0.0;
double temp1 = 0;
double temp2 = 0;
for (int y = 0; y < height; y++)
{
double point_x = 0.0;
for (int x = 0; x < width; x++)
{
int n = 0;
int n_max = maxGray;
double n2 = 0;
//gw.setText("x" + point_x);
//gw.mouseClick();
while(n < n_max && n2 < 3.0)
{
double tempx = point_x;
double tempy = point_y;
point_x = point_x * point_x - point_y * point_y + x;
point_y = 2 * tempx * tempy + y;
n2 = Math.sqrt(point_x * point_x + point_y * point_y);
n++;
}
gw.setMandelColor(n);
gw.drawPoint(new Point(x,y));
temp1 = temp1 + (right - left)/width;
point_x = temp1;
gw.setText("n" + n);
gw.mouseClick();
//point_x = left + temp2;
}
temp2 = temp2 + (lower - upper)/height;
point_y = temp2;
//point_y = upper + temp;
}
}
public static void main (String[] argv) {
int width = Integer.parseInt("320");
int height = Integer.parseInt("240");
int maxGray = Integer.parseInt("25");
double left = Double.parseDouble("-2.9");
double right = Double.parseDouble("1.1");
double lower = Double.parseDouble("-1.5");
double upper = Double.parseDouble("1.5");
mandelbrot(new GraphicsWindow(width,height),
width, height, maxGray,
left, right, lower, upper);
}
}
Und die Aufgabenstellung:
Mit sehr einfachen mathematischen Formeln kann man
manchmal sehr beeindruckende Graphiken produzieren; diese
sind unter dem Namen Fraktale bekannt. In dieser Aufgabe
werden Sie angeleitet, die Graphik Mandelbrot-Menge,
auch bekannt als \Apfelmannchen", zu erstellen.
Bekanntermaßen ist j(x; y)j =
p
x2 + y2 der Abstand eines Punktes (x; y) 2 R2 zum
Ursprung (0; 0). Der Helligkeitswert n eines Punktes (x; y) mit reellen Zahlen x; y wird durch
folgende Iteration berechnet:
x0 = 0 y0 = 0
xn+1 = x2n² - y2n² + x
yn+1 = 2*xn*yn + y
Ist zu einem Zeitpunkt n der Abstand von (xn; yn) zum Ursprung größer 3, so ist der Helligkeitswert
des Punktes (x; y) gleich n. Ein Punkt ist um so heller, je langer wir die Iteration
durchfuhren mussen, um einen Abstand größer 3 zum Ursprung zu bekommen. Es gibt auch
Punkte, die sich nie wesentlich vom Ursprung entfernen z.B. (x; y) = (0; 0). Fur solche Punkte
konnen wir den Helligkeitswert nicht berechnen, er ware unendlich. Deswegen setzen wir ein
maximalen Wert N fur n fest und iterieren nur solange, wie n < N. Ist nach N Schritten die
Iteration nicht beendet, bekommt Punkt (x; y) den Helligkeitswert 0 (schwarz).
Auf einem Rechner kann man naturlich immer nur einen endlichen Ausschnitt der Ebene
R2 darstellen, und den auch nur mit endlich vielen Pixeln. Zum Beispiel wollen wir den
Auschnitt einschließlich (??2:9; 1:5) (linkere obere Ecke) bis ausschließlich (1:1;??1:5) (rechte
untere Ecke) auf einem Bild der Größe 4 x 3 Pixel darstellen. Wir mussen dann die Helligkeitswerte
folgender Punkte (x; y) berechnen:
Ich hoffe jemand kann uns vielleicht ein wenig Hilfestellung geben um dann doch zur Lösung zu gelangen.
Mfg,
Strece