私はあなたに数学を始めさせることができます。二次ベジエがどのように定義されているかはわかりませんが、次と同等である必要があります。
(x(t), y(t)) = (a_x + b_x t + c_x t^2, a_y + b_y t + c_y t^2),
どこで0 < t < 1
。a、b、c は、曲線を定義する 6 つの定数です。
(X, Y) までの距離が必要です。
sqrt( (X - x(t))^2 + (Y - y(t))^2 )
上記の量を最小化するを見つけたいのでt
、その一次導関数を相対的に取り、それt
を 0 に設定します。これにより、次のようになります (sqrt と 2 の係数を削除します)。
0 = (a_x - X + b_x t + c_x t^2) (b_x + 2 c-x t) + (a_y - Y + b_y t + c_y t^2) ( b_y + 2 c_y t)
これは の 3 次方程式ですt
。分析ソリューションは既知であり、Web 上で見つけることができます。累乗の係数を取得するには、おそらく少し代数を行う必要がありますt
(つまり、0 = a + bt + ct^2 + dt^3)。代わりに、たとえばニュートン ラフソンを使用して、この方程式を数値的に解くこともできます。
ただし、3 つのソリューションのいずれも範囲内にない可能性があることに注意してください0 < t < 1
。その場合、 と で (X, Y) (最初の式) までの距離の値を計算し、2 つの中で最小の距離t = 0
をt = 1
取ります。
編集:
実際には、一次導関数= 0を解くと、得られる解は最大距離と最小距離になる可能性があります。したがって、得られる解 ( の最大 3 つの値) の距離 (最初の式) と、 および での距離を計算し、t
それらすべての値の実際の最小値を選択する必要があります。t=0
t=1