2016-06-01 38 views
0

Wie interpoliert man einen gegebenen Satz von n Punkten und deren Ableitungen mit einem Bezier-Spline?Spline-Bezier-Interpolation

Momentan benutze ich eine Bibliothek (SDL_gfx), die eine Funktion hat, bezierRGBA(), die eine Bezier-Kurve mit ihren Kontrollpunkten zeichnet.

Ich habe im Internet gesucht, aber es ist mir nicht klar, wie man die Bezier-Kontrollpunkte von einer gegebenen Menge von Punkten und seinen Ableitungen erhält.

+0

was meinst du, Bezier Kontrollpunkte von einer bestimmten Menge von Punkten? Wenn Sie eine Bezierkurve haben möchten, müssen Sie deren Kontrollpunkte kennen. –

+0

Können die Kontrollpunkte nicht durch die Tangenten bestimmt werden? Die Punkte in dem Fall sind bekannte ** Positionen ** eines Körpers im Laufe der Zeit. Ich hatte gehofft, eine geschätzte Flugbahn mit aufeinanderfolgenden Bezier-Kurven zu zeichnen. Die Geschwindigkeit des Körpers (erste Ableitung) ist für jeden Punkt verfügbar. – Hydren

+1

Bezier-Kurven interpolieren nicht die Punkte außer dem ersten und dem letzten ... Wenn Sie interpolieren möchten, können Sie zum Beispiel Catmull-Rom verwenden ... Sie können jedoch eine Bezier-Kurve an eine Reihe von Punkten anpassen. Dies geschieht durch Lösen eines kleinsten Quadratsystems zum Finden der Kontrollpunkte ... Das kann für die Trajektorien oder tatsächlichen Punkte gebildet werden ... –

Antwort

0

In einer Bezier-Kurve haben Sie eine Reihe von Kontrollpunkten P, die in Bernstein-Polynomen multipliziert werden, die auf dem Parameter u definiert sind. Ein Punkt auf der Bezier-Kurve ist Q (u) = Summe (i von 0 bis d) Pi * Bi, d wobei d die Anzahl der Kontrollpunkte ist und auch der Grad bestimmt wird. Sie können meine Website überprüfen: http://pages.cpsc.ucalgary.ca/~amahdavi/pmwiki-2.2.8/uploads/Site/last1.pdf, um die tatsächliche Formel zu sehen. Sie können die Formel für die Tangente und eine effiziente Möglichkeit zur Implementierung von Bezier-Kurven finden (de Casteljau-Algorithmus)

+1

das ist eine Art schlechte Erklärung. http://cubic-bezier.com/, https://www.jasondavies.com/animated-bezier und https://pomax.github.io/bezierinfo sind viel bessere Orte, um Leute zu senden. –

+0

Dies ist eine Website der Universität, deren Inhalt ich mir sicher bin. Wenn Sie eine bessere Antwort haben, können Sie es hier als eine andere Antwort senden. –

+0

@ Mike'Pomax'Kamermans Ich habe deine Website gelesen. Es ist ziemlich interessant. Sie sollten Ihre Antwort auch als Antwort senden, damit sie für andere verfügbar ist. Über den Interpolationskommentar, wie Sie wissen, sind Bezier-Kurven das Ergebnis linearer Interpolation von Kontrollpunkten. Sie interpolieren jedoch nicht ihre Kontrollpunkte. Daher interpolieren sie nicht. Wenn Sie also eine Menge von zu interpolierenden Punkten haben, wenn Sie sie als Ihre Kontrollpunkte nehmen, geht Ihre Bezier-Kurve nicht durch sie hindurch, was bei dieser Frage der Fall ist (glaube ich).Werfen Sie einen Blick auf meine Website und lassen Sie mich wissen, was youthink –

2

Wenn Sie den Positionsvektor und den ersten Ableitungsvektor an jedem Punkt haben, können Sie ganz einfach eine kubische Bezierkurve erstellen zwischen zwei aufeinanderfolgenden Punkten. Bezeichnen wir die beiden Punkte als P0 und P1 und die ersten Derivate als P'0 und P'1, dann die kubischen Kontrollpunkte Qi Bezier-Kurve (i = 0 ~ 3) als

Q0=P0 
Q1=P'0/3 + P0 
Q2=P1-P'1/3 
Q3=P1 

Wiederholen Sie diesen Vorgang finden Für jeweils zwei aufeinanderfolgende Punkte (und erste Ableitungen) Ihrer Datenpunkte erhalten Sie eine Reihe von kubischen Bezier-Kurven, die in C1-Weise verbunden sind.

+0

Dank Fang, mit Ihren Gleichungen funktionierte die resultierende Kurve und hatte C1 parametrische Kontinuität, aber es war eher zu oszillierend. Kennen Sie Gleichungen zum Abrufen von Kontrollpunkten für eine ** quadratische ** Bezierkurve? Ich denke, es sollte besser die Flugbahnform passen. – Hydren

+0

Wenn die Kurve zu sehr oszilliert, ist es typischerweise wegen der Größenordnung der ersten Ableitungen zu groß. Wenn Sie, was Sie wissen, nicht die tatsächlichen Vektoren der ersten Ableitung, sondern nur die Tangentenvektoren sind (d. H. Die Größe ist wirklich unentschieden), gibt es einen guten Weg, "gute" Größen zu bestimmen, um Schwingungen zu reduzieren. – fang

+0

Sie können eine quadratische Bezier-Kurve nicht immer aus zwei Punkten und zwei ersten Ableitungen bestimmen, zum Beispiel wenn die ersten beiden Ableitungen parallel sind, aber nicht zu der durch die beiden Endpunkte definierten Linie. – fang