さて、回転に関する方程式を見つけるという話ですが結論から言ってしまうと、
物体に固有の、「慣性モーメント」というものを求めて次の方程式を解くだけです。
N = I*dω/dt
ここで
N: トルク【ベクトル】
ω: 角速度【ベクトル】
I: 慣性モーメント【スカラー】
です。
トルクとはN = r x F つまり距離と力の外積で(なんで2Dなのに外積なんだよという突込みはともかく)
回転中心からの位置ベクトルを、力の向きに回したとき右ねじの進む方向になります。(図参照、つまり2Dでも画面の手前方向か奥行き方向になる)
要はこのベクトルが
手前を向いていれば、反時計回りに
奥方向を向いていれば、時計回りに回そうとする力が働いていることにまります。(2Dでは単に手前方向を+, 奥方向を- ということも多いです)
角速度とは単位rad/sで、要は一秒間に何ラジアン動くかということを示しています。
ω = dΘ / dt で、要は角度の時間微分になります。
ベクトルの向きと役割はトルクと同じで、手前方向なら右回転、奥方向なら左回転です
(なんで2Dなのにトルクも角速度もわざわざ3Dで考えるようなことをするかというと、その方がいろいろ便利だからです。ベクトルの計算的に)
最後の慣性モーメントですが、これは要は回りにくさを表す量です。大きいほど回転速度を上げにくくなります。
慣性モーメントは次のようにして求めます。
①物体を粉々に分解する、一つの粉の質量をmiとする
②回転中心から一つ一つの粉までの距離を求める。その距離をriとする
③mi*ri2を計算する
④すべて足す
つまりI = Σmiri2です
要するにやってることは、回転の中心から遠いところに質量があればその分量が増えるようなものを計算しているわけです。
距離の2乗に比例してその粉の慣性モーメントは増えるため、できるだけ回転中心に近いところに質量が集中している方が回転しやすいということになります。
これは、フィギュアスケートのスピンがわかりやすい例です。スポーツカーがMRにこだわる理由も半分くらいこれです。要はエンジンが中央にあったほうがコーナーで有利だということです。
この図でいうと、たとえ質量が同じでも左よりも右のほうが慣性モーメントは大きくなります。
・・・まぁこれで一応3つ目の方程式がそろいました。
ちなみにこの方程式をちゃんと求めると↓のようになります
► スポイラーを表示
void Update()
{
v_ += f_*dt/m_;//速度更新
s_ += v_*dt;//位置更新
omega_ += N_*dt/I_;//角速度更新:追加
theta_ += omega_*dt;//角度更新:追加
f_ = Vec();
N_ = 0.0;
}
[2]エネルギーと仕事
正直運動をシミュレーションするのにエネルギーはまず考えなきゃいけない要素なんですが、これに踏み込むと収束とか発散とかの話になりそうなので
適当に流します。
これも結論から言うと
運動のシミュレーションなら最低限何もしないときに2つのエネルギーの総和を
増やさなければそれっぽく見えます
①位置エネルギー mgh( 質量、重力加速度、高さ)
②運動エネルギー 1/2 * mv2+1/2*Iω2
なぜかという話↓
► スポイラーを表示
► スポイラーを表示
特に衝突の際に厄介になるからです。
衝突時、瞬間的には高さは変化しないので、位置エネルギーは無視するとして
今までは回転運動を考えなかったために速さを減らすか一定にすれば、運動エネルギーは一定以下にできました。
しかし回転運動が絡んでくると、回転のエネルギーと速さによるエネルギーの総和が運動エネルギーになるためこれは管理しないと問題になってきます。
具体的な例は実際に作るときにしめすとして、要は回転というのはその辺が少し面倒だということです。