ベジェ曲線などの考え方をベースにするなら「補間」という考え方になると思います。方法には何種類かあるのかも知れませんが自分なりに過去にやった方法をコメントしてみます。
4つの辺に囲まれた変形後の図形を考えますと、以下の図のようになっています。
一つの辺に対して制御点が4つありますが見易さのため開始点と次の制御点、終了点と直前の制御点を結んだベクトルを制御ベクトル(でたらめな用語です)ということにします。図上で黒の矢印が制御ベクトルですが、V11,V12が左の辺の制御点、H11,H12が下の辺の制御点、・・・といった具合です。
さて2D空間上の任意の点の変形ですが・・・
(1) 変形前の図形でその点を囲む四角形を考え、その点のX, Yそれぞれの方向の媒介変数tx, tyを計算します。四角形の領域が単なる長方形なのでこの計算は単純ですね。
(2) 変形後の座標は2段階で考えます。最初に変換前の四角形で問題の点を通る水平線HLINEを考えます。この水平線は図の水色の曲線に写像されるというふうに考えてください。この曲線の左右の端点はtyとV11,V12およびtyとV21,V22でベジエ曲線上の点を求めることと同じ計算になります。
(3) さてHLINEを変形した曲線は制御ベクトルHM1, HM2を持つベジエ曲線であると考えます。さらにHM1はtyの値によってH11から滑らかにH21に変化すると考えます。つまり制御ベクトルも媒介変数tyによって補完すればよいです。とりあえずH11,H21とtyで線形補完してもよいでしょう。線形補完は1次元でも2次元でも同じ式
HM1 = H11 * (1 - t) + H21 * t
で計算できます。(制御点の補完は線形補完ではなくもっと精密な補完方法も考えられるのかも知れません)
(4) ここまで計算すると水色のベジエ曲線の制御ベクトルが決まりますので最後にtxを用いてこの曲線上の点を求めるとそれが元の点の変換後の点となるという具合です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/24 18:48