4

そのため、曲線上の点のみを知っている場合、3D で点が存在する可能性がある場合、3 次ベジエ曲線の制御点がどこにあるかを調べる必要があります。曲線上の任意の数のポイントに対してこれを行うことができれば理想的です。私が見つけたもののほとんどは、2D のみ、または 4 ポイントのみを扱っています。

4

1 に答える 1

3

私があなたを理解しているかどうか見てみましょう:あなたは補間ベジエ曲線が必要で、指定された点のセット P0 P1 を通過します...
しかし、次のような関数でベジエ曲線として描画されます

bezier4( nstep, Pj, Cj, Dj, Pj+1 )  -- control points Cj, Dj

つまり、各ピース Pj -- Pj+1 に対して 2 つのベジエ制御点 Cj、Dj を導き出したいですか?

このようなコントロール ポイントを導出する 1 つの方法は、バーンスタイン多項式基底を使用することです。

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 at t=0, tangent --> C0
= P1 at t=1,  tangent <-- D0

そして、P-1 P0 P1 P2 を通過する補間別名 Catmull-Rom スプラインを検索または導出します。

b0(t) P0
+ b1(t) (P0 + (P1 - P-1) / 6)
+ b2(t) (P1 - (P2 - P0) / 6)
+ b3(t) P1
= P0 at t=0, P1 at t=1

bezier4(t) を CatmullRom(t) とまったく同じ曲線にしたいので、次のようにします。

C0 = P0 + (P1 - P-1) / 6
D0 = P1 - (P2 - P0) / 6

N ポイント P0 P1 ... (2d 3d ... anyd) が与えられた場合、一度に 4 つ取得します。4 ごとに、その式から 2 つの制御点 Cj、Dj が得られます。

bezier4( nstep, Pj, Cj, Dj, Pj+1 )

これは理にかなっていますか、それはあなたが望むものですか?
(賞金のために、私はいくつかのPython / numpyを一緒に石畳にします。)

于 2010-08-24T17:20:21.190 に答える