4 Stimmen

Wie erstellt man eine kubische Bézierkurve, wenn N Punkte in 3D gegeben sind?

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.

3voto

denis Punkte 20177

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.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X