N次ベジエ関数の解(t 軸との交点)探索 — ベジエクリッピング法

ベジエ関数 f(t) = Σ bi Bin(t) は、制御点 (i/n, bi) の凸包の中にあります。凸包と t 軸(f = 0)の交差区間の外に解はないので、その区間だけを de Casteljau 法で切り出して同じ操作を繰り返します。縮小が不十分(区間が 80% 以上残る)なときは複数解の可能性があるので2分割します。左の制御点を上下にドラッグして形を変え、右の「ステップ実行」で凸包から解を求める過程を確認できます。

次数 n = 3(制御点 4 個)
ベジエ関数 f(t) 制御多角形 制御点(上下にドラッグ) 解 f(t)=0
① 全体図(t ∈ [0,1])
未実行
② 拡大図(区間 [a,b] → u ∈ [0,1])
「ステップ実行」を押すと、区間 [0, 1] の凸包計算から始まります。
制御点の凸包 現在の区間 [a,b] 凸包∩t軸 → 新しい区間
検出された解(全自動のベジエクリッピング)
    解の個数は最大 n 個です。凸包が t 軸と交わらない区間は「解なし」として捨てられるので、解を取りこぼしません。
    ステップ実行の履歴
    手区間 [a, b]凸包∩軸 [umin, umax]幅の縮小率処理