ベジエ曲線のオフセット曲線(次数可変・自己交差トリム)

制御点(●)はドラッグで動かせます。右のサブパネルには、区間判定で使う距離関数 E(u) = (C(u)−P)・C'(u)(次数 2n−1 のベジエ関数)とその凸包、およびベジエクリッピング法で求めた解(零点)を常時表示します。 アルゴリズム: ①元曲線を細分し各区分を Tiller–Hanson 法でオフセット近似 → ②区分同士にベジエクリッピングの 曲線対曲線交点探索をそのまま適用して自己交差点 C(s)=C(t) (s<t) を求めパラメータ分割 → ③各区間代表点から 元曲線への最短距離をベジエクリッピングによる E(u) の零点探索で求め、d より明らかに小さい区間を破棄。

元の曲線 オフセット曲線(有効区間) 破棄区間(ループ) 未トリム(薄)

距離関数 E(u) と凸包(サブウィンドウ)

代表点 P(緑)から元曲線への最短距離は、E(u)=(C(u)−P)・C'(u)(次数 2n−1)の零点を ベジエクリッピング法(制御多角形の凸包を y=0 の帯でクリップし区間を再帰的に絞り込む)で解いて求めます。

凸包 制御多角形 E(u) 解(零点)