目的
無重力で回るペンチやTハンドルの運動が不思議です。力学的に少しづつ紐解いて、運動をシミュレーションできるようにしてみたいと思います。pythonでのシミュレーションや、pyopenglを使った可視化も試みようと思っています。
動機付け
数年前に、以下の動画を見て不思議に思い、取り憑かれました。
Dancing T-handle in zero-g, HD
どうでしょう、面白いと思いませんか?
検討の前提
マインクラフトな世界を想定
シミュレーションをすることを見越して、ペンチやTハンドルをどういったモデルとして扱うかを最初に検討する必要があります。 複雑な物体の運動を計算するためにはできるだけ単純に捉えて扱うのがいいので、マインクラフトのようなボクセル世界を想定したいと思います。
ボクセルなモデリングのツールがないかなと調べていたらMagicaVoxelというツールを発見しました。今後使えるかもしれません。
外力は働かない
重力や空気抵抗など外から物体に力が働かないことにします。回転運動は最初から起こっているとします。今は初期の検討ですのでこれで行きます。宇宙船内の動画の運動は空気があるので、それも運動に影響が出るのかもしれませんが、とりあえずこの前提で話を進めて行きましょう。
回転運動
回転運動の運動方程式はオイラーの運動方程式とも呼ばれています。 それは、角運動量の微分が物体に加えられたモーメントの総和に等しいと言うものです。 数式で表すと以下のようになります。
$$ \begin{equation} \frac{d H}{ d t}=M \end{equation} $$
ここで角運動量$H$は運動量のモーメントです。
今、並進運動と回転運動を同時に行なっている物体の適当な場所に注目して、そこの点のような微小な質量(微小質量)$dm$の運動量を $dm v$とすると、微小質量の運動量$dH$は次のようになます。
$$ dH=r \times dm v = dm (r \times v) $$
さて、ある部分の微小質量の速度について話をしてみます。 物体の中心を決めておきます。話を簡単にするには物体の中心を重心に取っておくのが良いです。
重心は物体にかかる重力の代表点になりますし、全ての微小部分の回転中心を重心とした時に全ての微小部分の自重が発生する力のモーメントの総和が0になる点となります。
この力のモーメントの総和が0と言う性質が、数式の展開の上で楽をすることができます。
速度とは位置の時間変化率ですので、微小部分の位置ベクトル$R$を定義したいと思います。
$$ \begin{equation} R = R_0 + r \end{equation} $$
ここで$R_0$は慣性空間の原点から物体の代表点(今回は重心)を指し示す位置ベクトルです。 そして$r$は物体の代表点から微小部分の位置を示す位置ベクトルです。
こうしておくと、微小部分の速度は位置ベクトル$R$を微分すると得られると理解できます。すなわち
$$ \begin{equation} \dot{R} = \dot{R_0} + \dot{r} \end{equation} $$
となるのですが、$r$と言うベクトルは回転する物体の上にあるので、$\dot{r}$を考えるときは、もう少し混み砕かないとなりません。 結構ここは複雑です。
$$ \begin{equation} \dot{r}= \left[ \frac{d r}{d t} \right] + \omega \times r \end{equation} $$
上式の$\left[ \frac{d r}{d t} \right] $の部分は、物体に固定された座標系における、物体上の位置の移動の変化率を表すします。 この部分は、微小部分は物体に固定されていて、物体の変形は考えませんので、その位置は変化しないため、変化率は0となります。 従って、上式は少し簡単になって。以下のようになります。
$$ \begin{equation} \dot{r}= \omega \times r \end{equation} $$