Algorithmus für die Ableitung der Steuerpunkte einer bezier-Kurve vom Punkte entlang dieser Kurve?
Habe ich schon lange gesucht, aber offensichtlich nicht zu finden, ein Algorithmus, der mir erlauben wird, stecken Sie in eine Liste von x,y-Koordinaten, die bekannt sind, um entlang einer Kurve, um so die 4 Kontrollpunkte einer kubischen Bézier-Kurve ausspucken.
Um genauer zu sein, ich bin auf der Suche nach einem Algorithmus, der mir die zwei Kontrollpunkte benötigt, um die Form der Kurve, während der Eingabe eine Reihe diskreter Punkte, einschließlich der beiden Kontrollpunkte bestimmen die start-und Endpunkt der Kurve.
Dank!
Edit: Okay, wegen Mathe, ein Alter Feind, ich bitte um die bezier-Kurve, die am besten passen, um eine Polynom-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also gehe ich davon aus, dass die Endpunkte fixiert, und dann haben Sie eine Anzahl von (x,y) sample-Punkte, die Sie wollen fit, mit einer kubischen Bézier -.
Die Anzahl der Sampling-Punkte, die Sie haben wird bestimmen, was Ansatz zu nehmen. Schauen wir uns ein paar Fälle:
2 Punkte
2 sample-Punkte ist der einfachste Fall. Das gibt Ihnen insgesamt 4 Punkte, wenn Sie zählen am Ende Punkte. Dies ist die Anzahl von CVs in einer kubischen Bézier. Um dieses Problem zu lösen, müssen Sie einen parameter (t) - Wert für die beiden sample-Punkte. Dann haben Sie ein system von 2 Gleichungen und 2 Punkte, die Sie lösen müssen, wo die Gleichung ist die parametrische Gleichung einer Bezier-Kurve an der t-Werte, die Sie gewählt haben.
Den t-Werten können, was Sie möchten, aber Sie werden bessere Ergebnisse erhalten, indem Sie entweder 1/3 oder 2/3, oder ein Blick auf relative Entfernungen oder relative Entfernungen entlang einer Grundlinie, je auf Ihre Daten.
1 Punkt
Dies ist ähnlich zu 2 Punkte, außer, dass Sie nicht genügend Informationen, um eindeutig zu bestimmen, alle Ihre Freiheitsgrade. Was würde ich vorschlagen, ist der Einbau eines quadratischen Bézier, und dann Grad erhöhen. Ich schrieb ein ausführliches Beispiel quadratische Einbau in diese Frage.
Mehr als 2 Punkte
In diesem Fall, gibt es nicht eine einzige Lösung. Ich habe verwendet, least-squares-approximation mit guten Ergebnissen. Die Schritte sind:
Gibt es eine gute Beschreibung dieser Schritte in diesem Kostenlose cagd lehrbuch, Kapitel 11. Er spricht über die Montage von b-splines, aber eine kubische bezier-ist eine Art von b-spline (Knoten Vektor ist 0,0,0,1,1,1 und hat 4 Punkte).
Lassen Sie uns sagen, Sie haben eine Kurve y = f(x)
Definieren einer bezier-Kurve, braucht man 4 Punkte, wie:
P1x, P1y, P2x, P2y, P3x, P3y und P4x und P4y
P1 und P4 sind Sie der begin/end-Punkten der Kurve. P2 und P3 sind control points.
Sie bereits wissen, wo der Anfang und das Ende der Kurve ist. Sie haben zu berechnen, P2 und P3. Die x-Koordinate, P2x und P3x sind einfach, da Sie nur wählen Sie Sie, indem Sie die Kurve
t
werden, z.B. 1/3 und 2/3. So haben Sie P2x und P3xDann, Sie am Ende mit einem system von zwei Gleichungen und zwei unbekannten (die und P2y P3y).
Nach Knirschen einige mathematische, die Sie am Ende mit etwas wie dieses:
(Mein f(x) wurde eine kubische Polynome, welche auch garantiert, dass ich in der Lage wäre, um zu passen eine kubische Bezier-Kurve, um es genau.)