簡易モーフィング |
私はモーフィングの理論を知りませんが、自分で勝手に考えた簡易モーフィングについて書きます。モーフィングと言っても点の配列が他の形の配列に変わるとか、線で描かれた図形が他の図形に変わるといった簡単なものです。
1.点のモーフィング |
例えば今、円形に配列された点が正方形に変わるところを考えます。現在の座標を配列(point_x , point_y)、変形後の座標を配列(after_x , after_y)とします。中心座標を(cx , cy)、円の半径をl1、正方形の一辺の長さを2*l2とします。
point_x.n=cx+cos(45度*n)*l1
point_y.n=cy+sin(45度*n)*l1
after_x.0=cx-l2 : after_y.0=cy
after_x.1=cx-l2 : after_y.1=cy+l2
after_x.2=cx : after_y.2=cy+l2
after_x.3=cx+l2 : after_y.3=cy+l2
after_x.4=cx+l2 : after_y.4=cy
after_x.5=cx+l2 : after_y.5=cy-l2
after_x.6=cx : after_y.6=cy-l2
after_x.7=cx-l2 : after_y.7=cy-l2
すべての点が同時に正方形への変形を完了させなければなりません。そこで、例えば64回移動後に変形完了するとします。n番目の点が移動する方向は、
angle.n=atan((after_y.n-point_y.n)/(after_x.n-point_x.n))
の角度となります。移動する長さは
length.n=√((after_x.n-point_x.n)^2+(after_y.n-point_y.n)^2)
です。すると、1回にX方向、Y方向それぞれに移動する量は
dx.n=length.n*cos(angle.n)/64
dy.n=length.n*sin(angle.n)/64
です。あとはdx.n , dy.nドット移動させることを64回繰り返すだけです。
計算誤差が気になる場合は、変形完了後に(after_x , after_y)を(point_x , point_y)に入れればいいです。
point_x.n=after_x.n
point_y.n=after_y.n
用途は少ないと思いますが、なにかの形に配列された弾あるいは敵が他の形に配列を変えるといった演出に使えると思います。
拙作ABOGADRO改より。
2.線のモーフィング |
上記で、点同士を線で結べば、線で描いた絵を他の図形に変形させることもできます。
[サンプルプログラムをダウンロード] (HSP Ver2.61+hspext.dll+hmm.dll用)
[サンプルプログラムをダウンロード] (HSP Ver3用)
マウスで自機を動かし、左クリックで弾を撃ちます。しばらく撃ちこむとボスが第二形態に変化します。