はい、De Casteljau のアルゴリズムが最適です。
パラメータ化
曲線がt =0からt =1まで正しくパラメータ化されていない場合、曲線を記述するのに間違った方程式を使用しているようです。ウィキペディアには正しい式があります。
B( t ) = (1-<i>t) 3 P 1 + 3(1-<i>t) 2 t P 2 + 3(1-<i>t) t 2 P 3 + t 3 P 4
[ウィキペディアのゼロベースの形式から、あなたの質問のインデックスを 1 ベースに調整しました。]
t =0 に設定すると、開始点であるP 1が得られます。t =1 に設定すると、エンドポイントP 4が得られます。その間で、曲線の形状は、これらの点と 2 つの制御点P 2およびP 3によって決まります。
De Casteljau のアルゴリズム
カーブをカットしたいパラメータをtにします。最初の部分だけを残したいとしましょう。P 1からP 2へ、そこからP 3へ、そしてそこからP 4へ3 本の線を引きます。これらの線のそれぞれを、その長さの分数tで分割します。つまり、分割点の前の線の長さは、t : 1 として全体の長さに関係します。これで、3 つの新しい点P 12からP 34ができました。同じことを繰り返して、2 つの点P 123とP 234を取得します。、再び単一点P1234を得る。この最終点は、切り捨てられた曲線の終点である B( t ) です。開始点は、以前と同様にP 1です。新しいコントロール ポイントは、作成したばかりのP 12とP 123です。
曲線の最初の部分の削除も同じように機能します。したがって、2 つのステップで、曲線の両端をトリムできます。近似などを使用せずに、元の曲線のセグメントを正確に (使用する数値精度まで) 記述する新しい制御点のセットを取得します。
上記のすべての幾何学的記述を代数式に変換することができます。完璧な世界では、引用した質問に対するこの回答から結果を導き出す必要があります。
残念ながら、これは完璧な世界ではないようです。この記事の執筆時点では、これらの式は 2 次の多項式のみを使用していたため、3 次曲線の端点を記述することはできませんでした。正しい式は次のようになります。
- P' 1 =
u 0 u 0 u 0 P 1 + ( t 0 u 0 u 0 +
u 0 t 0 u 0 +
u 0 u 0 t 0 ) P 2 + ( t 0 t 0 u 0 +
u 0 t 0 t 0 +
t 0 u 0 t 0 ) P 3+
t 0 t 0 t 0 P 4
- P' 2 =
u 0 u 0 u 1 P 1 + ( t 0 u 0 u 1 +
u 0 t 0 u 1 +
u 0 u 0 t 1 ) P 2 + ( t 0 t 0 u 1 +
u 0 t 0 t 1 +
t 0 u 0 t 1 ) P 3+
t 0 t 0 t 1 P 4
- P' 3 =
u 0 u 1 u 1 P 1 + ( t 0 u 1 u 1 +
u 0 t 1 u 1 +
u 0 u 1 t 1 ) P 2 + ( t 0 t 1 u 1 +
u 0 t 1 t 1 +
t 0 u 1 t 1 ) P 3+
t 0 t 1 t 1 P 4
- P' 4 =
u 1 u 1 u 1 P 1 + ( t 1 u 1 u 1 +
u 1 t 1 u 1 +
u 1 u 1 t 1 ) P 2 + ( t 1 t 1 u 1 +
u 1 t 1 t 1 +
t 1 u 1 t 1 ) P 3+
t1t1t1P4 _ _ _ _ _ _ _
ここで、u 0 = 1 − t 0およびu 1 = 1 − t 1です。
括弧内の式では、少なくともいくつかの項が等しく、組み合わせることができることに注意してください。ここで述べた式がパターンをより明確にするので、私はそうしませんでした. これらの計算をx方向とy方向に対して個別に実行するだけで、新しいコントロール ポイントを計算できます。