Du bist nicht angemeldet.

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

1

23.09.2012, 19:21

Krüppelbrotmenge

Hey Leute,

ich hab heute versucht, eine Mandelbrotmenge in Java zu implementieren... Die Grundform ist ok, aber irgendwie sieht das Ding ziemlich komisch aus, der linke Teil sollte ja eigentlich mehr eine Kugel sein, statt dessen ist da keine Ahnung was und dazwischen so eine komische Ecke... Weiß jemand von euch, was man dagegen machen kann, woher das kommt oder ob ich vielleicht den Algorythmus falsch implementiert habe?

So siehst atm aus (500x500 @ 500 Iterationen)


Der Code:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Konstruktor
		fieldWidth  = world.getSizeX();
		fieldHeight = world.getSizeY();
		center      = new Point((fieldWidth - (fieldWidth % 2 == 0 ? 2 : 1)) / 2,
		                        (fieldHeight - (fieldHeight % 2 == 0 ? 2 : 1)) / 2);
		radius      = fieldWidth <= fieldHeight ? center.x : center.y;
		field       = new boolean[fieldWidth][fieldHeight];
		
		//Mandelbrotmenge berechnen
		double startX;
		double startY;
		double currentX;
	        double currentY;
		for(int y = 0; y < fieldHeight; y++) {
		    for(int x = 0; x < fieldWidth; x++) {
		        startX = (x - radius) * 2 / radius;
		        startY = (y - radius) * 2 / radius * (-1);
		        currentX = startX;
                currentY = startY;
		        for(int i = 0; i < ITERATIONS; i++) {
		            if(getDistanceToCenter(currentX, currentY) > 2) {
		                break;
		            }
		            currentX = currentX * currentX - currentY * currentY + startX;
		            currentY = 2 * currentX * currentY + startY;
		        }
		        if(getDistanceToCenter(currentX, currentY) <= 2) {
                    field[x][y] = true;
                } else {
                    field[x][y] = false;
                }
		    }
		}

Java-Quelltext

1
2
3
private static double getDistanceToCenter(double x, double y) {
	    return  Math.sqrt(x*x+y*y);
}
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Quadsoft

Schüler

Beiträge: 104

Registrierungsdatum: 19.08.2011

Danksagungen: 77

  • Private Nachricht senden

2

23.09.2012, 20:23

Hi

Guck dir die Gleichungen für den Real- und Imaginärteil an:






Und dann gucke auf deinen Code:

Quellcode

1
2
currentX = currentX * currentX - currentY * currentY + startX;
currentY = 2 * currentX * currentY + startY;


Finde den Fehler!

Lösung:

Spoiler Spoiler


Du rechnest jeweils bereits mit dem Ergebnis x_n+1 und y_n+1 anstatt noch mit dem alten x und y zu rechnen. Das lässt sich einfach über eine Temp-Variable lösen:

Quellcode

1
2
3
4
double tmpx = currentX;
double tmpy = currentY;
currentX = tmpx * tmpx - tmpy * tmpy + startX;
currentY = 2 * tmpx * tmpy + startY;


Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Erik (23.09.2012)

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

3

23.09.2012, 20:58

hää O.o
imo müsste das in java so gehen, ich meine, wie kann ich denn mit dem neuen wert rechnen, ich hab den ja noch garnet brechnet O.o
das ist doch im prinzip wie bei foo = foo + 1 <=> foo++ oder net?

naja ich probiers mal aus... danke für die antwort jedenfalls :)

EDIT: ASOOO :D jetzt versteh ichs... in der zweiten zeile benutze ich den berechneten wert und net den von davor... hätte ich auch selbst drauf kommen können xD
funkt jetzt übrigens, bild "rendert" gerade.
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Erik« (23.09.2012, 21:03)


Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

4

23.09.2012, 21:28

so, hier isses :D



btw, was genau beeinflusst die anzahl der iterationen eigentlich?
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Drakor

Fortgeschrittener

Beiträge: 204

Registrierungsdatum: 30.06.2011

Danksagungen: 105

  • Private Nachricht senden

5

23.09.2012, 21:29

Die Anzahl der Iterationen beeinflusst wie "scharf" bzw. genau das Bild ist... und wie weit du reinzoomen kannst, ohne dass die Strukturen merklich vage werden.

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Erik (23.09.2012)

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

6

23.09.2012, 21:36

ok, also bringt das auch nur was bei ner höheren auflösung...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Quadsoft

Schüler

Beiträge: 104

Registrierungsdatum: 19.08.2011

Danksagungen: 77

  • Private Nachricht senden

7

23.09.2012, 21:39

ne auch wennde hineinzoomen willst.

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

8

23.09.2012, 21:49

brauch ich dafür net auch ne höhere auflösung? xD
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

cedi

Profi

Beiträge: 702

Danksagungen: 78

  • Private Nachricht senden

9

24.09.2012, 12:37

Also mir gefällt deine Krüppelbrotmenge Erik :D
Ich find die echt interessant.

Zu dem mit dem zoomen:
Wenn du weiter in das Bild zoomst, dann entdeckst du immer neue Muster in deinem Fraktal. Du wirst auch die Mandelbrotmenge an sich immer wieder finden.
Das hat nicht direkt was mit der auflósung deines Monitors zu tun.
Oder versteh ich gerade was falsch?!

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

10

24.09.2012, 13:37

nee mit dem monitor net :D ich meinte auch eher das bild ;D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Quadsoft

Schüler

Beiträge: 104

Registrierungsdatum: 19.08.2011

Danksagungen: 77

  • Private Nachricht senden

11

24.09.2012, 15:06

1337 71µ3 :D