回答:
編集:新しい画像と説明に従って回答を変更しました。
for every control point p(k, n)
p'(k, n) = ( p(k, n) - p(k) ) * d * l(k) + p(k, n)
ここk
で、は行インデックスで、n
は制御点の列インデックスです。l
高度係数であり、{-1、-1/3、1/3、1}と等しい。p(k)
k番目の行の中心です。
根拠:
新しい画像から、赤と青の線が線の中心(基本的に(k、0)であるp(k))からその点まで描画されます。最初の線では、グラフ上のもの(赤い線)を含むすべての制御点が、その線上の同じ点に移動します。p(k、n)-p(k)は、ポイントをp(k)からp(k、n)に移動するベクトルを提供します。これは、他の方法に適用する必要があり、ポイントを目的の位置に移動します。グラフでは、d = 1なので、最初の線のすべての点が中心に移動します。これを確認するために方程式を簡単に解くことができます。d * l(0)
は-1なので-p(k, n) + p(k) + p(k, n)
、p(k)を与えるのはどちらかです。
2番目の線では、青い線が点から中心に向かっていますが、今回は到達する前に停止しました。それが本当に1/3からカットされているかどうかはわかりませんが、それは良い出発点になるでしょう。したがって、同じ式が適用されます。lは-1/3 dは1なので、ポイントは1/3の方法で移動します。3番目は2番目と同じですが、外側に移動するため、lは1/3になります。
最後の線では、すべての制御点がその線の中心点から移動します。あなたの線がその中心で集まるので、これは非常に明確です。
この式で発生する可能性のある唯一の問題は、1/3の仮定ですが、それが失敗する理由はわかりません。
注:インデックス付けには行、列を使用したため、x、yを使用している場合は、それらの位置を切り替える必要があります。