どのように動作させたいかによって、表示されているものを実現する方法はいくつかあります。ポイント オン カーブ操作を介してベジエ カーブを変更する簡単な方法をいくつか説明します。
最初に行うことは、ユーザーが曲線上でクリックしたパラメーター値 (t) を把握することです。これは概して概算になります。ベジエのピクセルまたはサブピクセル レンダリングを行っている場合は、ピクセルごとに t 値を記録し、それを使用します。線分にテッセレーションしている場合は、どの線分が最も近いかを確認し、2 つの端点の t 値を見つけて、線に沿った距離に従って t 値を lerp します。
t 値を取得したら、それをベジエ曲線の方程式に差し込むことができます。最終的には次のような形式になります。
P = k0*P0 + k1*P1 + k2*P2 + k3*P3
ここで、P は曲線上の点、P0、P1、P2、および P3 は入力制御点、k0、k1、k2、および k3 は特定の t に対する定数です。k 値を「寄与」と呼びます。より具体的には、曲線 P(t) 上の点に対する制御点の寄与と呼びます。覚えておくと便利なプロパティは、k0+k1+k2+k3 = 1 です。
したがって、ベクトル V = P' - P があるとします。ここで、P' は新しい位置で、P は元の位置です。P' を必要な場所に移動するには、いくつかのコントロール ポイントを移動する必要がありますが、どのコントロール ポイントを移動するかについてはある程度の柔軟性があります。寄与度がゼロでない任意のポイント、またはいくつかの組み合わせを使用できます。
ユーザーが t=0 で曲線をクリックしたとします。この場合、k0 だけが非ゼロなので、
P0 := P0 + V
正しい結果が得られます。これは、次のようにも記述できます。
P0 := P0 + k0 * V
すべての寄与が非ゼロである一般的なケースでは、同じ変換を各ポイントに適用できます。これにより、非常に滑らかで広がりのある変形の効果が得られます。
もう 1 つのオプションは、距離全体で最大の貢献度を持つコントロール ポイントを単純に移動することです。使用する方程式は次のようなものになると思います
Pmax := Pmax + 1/kmax * V
いずれにせよ、特定の t 値での寄与を調べ、コントロール ポイントを移動して、新しいポイントが目的の場所に配置されるように要約します。
このアプローチはかなり一般的で、NURBS やその他のほとんどのスプライン、さらにはサーフェスで機能します。Greville Abscissae を使用するかなり一般的な別の方法があります。これは、できるだけ多くのポイントを固定しますが、私の経験では、振動が発生しやすいです。