Also müsste ich herausfinden, wo die Kontrollpunkte für eine kubische Bézierkurve liegen würden, wenn nur die Punkte auf der Kurve bekannt sind. Die Punkte können sich im 3D befinden. Ideal wäre es, dies für beliebig viele Punkte auf der Kurve zu tun. Die meisten Informationen, die ich gefunden habe, beziehen sich nur auf 2D oder nur auf 4 Punkte.
Antwort
Zu viele Anzeigen?Lass mich sehen, ob ich dich verstehe: du möchtest eine interpolierende Bezier-Kurve, die durch einen gegebenen Satz von Punkten P0 P1 ... geht, aber als Bezier-Kurven gezeichnet wird, mit einer Funktion wie
bezier4( nstep, Pj, Cj, Dj, Pj+1 ) -- Kontrollpunkte Cj, Dj
Das heißt, du möchtest zwei Bezier-Kontrollpunkte Cj, Dj für jedes Stück Pj -- Pj+1 ableiten?
Ein Weg, um solche Kontrollpunkte abzuleiten, ist die Verwendung der Bernstein-Polynom-Basis
b0(t) = (1-t)^3
b1(t) = 3 (1-t)^2 t,
b2(t) = 3 (1-t) t^2
b3(t) = t^3
bezier4(t) = b0(t) P0 + b1(t) C0 + b2(t) D0 + b3(t) P1
= P0 bei t=0, Tangente --> C0
= P1 bei t=1, Tangente <-- D0
und suche die interpolierende sogenannte Catmull-Rom-Spline, die durch P-1 P0 P1 P2 geht:
b0(t) P0
+ b1(t) (P0 + (P1 - P-1) / 6)
+ b2(t) (P1 - (P2 - P0) / 6)
+ b3(t) P1
= P0 bei t=0, P1 bei t=1
Wir möchten, dass bezier4(t) genau die gleiche Kurve wie CatmullRom(t) ist, also:
C0 = P0 + (P1 - P-1) / 6
D0 = P1 - (P2 - P0) / 6
Gegeben N Punkte P0 P1 ... (in 2D 3D ... anyd), nehme sie jeweils 4 Stück; für jedes 4er-Set gibt dir die Formel 2 Kontrollpunkte Cj, Dj für
bezier4( nstep, Pj, Cj, Dj, Pj+1 )
Macht das Sinn, ist das was du möchtest?
(Für einen Preis würde ich etwas Python / numpy zusammenbasteln.)