# Newton-Fraktal



## beastofchaos (8. Jun 2012)

_Das hier habe ich ebenfalls in einem Mathe/Informatik-Forum unter matheforum.net -> Newton-Fraktal geschrieben._


Hallo Leute, ich wende mich mit einer heiklen Sache an euch: 
Ich arbeite an einem hübschen Grafikprogramm, das unter anderem das Newton-Fraktal erstellen können soll. 

Dazu gehört natürlich erst einmal die Interpretation einer Eingabe (String) als Funktion. Das an sich soll nicht zu komplex erarbeitet sein, sondern Polynome mit folgenden Regeln erkennen: 

- Es ist ein nicht zwingend natürlicher Faktor vor jedem x möglich ( mit und ohne *) - Also z.B. "-3.5", "7", "101.379", "-3" o.ä. 
- Nach dem x kommt direkt das Hochzeichen und eine natürliche Zahl als Potenz 
  -> Sie soll aber maximal 6 sein, damit ich maximal 6 Nullstellen und damit 6 unterschiedliche Farben brauche. 
- Keine Klammern (Es können nur - + * interpretiert werden) 
- Potenzen können zweimal auftauchen (werden dann einfach addiert) 

Das habe ich schon soweit und das Ableiten ist dann auch keine große Hürde mehr. 

Darauf folgt dann, nachdem ich die Funktion und deren Ableitung habe, die Erstellung des Fraktals. 
Hier stoße ich auf meine erste Frage: 

Wie genau funktioniert das? Das Newtonverfahren ist mir bekannt und ich kann auch schon per while-Schleife von einem beliebigen x-Wert zu einer Nullstelle der Funktion finden. 
Doch welche Werte muss ich hier, abhängig von den Pixelkoordinaten als Startwert einsetzen? 
Im Moment nehme ich einfach die Breite mal die Höhe des Bildes, fange dann beim Pixel[0;0] im Minus-Bereich an und inkrementiere jedesmal, wenn ich zum nächsten Pixel gehe. 
(In der Mitte des Bildes ist mein Startwert logischerweise dann 0) 
Abhängig von der Nullstelle und der benötigten Schritte, um zur Nullstelle zu gelangen erstelle ich eine Farbe. 
-> Jede Nullstelle gibt eine andere Farbe 
-> Umso mehr Schritte nötig, um dunkler wird die Farbe 

Wenn ich mir dann (nach 10 Sekunden Berechnung für das Fraktal von  " x^3- x ") das Bild ausgeben lasse, entsteht ein Farbverlauf von oben nach unten. Oben ist es hell, gegen Mitte wird es dunkler und ab der Mitte nach unten hin wechselt es die Farbe und wird wieder heller. 

Den Quellcode poste ich jetzt lieber nicht, um noch mehr zu verwirren. Wenn das aber jemand will, mach ich das  



Wenn das ganze ein bisschen verwirrend klingt, bitte nicht einfach den Thread wegklicken, denn diese Funktion ist mir sehr wichtig. Also fragt bei mir nochmal nach im Falle von Unverständlichem  

Gruß, Thomas 


PS: Ich habe iwo gelesen, dass die Startwerte teilweise im Bereich der komplexen Zahlen liegen (?)


----------



## beastofchaos (20. Jun 2012)

Wer auch an sowas interessiert ist: Im Anhang findet ihr die jar, mit allen Klassen 

Gruß, Thomas


----------



## noobadix (20. Jun 2012)

Hi, hier fliegt ne Exception, wie im Anhang zu sehen ist...


----------



## beastofchaos (21. Jun 2012)

Ich weiß, habs iwie nicht auf die Reihe bekommen, Eclipse beim erstellen der jar-Datei klar zu machen, in welcher Klasse die main-Methode steckt.
Aber ihr könnt die jar zumindest öffnen und die Klassen einsehen oder selbst das per Eclipse/ NetBeans starten 

Oder magst du mir kurz sagen, was ich falsch gemacht habe bzw. wo ich das angebe.

Gruß, Thomas


----------



## noobadix (21. Jun 2012)

Gibt man das nicht in dem "export"-Dialog im letzten Schritt an?


----------



## beastofchaos (21. Jun 2012)

Ich Blödel hab die normale jar-Datei (nicht runnable) angeklickt 

Jetzt aber!

Gruß, Thomas


----------



## noobadix (21. Jun 2012)

Ach ja, die lieben Mathematiker ^^

Was kann ich denn bei Funktion so alles eingeben?

edit:

Bei "6.0" als Eingabe bei "Funktion" gibt's 'ne Fehlermeldung, siehe Anhang.


----------



## beastofchaos (21. Jun 2012)

Oh ja...

Das Problem ist anscheinend in dem Fall, dass ich Integer.parseInt("6.0") da stehen habe. Problem schon behoben!

Du kannst zu einer beliebigen Funktion (z.B. "f(x) = x^3 - 1") ein Fraktal erstellen.
Ich habe maximal nur x^7 erlaubt, weil ich nur 7 verschiedene eindeutige Farben eingebaut habe.
(FFFFFF, FF0000, FFFF00, FF00FF, usw.).

Funktion wie "f(x) = x^7 - x^6 + x^5 + x - x^2" sehen da meiner Meinung nach am eindruckvollsten aus 

Mit diesem Fraktal wird eigentlich das Newton-Verfahren zur Berechnung von Nullstellen im komplexen Zahlenbereich veranschaulicht, wenn du es ganz genau haben willst 

Gruß, Thomas


----------



## beastofchaos (21. Jun 2012)

Noch eine Frage. Für die Berechnung braucht das Programm natürlich schonmal ein bisschen und ich will dazu 1 Sache einbauen.

Ich will nämlich in einer Panel, das in Borderlayout.SOUTH ist, einen Ladebalken haben, der mir sagt, wann die Berechnung des Newton-Fraktal abgeschlossen ist. Gibt es dafür eine empfehlenswerte Klasse?

Gruß, Thomas


----------



## beastofchaos (21. Jun 2012)

Ich werde dazu lieber mal nen neuen Thread öffnen. Gehört hier eigentlich nicht hin 

Gruß, Thomas


----------



## Melfis (21. Jun 2012)

Die JProgressBar bietet sich für diesen Fall an:
How to Use Progress Bars
Generell solltest du dir ein Überblick über die unterschiedlichen Swingkomponente verschaffen:
A Visual Guide to Swing Components


----------



## beastofchaos (21. Jun 2012)

Okay Dankeschön!

Hier habt ihr jetzt das (hoffentlich) fehlerfreie Ergebnis eines Newton-Fraktal-Generator 

Gruß, Thomas


----------

