[gelöst] Funktion zum Kurve zeichnen für Malprogramm
-
In einem C++-Programm habe ich eine Funktion zum Kurve zeichnen implementiert. Als Parameter bekommt die Funktion einen Startpunkt und einen Zielpunkt und einen Kontrollpunkt der die Steilheit bzw. Krümmung der Kurve beeinflussen kann. Mit Bezier funktioniert das schon ganz gut ich hätte jedoch lieber den Kontrollpunkt auf der Kurve gehabt. Leider komme ich mit Splines nicht klar, da ich nur einen verschiebbaren Kontrollpunkt und nicht zwei habe.
Wie kann man das denn implementieren?
-
-
Scheinbar den Text nicht komplett gelesen.
Ich habe nur EINEN Kontrollpunkt nicht zwei!Ich brauche eine Funktion, die mir aus drei gegebenen Punkten eine Kurve Zeichnet und bei der Kontrollpunkt AUF der Kurve liegt.
Also ich hätte jetzt mehr erwartet als einen Link aus Wikipedia.
Bei Hermiten habe ich ja auch noch die Tangenten zusätzlich. Die Tangenten einfach über den Abstand des Kontrollpunktes zum Start- und Zielpunkt zu berechnen (verschieben) klappt nicht, da die Kurve dann falsch ausfließt. Das ist also keine Lösung.
Bezier liefert eine ganz brauchbare Lösung, hier liegt der Kontrollpunkt jedoch nicht auf der Kurve sondern daneben. Falls jemand "Deluxe Paint" kennt, genau so eine Zeichenfunktion brauche ich.
Also gehen muss es, nur wie?
-
mit 3 Punkten und der Restriktion dass sie auf der Linie liegen müssen, kriegt man nicht mehr als Parabeln hin.
Für mehr Infos solltest du freundlicher sein.
-
Danke für die Antwort aber mein Problem ist gelöst.
Ich habe es mit einer Lagrange-Interpolation schließlich hinbekommen.Zum Thema "unfreundlich"
:
Ich erwarte auf eine ordentlich gestellte Frage auch eine ordentliche Antwort oder zumindest, dass der Antwortende sich meine Frage zuerst einmal richtig durchliest bevor er antwortet. Ein hingeschmissener Wiki-Link ist nicht wirklich eine Antwort.Gruß
trooper
-
Auch wenn es vielleicht so ausgesehen hat hab ich dir nicht nur einen Wiki Link hingeklatscht. Ich hab deine Frage ernsthaft durchgelesen und dabei die Information extrahiert dass du ein interpolierendes Spline suchst. Lagrange Interpolation fiel für mich flach da du dort, wie otze inzwischen schon angemerkt hat, mit 3 Punkten erstens nur eine Parabel bekommst und die Dinger generell relativ unpraktisch sind (Anschluss weiterer Kurven schwierig/begrenzt und weitere unschöne Eigenschaften wie Neigung zum überschwingen etc.) und deswegen eigentlich kaum verwendet werden. Du hattest erwähnt dass du Bezier versucht hast, da du ein interpolierendes Spline willst hab ich dir die hermitschen Splines als Standardspline für Punktinterpolation empfohlen. Der Verweis auf Wikipedia geschah vor allem aus dem Grund dass du nur einen statt mehrere Kontrollpunkte wolltest (nein ich habs nicht überlesen) und dort nicht nur der Spezialfall der Catmull-Rom Splines sondern die allgemeinere Form erklärt wird. Da du eben nur einen Kontrollpunkt wolltest schien mir dieser Artikel passend da dort gezeigt wird dass man die Tangenten auf verschiedenste Arten aus den Punkten berechnen kann und ich dachte dass du (wenn du die Beispiele verschiedener Varianten der hermitschen Splines dort siehst) vielleicht selbst auf die Idee kommen würdest dass der vom Benutzer gesteuerte Kontrollpunkt und die in die Formel eingesetzten Vektoren nicht unbedingt identisch sein müssen (man könnte sich analog zu den Beispielen im Wiki Artikel eben einen Weg ausdenken um für die 3 Kontrollpunkte die Tangenten zu bestimmen und dann eben einen hermitschen Spline mit all den schönen Eigenschaften benutzen)...
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Mathematik und Physik verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das war einen Antwort die auch mich zufrieden stellte. Vielleicht hab ich mit meinem Gemecker ja auch ein wenig überreagiert. Man sitzt hier einen ganzen Tag und kommt nicht weiter und dann kam auf eine Frage genau ein Wiki-Link (den ich schon kannte). Ein paar Worte zum Link wären vermutlich besser gewesen.
Mit Hermite hatte ich es zuerst versucht. Die Tangenten habe ich über die Verlängerung der Strecken zu dem Kontrollpunkt bestimmt. Nur das hat überhaupt nicht geklappt. Bei zwei Kontrollpunkte ist das eine brauchbare Lösung aber nicht bei einem. Die Kurve schmierte zu den Kanten hin immer aus. Sie sah eher aus wie eine verzerrte Glockenkurve.
Mit Lagrange bekomme ich eine prima Kurve. Aneinander hängen möchte ich
sie nicht, weshalb das für mich die beste Lösung ist.*** Thema verschoben nach Mathe und Physik kann ich auch nicht nachvollziehen.
Für mich war das eindeutig Grafik. Aber egal... ***
-
trooper schrieb:
Ein paar Worte zum Link wären vermutlich besser gewesen.
Ich hatte halt grad wenig Zeit aber ja, beim nächsten Mal schreib ich ein paar Worte
trooper schrieb:
Mit Lagrange bekomme ich eine prima Kurve. Aneinander hängen möchte ich sie nicht, weshalb das für mich die beste Lösung ist.
Gut, ich kannte dieses Programm das du erwähnt hast nicht aber die Möglichkeit des Aneinanderhängens ist in Malprogrammen für mich eigentlich Standardvoraussetzung. Egal, gut wenn du eine Lösung hast die funktioniert
-
Aneinanderreihen = Standardvoraussetzung
Darüber muss ich jetzt nochmal Grübeln. Zunächst einmal soll das Zeichenwerkzeug eine Kurve Zeichnen, die einfach zu händeln ist.
Aber - jetzt wo Du es sagst, könnte ich mir Splines (Hermite oder nicht) in einem Malprogram auch gut vorstellen. Das habe ich nur irgendwie nie so gesehen, dass es möglichst einfach zu benutzten war.
Danke für die Idee