引力っぽい動きを再現する
図のように、点Pが、点Targetに引っ張られる動きを再現する方法を紹介する。
自由な点
P = (0,0)
Target = (1,1)
を作成する。
自由なベクトルオブジェクト
v = (0,0)
を作成する。これは速度ベクトルとして使う。
ベクトルオブジェクトaを、以下の定義で作成する。aは、加速度ベクトルとして使う。
a = 0.01UnitVector[Vector[P, Target]] / (Distance[P, Target]² + 10)
末尾の「+10」は、ゼロ距離付近における加速度の跳ね上がりを制御するために置いている。係数0.01は、動きを見ながら適当に調整されたい。
自由な数値オブジェクト
updater = 0
を作成し、On Update スクリプトに、以下を記述する。
SetValue[v,(v+a)*0.99]
SetValue[P,Translate[P,v]]
「*0.99」は、摩擦のつもりである。ここを1にすれば、延々と動く。
updaterのアニメーションを開始する。増分を細かく取れば、点Pは、より滑らかに動く。