Wie kann ich in Java eine Kurve aus Punkten zeichnen?

Willibergi

Mitglied
Moin,
ich programmiere grade einen Funktionsplotter und möchte damit Kurven zeichnen.
Bis jetzt mach' ich das so, dass ich die Punkte des Graphen berechne und ganz kurze Linien zeichne.
Funktioniert so ganz gut und ergibt auch eine schöne Kurve.
Aber ich kann mir vorstellen, dass das extrem ineffizient ist, so viele Linien zu zeichnen.
Gibt es nicht irgendeine Möglichkeit ab Werk, eine Kurve zu zeichnen, wenn ich die Punkte habe?
 

looparda

Top Contributor
Hi,
ich Matlab kenne ich die Funktion polyfit, die aus Punkten im R2 eine Funktion zu bestimmen vermag. Das Verfahren heißt Curve-Fitting.
Vielleicht hilft dir das weiter um ein Pendant in Java zu finden.
 

JStein52

Top Contributor
Du solltest vielleicht nach dem Begriff Interpolation googeln. Denn du hast irgendwelche diskreten Punkte auf einer Kurve und möchtest zwischen diesen Stützpunkten interpolieren. Du kannst nun linear interpolieren (ergibt deine Linien), du kannst mit Polynomen n.ten Grades interpolieren, du kannst Spline-Interpolation verwenden und wahrscheinlich noch ein paar andere nette Sachen das ist ein weites Gebiet der numerischen Mathematik und du findest sicher viel Stoff dazu im Netz.
 

Willibergi

Mitglied
Danke, das hat mich auf jeden Fall schon mal um einiges weitergebracht.
Ich habe mir eine Funktion geschrieben, die mir die Funktionswerte in einem bestimmten Intervall im Abstand n berechnet.
Wenn ich mir die Punkte im Abstand 0.5 berechnen lasse und dazwischen linear interpoliere, sieht das (bei der Funktion e^x) so aus:
fp2.PNG
Das ist natürlich vor allem beim steilen Anstieg noch etwas gehackt.
Wenn ich linear interpolieren wollte, müsste ich den Abstand sehr klein setzen, bei einem Abstand von 0.001 sieht das dann so aus:
fp3.PNG
Das ist annehmbar, allerdings braucht das Programm am Anfang zum Berechnen und Zeichnen einige Sekunden. Das möchte ich verhindern.
Also kommt für mich nur Spline-Interpolation infrage, weil ich dann zwischen zwei Punkten mit bspw. einem Abstand von 1 interpolieren kann.
Der Wikipedia-Artikel verwirrt mich ehrlich gesagt ziemlich.
Soweit ich das verstehe, kann ich durch Interpolation die Punkte zwischen zwei anderen Punkten berechnen, oder? Aber was mache ich dann damit? Wie zeichne ich dann die interpolierte Kurve?
 

JStein52

Top Contributor
Also wenn du schon eine analytische Funktion wie y=e^x hast brauchst du ja nichts zu interpolieren. Du kannst dir ja mit der Funktion jeden beliebeigen Punkt berechnen. Interpolation benötigst du ja nur dann wenn du nur eine bestimmte Anzahl von Werten auf der Kurve hast und du möchtest nun Punkte zwischen zweien solcher Stützwerten berechnen. Falls du Interpolation in der Praxis erleben möchtest schau dir mal das an: http://www.ee.ucl.ac.uk/~mflanaga/java/Interpolation.html
 

Willibergi

Mitglied
Naja, mein Problem ist ja eher, dass ich nicht unendlich viele Punkte berechnen kann.
Ich will aber trotzdem, dass mein Plotter die Funktion schön glatt darstellt.
Wenn ich die Funktionswerte im Abstand von 0,1 berechne und dazwischen eine Linie ziehe, also quasi linear interpoliere, lädt mein Programm am Anfang einige Sekunden.
Das will ich aber verhindern.
Darum hätte ich zwischen zwei Funktionswerten im Abstand von 1 interpoliert.
Oder sollte ich das anders machen?
 

Thallius

Top Contributor
Wieviel DPI hat dein Ausgabegerät denn? 1000000? Ich frage mich eh was du da machst, dass er ein paar Sekunden braucht um eine einfache exponentialfunktion auszurechnen. Da sollte er einige Millionen werte pro Sekunde rechnen können...
 

Thallius

Top Contributor
Wenn du 72 DPI hast und deinen Graf z.B. Auf ein DIN A4 Blatt im Querformat drucken willst, dann Must du 30/2.54*72 werte berechnen. Das ist weiß Gott nicht viel...

Ich gehe aber mal eher davon aus, dass dein Plotter 300 oder gar 600-1200 DPI hat. Wahrscheinlich weist du aber gar nicht was DPI überhaupt bedeutet oder?
 

Thallius

Top Contributor
Beim Bildschirm sind die DPI doch uninteressant. Du weist doch wieviele Pixel das Fenster hat. Wenn du dann für jedes Pixel 2 werte rechnest sollte die Kurve ok ausseheen
 

Willibergi

Mitglied
Ok, das wäre ein Abstand von 0,01 und die Kurve sieht schön rund aus.
Noch eine Frage, ich will jetzt keinen neuen Thread dafür aufmachen:
Wie krieg ich das denn hin, dass, wenn ich das Fenster maximiere, sich das Koordinatensystem auf das ganze Fenster wieder ausbreitet, also repaintet, wenn ich auf Vollbild schalte oder die Größe des Fensters verändere?
 

Willibergi

Mitglied
Ich benutze das AbsoluteLayout, aber ich berechne die Position von den Koordinatenachsen abhängig von der Breite und der Höhe des Fensters und alles andere auch, insofern müsste das doch auch so möglich sein, dass einfach neu gezeichnet wird, nur halt mit der neuen Breite und Höhe, oder?
 

Willibergi

Mitglied
Warum?
Ich würde das gerne so lassen, weil es am einfachsten ist und so auch funktioniert.
Das einzige Problem, das ich noch habe, ist eben, dass das Koordinatensystem sich nicht mit vergrößert.
Da wird es doch irgendein Workaround geben, oder?
Ich will ja nur repainten, wenn die Fenstergröße geändert wird oder das Fenster maximiert wird.
 

Thallius

Top Contributor
Wie kann es funktionieren wenn es nicht funktioniert???

Sorry aber zwei Leute sagen Dir nutze einen Layout Manager (und AbsolteLayout ist kein Layout Manager) und du sagst "Nein, funktniert so ja alles besser" obwohl es nicht funktioniert. Glaubst du nicht da kommen wir uns vielleicht etwas verarscht vor ?
 

Willibergi

Mitglied
Nein, das wollte ich damit gar nicht sagen.
Sorry, wenn das falsch rübergekommen ist.
Was ich sagen wollte:
Es funktioniert alles wunderbar, also die Position, die Zeichnung, usw., das einzige Problem ist eben nur das mit dem Fenster vergrößern.
Ich will halt keine größeren Änderungen mehr vornehmen.
Was müsste ich denn machen für einen LayoutManager?
 

Willibergi

Mitglied
Was für ein LayoutManager wäre denn dafür geeignet?
Prinzipiell habe ich ein JPanel, in dem ich eben zeichne und möchte, dass dieses JPanel immer genauso groß wie das Fenster ist.
Gibt es da vielleicht einen speziellen für?
 

Meniskusschaden

Top Contributor
Wenn keine weiteren Komponenten platziert werden sollen, kommen mehrere LayoutManager in Betracht, z.B. FlowLayout oder BorderLayout. Das sind dann aber nicht die LayoutManager für dein Panel, sondern für den Container, in dem du das Panel ablegst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
C Methoden Java ist auch eine Insel Listing 2.40 Recursion Java Basics - Anfänger-Themen 7
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
C Java liest nur eine Zeile ein Java Basics - Anfänger-Themen 3
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
F Erste Schritte Java ist auch eine Insel kaufen? Java Basics - Anfänger-Themen 2
B Hilfe bei eine Java-Methode Java Basics - Anfänger-Themen 4
M Erste Schritte Java prüfen ob eine der Möglichkeiten erfüllt ist Java Basics - Anfänger-Themen 2
1 Im Java Projekt eine txt datei einbinden? Java Basics - Anfänger-Themen 8
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
D Java erkennt eine deklarierte Variable nicht Java Basics - Anfänger-Themen 2
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
D Türme von Hanoi in "Java ist auch eine Insel" Java Basics - Anfänger-Themen 4
J für eine java klausur Java Basics - Anfänger-Themen 5
Y Wie setze ich genau eine Stückliste (UML) in Java um? Java Basics - Anfänger-Themen 9
S mit Java eine EXE im vordergrund ausführen Java Basics - Anfänger-Themen 3
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
I Variablen Wie initialisiert man in Java eine Variable ohne das Setzen von 0 oder einer anderen Zahl? Java Basics - Anfänger-Themen 8
DaniSahne96 Frage zu Java ist auch eine Insel Java Basics - Anfänger-Themen 12
V Mit JS eine JAVA Methode aufrufen Java Basics - Anfänger-Themen 5
M Mit Java eine HTML-Seite speichern Java Basics - Anfänger-Themen 11
B Variablen Wie macht man eine call by reference mit primitiven Datentypen in Java? Java Basics - Anfänger-Themen 2
J Geldberechner(aus Java ist auch eine Insel) Java Basics - Anfänger-Themen 6
G Erste Schritte JAVA ist auch eine Insel Java Basics - Anfänger-Themen 7
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
A Wie mit Java eine .vbs Datei starten lassen? Java Basics - Anfänger-Themen 4
A Eine Frage zu AWt in JAVA, wie wähle ich ein Punkt aus`? Java Basics - Anfänger-Themen 4
3 Eine HTML Datei in eine Java Datei umschreiben Java Basics - Anfänger-Themen 23
M Was ist genau eine Abstraktion in java Java Basics - Anfänger-Themen 3
H Reflexion: Eine Methode, beliebig viele Parameter (Java 1.4.2) Java Basics - Anfänger-Themen 8
T Java Webstart soll eine Datei speichern Java Basics - Anfänger-Themen 2
C Aus Java eine Javascript Funktion aufrufen Java Basics - Anfänger-Themen 14
T Frage aus dem Buch JAVA ist auch eine Insel Java Basics - Anfänger-Themen 11
N Per Java in ein HTML-Suchfeld eine Variable reinschreiben Java Basics - Anfänger-Themen 4
M Spielt der Debugger bei java eine große Rolle Java Basics - Anfänger-Themen 3
M Aus wieviel Klassen darf in Java eine (Programm)besitzen? Java Basics - Anfänger-Themen 21
2 Mit Java in eine WORD-Datei schreiben Java Basics - Anfänger-Themen 18
X Via Java auf eine Webseite einloggen. Java Basics - Anfänger-Themen 6
R Java, Bluetooth: mit PC eine SPP Verbindung aufbauen Java Basics - Anfänger-Themen 1
schroedi Wie startet man eine JAVA EE Projekt Java Basics - Anfänger-Themen 22
S Codebeispiel aus Java ist auch eine Insel. Java Basics - Anfänger-Themen 2
J Ein Java-Programm in eine *.exe Datei 'packen' Java Basics - Anfänger-Themen 20
G Eine HP mit Java läuft nicht Java Basics - Anfänger-Themen 4
J Aus einem Java Programm eine .java datei Kompilieren Java Basics - Anfänger-Themen 6
G Java Klasse durch eine andere Java Klasse starten? Java Basics - Anfänger-Themen 13
M Java Quellcode in eine exe datei umwandeln Java Basics - Anfänger-Themen 4
W Klasse in eine extra Java-Datei Java Basics - Anfänger-Themen 21
M Mit Java eine neue DB anlegen über XAMPP? Ist das möglich ? Java Basics - Anfänger-Themen 4
V Wie kann ich mit Java eine Tastatureingabe simmulieren ? Java Basics - Anfänger-Themen 26
vogella Mit Java eine Webpage schreiben Java Basics - Anfänger-Themen 7
P mit Java auf eine PowerPoint-Präsentation zugreifen Java Basics - Anfänger-Themen 3
M Datenbankabfrage über eine Java Oberfläche Java Basics - Anfänger-Themen 3
C eine dringende bitte an alle java-programmierer Java Basics - Anfänger-Themen 4
S Daten in eine Variable in einem anderen Java File schreiben Java Basics - Anfänger-Themen 10
T Eine HTML Datei mit Java bear. Wie soll kann man anfangen? Java Basics - Anfänger-Themen 11
T Newbie Frage Eine Java Anwendung fernsteuern? Java Basics - Anfänger-Themen 4
G eine Frage zur Generic Java ? Java Basics - Anfänger-Themen 8
B Mit Java eine Website "steuern" Java Basics - Anfänger-Themen 18
A aus Java-Code eine jar-Datei ausführen Java Basics - Anfänger-Themen 8
T Java ist auch eine Insel: Beispielprogramm fehlerhaft? Java Basics - Anfänger-Themen 2
G Wie kann ich mit Java eine Textdatei auslesen? Java Basics - Anfänger-Themen 20
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
C Aus Java eine Email wo der Body den Inhalt aus einer .... Java Basics - Anfänger-Themen 6
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben