曲線と点
曲線 C(t)
制御点 Pi
対象点 Q
曲線上の最短点
左:オレンジの丸は曲線の制御点(ドラッグで移動、ダブルクリックで重み w を編集)。青い四角は対象点 Q(ドラッグで移動)。 右:点 Q と曲線上の点 C(t) の距離の2乗 f(t) = |C(t) − Q|² を最小化する条件 f'(t)=0 を、有理ベジエ C(t) = N(t)/W(t)(N, W は次数 n)を用いて多項式の形に整理します。Q(t) = N(t) − Q・W(t)(次数 n)とおくと f'(t)=0 は Q(t)・Q'(t)W(t) − |Q(t)|²・W'(t) = 0、すなわち Q(t)・[ Q'(t)W(t) − Q(t)W'(t) ] = 0 と書け、 内側の [ ] は次数 2n−1、それと Q(t)(次数 n)の内積である最終的な g(t) = Qx(t)[Qx'W−QxW'] + Qy(t)[Qy'W−QyW'] は 3n−1 次 のベジエ関数になります。 これをその制御多角形の凸包とともに表示します。 g(t)=0 の根はベジエクリッピング法で求めています。g(t) の制御点が作る凸包と y=0 の直線(フラットライン)との交差範囲によって 根を含みうる t の区間を絞り込み、絞り込みが不十分な場合は区間を二分してそれぞれを再帰的に処理する、という手順を収束するまで繰り返します。 この方法は凸包性質を利用しているため、通常のサンプリングよりも少ない反復回数で高精度に根へ収束します。 左のグラフを操作すると右のグラフが連動して更新されます。