雑記帳
僕用勉強ノート 「古典力学」の巻

全角運動量と角速度の間の線形関係 【慣性モーメント】

(書きかけ)
角速度 \(\boldsymbol{\omega}\) で回転している併進運動をしていない剛体について、位置 \(\boldsymbol{r}\) の剛体の体積素片 \(dV\) が持つ角運動量 \(d\boldsymbol{l}\)
\[ \begin{align} d\boldsymbol{l} &= (\boldsymbol{r} - \boldsymbol{r}_G) \times d\boldsymbol{p} \\ &= (\boldsymbol{r} - \boldsymbol{r}_G) \times ((\rho(\boldsymbol{r})dV)\cdot(\boldsymbol{\omega} \times (\boldsymbol{r} - \boldsymbol{r}_G))) \\ &= (\rho(\boldsymbol{r})dV)\cdot(\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega} \times (\boldsymbol{r} - \boldsymbol{r}_G)) \\ \end{align} \]
つまり、全角運動量 \(\boldsymbol{L}_{\boldsymbol{\omega}}\) は、それら各体積素片の持つ角運動量の連続総和を剛体全体取ればよいので
\[ \begin{align} \boldsymbol{L}_{\boldsymbol{\omega}} &= \int_V{d\boldsymbol{l}} \\ &= \int_V{(\rho(\boldsymbol{r})dV)\cdot(\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega} \times (\boldsymbol{r} - \boldsymbol{r}_G))} \\ &= \int_V{\rho(\boldsymbol{r})\cdot(\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega} \times (\boldsymbol{r} - \boldsymbol{r}_G))dV} \\ \end{align} \]
\[ V(t) = \{x:\mathbb{R}^3 \vert \rho(x,t) \ne 0 \} \]
ここで、このある瞬間において角速度 \(\boldsymbol{\omega}\) で回転している剛体の全角運動量の対応関係を調べてみると、「運動量と速度」の場合と同じようにそれら2つの物理量の間に線形関係が存在することがわかる。
実際に確かめてみよう。
まず
\[ \begin{align} (I(t))(\boldsymbol{\omega}) = \boldsymbol{L}_{\boldsymbol{\omega}}(t) \\ \end{align} \]
という写像 \(I(t)\) を定義する。
\[ \begin{align} (I(t))(a_1\cdot \boldsymbol{\omega}_1 + a_2\cdot \boldsymbol{\omega}_2) &= \int_V{\rho(\boldsymbol{r})\cdot(\boldsymbol{r} - \boldsymbol{r}_G) \times ((a_1\cdot \boldsymbol{\omega}_1 + a_2\cdot \boldsymbol{\omega}_2) \times (\boldsymbol{r} - \boldsymbol{r}_G))dV} \\ &= \int_V{\rho(\boldsymbol{r})\cdot(\boldsymbol{r} - \boldsymbol{r}_G) \times (a_1\cdot \boldsymbol{\omega}_1 \times (\boldsymbol{r} - \boldsymbol{r}_G) + a_2\cdot \boldsymbol{\omega}_2 \times (\boldsymbol{r} - \boldsymbol{r}_G))dV} \\ &= \int_V{\rho(\boldsymbol{r})\cdot (a_1\cdot (\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega}_1 \times (\boldsymbol{r} - \boldsymbol{r}_G)) + a_2\cdot (\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega}_2 \times (\boldsymbol{r} - \boldsymbol{r}_G)))dV} \\ &= a_1\cdot \int_V{\rho(\boldsymbol{r})\cdot ((\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega}_1 \times (\boldsymbol{r} - \boldsymbol{r}_G)))dV} + a_2\cdot \int_V{\rho(\boldsymbol{r})\cdot ((\boldsymbol{r} - \boldsymbol{r}_G) \times (\boldsymbol{\omega}_2 \times (\boldsymbol{r} - \boldsymbol{r}_G)))dV} \\ &= a_1\cdot (I(t))(\boldsymbol{\omega}_1) + a_2\cdot (I(t))(\boldsymbol{\omega}_2) \\ \end{align} \]
この事実の何が嬉しいのかといえば、\((I(t))\) が線形空間 \(\mathbb{R}^3\)\(\mathbb{R}^3\) の間の線形写像ということは、その写像自体を (実線形空間の圏に2つの与えられた線形空間からそれらの通常のテンソル積を構成する関手と諸々の構造を与えることで得られるモノイダル閉圏の) 内部ホム内のベクトルとして考えることができ、またこのとき、その内部ホムは9次元即ち有限次元であるため、適当な基底を与えて成分表示を考えれば、その写像は最大9個 (結果から言うと対称なので6個) の実数の組で表現できてしまうのである。
このことは、物理エンジンを作る際に有利に働くことになる。
「一般的な写像」というのは、特別な性質を持たない要素間の対応であり、ドメインやコドメインが非有限個の情報を含んでいる場合、写像のグラフにも当然無限個の情報が必要になる。つまり、敢えて「写像」というものを一つのデータとして保存しておいて、その無限個のデータを含んだ対応表を使って「全角運動量」に対応する「角速度」を拾いだすという行為は、コンピュータ上では適切とはいえない。(Haskell のような遅延評価を採用した言語における「無限長リスト」のようなものを指しているわけではない。無限大の物理メモリというものは実在してないので、その場合言うまでもなく内部にそのようなあらかじめ全ての計算結果が保存された無限長の対応表があるわけでなく、要求に応じてその場でハイコストな計算を処理することになるため、ここでの説明のイメージにはそぐわない。)
一方で、有限次元線形空間の間の線形写像となった場合、その「(線形)写像」というものを有限長のデータとして保存しておくことができてしまう。
具体的には、例えば実数全体をコドメインにとるような "線形写像とは限らない" 写像 \(X\rightarrow \mathbb{R}\) 全体も、コドメイン側で定義できる加法・スカラー倍を写像側に誘導してくることによって線形空間とみなすことができる。
線形写像であろうがなかろうが、いずれにせよ「写像のグラフ」というのは無限長になり得る。
しかしながら、そのベクトルとみなされた「写像」あるいは「線形写像」について、成分表示という形で「写像」それ自体を保存してみることを考えてみると、線形写像というのは多くの場合、有限長の形あるデータとして保存してしまうことが可能になる。
そしてこの場合、「全角運動量」とそれに対応する「角速度」の対応表の全容がたった9個の実数とそれに対応する基底の情報から完全に復元できてしまうのである。
加えて、その逆写像というのもその最大9個のデータからなる行列の逆行列の計算によって求められるのである。
「剛体がどうなっているか \(\rho(\boldsymbol{x},t)\)」の情報があれば、「角速度を全角運動量に変換する線形写像」を計算することができ、その写像の表現行列の逆行列から「全角運動量を角速度に変換する線形写像」を計算することができる。
つまり、ある瞬間 \(t\) における剛体の全角運動量が与えられれば、その線形写像を使ってその剛体の角速度を求めることができる。
そしてこの「全角運動量から角速度を求める手続き」というのは剛体の衝突計算の際に要求されるものなのである。
但しここにはちょっとした問題がある。
見ての通りそれらの間の対応関係は、決して単純とは言えない。
複数の重積分とそこから求まる行列の逆行列を計算をする必要があるため、毎フレームこの関係式を使って計算を全て愚直にやる場合、オフライン用のシミュレータとしては動作するかもしれないが、リアルタイム (毎秒30-60回) としての用途には不向きである。
(3次元の場合、逆行列の計算について「ハイコスト」というイメージが湧かないかもしれないが)
では、ちゃんと物理学の理論に基づいたリアルタイムで動作する物理エンジンを組むことは諦めなければいけないのかといわれると、そういうわけでもない。
実はある工夫を加えることによってコストの高い積分計算や逆行列の計算をオフラインであらかじめ全て済ませてしまうことが可能となり、リアルタイムでの演算の際に必要になる計算を単純な行列積だけにしてしまうことが可能となる。
・第一歩: 時間依存する積分領域の問題を解消させる
やりたいことは時間 \(t\) 後の剛体の様子を、基準として考える初期状況からの変化として表し、その対応関係として得られる写像で引き戻しをかけてあげること。
次のような「初期位置 \(\boldsymbol{y}\) を使って、元々位置 \(\boldsymbol{y}\) にあった体積素片の時間 \(t\) 後の同じ体積素片の位置 \(\boldsymbol{y}'\) を求める写像」 \(q_t:\mathbb{R}^3\rightarrow \mathbb{R}^3\) を定義する。
\[ \begin{align} q_t(\boldsymbol{y}) &= \boldsymbol{r}_G(t) + (h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0)) \\ \end{align} \]
また、密度分布の時間変化も同様に初期分布 \(\rho_0(\boldsymbol{x})\) を与え、その分布を参照させるようにさせる。
\[ \begin{align} \rho(\boldsymbol{x},t) &= \rho_0(\boldsymbol{r}_G(0) + (h(t))^{-1}(\boldsymbol{x} - \boldsymbol{r}_G(t))) \\ \end{align} \]
ここで、
\(\boldsymbol{r}_G(t)\): 剛体の重心位置の運動
\(h(t)\): \(h(0)=id\), \(\det(h(t))=1\) であるような線形写像として表した剛体の回転運動
である。
数式で表すと
(変数変換って、つまりは引き戻し?)
\[ \begin{align} & \int_{\mathbb{R}^3}{(\lambda\boldsymbol{x}.(\rho(\boldsymbol{x},t)\cdot (\boldsymbol{x} - \boldsymbol{r}_G(t)) \times (\boldsymbol{\omega} \times (\boldsymbol{x} - \boldsymbol{r}_G(t)))))(\boldsymbol{x})d\boldsymbol{x}} \\ =& \int_{\mathbb{R}^3}{(q_t {\sf \, ⨟ \,} \lambda\boldsymbol{x}.(\rho(\boldsymbol{x},t)\cdot (\boldsymbol{x} - \boldsymbol{r}_G(t)) \times (\boldsymbol{\omega} \times (\boldsymbol{x} - \boldsymbol{r}_G(t)))))(\boldsymbol{y})\left\lvert J_{q_t}(\boldsymbol{y})\right\rvert d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(\lambda\boldsymbol{x}.(\rho(\boldsymbol{x},t)\cdot (\boldsymbol{x} - \boldsymbol{r}_G(t)) \times (\boldsymbol{\omega} \times (\boldsymbol{x} - \boldsymbol{r}_G(t)))))(q_t(\boldsymbol{y})) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(\lambda\boldsymbol{x}.(\rho(\boldsymbol{x},t)\cdot (\boldsymbol{x} - \boldsymbol{r}_G(t)) \times (\boldsymbol{\omega} \times (\boldsymbol{x} - \boldsymbol{r}_G(t)))))(\boldsymbol{r}_G(t) + (h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(\rho_0(\boldsymbol{y})\cdot ((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \times (\boldsymbol{\omega} \times ((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))))) d\boldsymbol{y}} \\ \end{align} \]
blah
ベクトル三重積の恒等式を使って変形すると
\[ \begin{align} =& {\lVert (h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0)) \rVert}^2 \boldsymbol{\omega} - (((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \cdot \boldsymbol{\omega})((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \\ =& {\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \boldsymbol{\omega} - (((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \cdot \boldsymbol{\omega})((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \\ \end{align} \]
ここからは少し抽象的な話になる。
テンソル積の普遍性より、双線形写像である標準内積 \((\cdot)\) は普遍双線形写像 \(\otimes\) で factor-through される一意的な線形写像 \(\mu:\mathbb{R}^3\otimes\mathbb{R}^3\rightarrow\mathbb{R}\) を引き起こす。また、テンソル積を線形空間の圏に積として与えることで得られるモノイダル閉圏でのカリー化をその線形写像に対して考えてあげることで、線形形式 \(\lambda[\mu]:\mathbb{R}^3\rightarrow\hom(\mathbb{R}^3,\mathbb{R})\) が得られる。
任意の内積 \(b\) から誘導されるベクトルを余ベクトルに変換する線形写像がまさにその写像となる。
本来は、「ベクトル側で起こっていること」と「余ベクトル側で起こっていること」を明確に区別して議論を行った方が良いのかもしれない。Euclid 幾何ではそれらは積極的に同一軸で扱われるが、多様体の理論に入るとそういうわけにはいかなくなる。(成分をシステマティックに操作することで、その辺の意味を無視して多様体の議論を進めていくこと自体は可能なのかもしれないが、それでは本質的な部分を見失いかねない。)
とはいえ、
ここで便利のため
\({\rm trans}(b,f)\) を「内積 \(b\) から誘導されるベクトル・余ベクトル間の同型射 \(i_b:V\rightarrow V^{*}\), \(i_b^{-1}:V^{*}\rightarrow V\) を使用して \(f\) の双対写像 \(f^{*}\) を通常のベクトル間の写像として使用できるようにした写像」を意味する略記として導入する。
つまり、
\[ {\rm trans}(b,f) = i_b {\sf \, ⨟ \,} f^{*} {\sf \, ⨟ \,} i_b^{-1} \]
明らかな性質として、
\[ {\rm trans}(b,f{\sf \, ⨟ \,} g) = {\rm trans}(b,g) {\sf \, ⨟ \,} {\rm trans}(b,f) \]
また \(b\) を標準内積として採用する場合は \(b\) を省略して記述することにする。
定義を見れば明らかであるが、ベクトルを写像の転置に入力する場合の振舞いは
1. そのベクトルを、まずそのベクトルから定まる線形形式に変換する
2. ベクトルから変換された線形形式を、\(f\) の双対写像を使って引き戻しを行う。
3. 引き戻しが行われた線形形式を、ベクトルに変換する。
ポイントとなるのは、写像の転置は、
"入力されたベクトルを指定の内積が定める対応関係をベースに双対空間側の軸に持っていき、そちら側の軸で処理を行った後に、またもとの軸に戻してきている"
ということである。
(..)
\(V\) の 余ベクトルを \(\hom (V,\mathbb{R})\) のベクトルと考えるのであれば、
\(V\) の ベクトルを \(\hom (\mathbb{R},V)\) のベクトルとして扱った方が、対称的でわかりやすくなるためこれを要所要所で採用する。
「双対写像を使って線形形式を引き戻す」といわれても、抽象的でわかりづらいと思うが、重要なのは、\(W\) のベクトル \(w:\mathbb{R}\rightarrow W\) の双対写像を用いて、\(v\) によって生成される線形形式 \(i_b(v)\) を引き戻すと、値 \(b(v,w)\) に対応する線形写像 \(\mathbb{R}\rightarrow \mathbb{R}\) が得られることである。
これらのことを踏まえて引き続き先ほどの数式を変形していく
まず
\[ \begin{align} & \rho_0(\boldsymbol{y})\cdot{\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \boldsymbol{\omega} \\ =& ((\rho_0(\boldsymbol{y})\cdot id) {\sf \, ⨟ \,} {\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id)(\boldsymbol{\omega}) \\ \end{align} \]
\[ \begin{align} & \rho_0(\boldsymbol{y})\cdot(((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \cdot \boldsymbol{\omega})((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \\ =& (((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \cdot \boldsymbol{\omega})((h(t))(\rho_0(\boldsymbol{y})\cdot\boldsymbol{y} - \boldsymbol{r}_G(0))) \\ =& ({\rm trans}(vec((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0)))){\sf \, ⨟ \,} (\rho_0(\boldsymbol{y})\cdot id) {\sf \, ⨟ \,} vec((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))))(\boldsymbol{\omega}) \\ =& ({\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0)){\sf \, ⨟ \,} h(t)) {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y})\cdot id) {\sf \, ⨟ \,} (vec(\boldsymbol{y} - \boldsymbol{r}_G(0)) {\sf \, ⨟ \,} h(t)))(\boldsymbol{\omega}) \\ =& ({\rm trans}(h(t)) {\sf \, ⨟ \,} {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y})\cdot id) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega}) \\ =& ((h(t))^{-1} {\sf \, ⨟ \,} {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y})\cdot id) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega}) \\ \end{align} \]
\[ \begin{align} =& \int_{\mathbb{R}^3}{\rho_0(\boldsymbol{y})\cdot ((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \times (\boldsymbol{\omega} \times ((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0)))) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{\rho_0(\boldsymbol{y})\cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \boldsymbol{\omega} - (((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0))) \cdot \boldsymbol{\omega})((h(t))(\boldsymbol{y} - \boldsymbol{r}_G(0)))) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(((\rho_0(\boldsymbol{y}) {\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id))(\boldsymbol{\omega}) - ((h(t))^{-1} {\sf \, ⨟ \,} {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y})\cdot id) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega})) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(((\rho_0(\boldsymbol{y}){\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id) - \rho_0(\boldsymbol{y}) \cdot (h(t))^{-1} {\sf \, ⨟ \,} {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} id {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega})) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(((h(t))^{-1} {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y}){\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - \rho_0(\boldsymbol{y}) \cdot {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega})) d\boldsymbol{y}} \\ =& \int_{\mathbb{R}^3}{(((h(t))^{-1} {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y}) \cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)))) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega})) d\boldsymbol{y}} \\ =& (\int_{\mathbb{R}^3}{((h(t))^{-1} {\sf \, ⨟ \,} (\rho_0(\boldsymbol{y}) \cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)))) {\sf \, ⨟ \,} h(t))d\boldsymbol{y}})(\boldsymbol{\omega}) \\ =& ((h(t))^{-1} {\sf \, ⨟ \,} \left( \int_{\mathbb{R}^3}{\rho_0(\boldsymbol{y}) \cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)))d\boldsymbol{y}} \right) {\sf \, ⨟ \,} h(t))(\boldsymbol{\omega}) \\ \end{align} \]
つまり、
\[ \begin{align} \boldsymbol{L}_{\boldsymbol{\omega}}(t) =& \left((h(t))^{-1} {\sf \, ⨟ \,} \left( \int_{\mathbb{R}^3}{\rho_0(\boldsymbol{y}) \cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)))d\boldsymbol{y}} \right) {\sf \, ⨟ \,} h(t)\right)(\boldsymbol{\omega}) \\ \end{align} \]
であり、
\[ \begin{align} I(t) =& (h(t))^{-1} {\sf \, ⨟ \,} \left( \int_{\mathbb{R}^3}{\rho_0(\boldsymbol{y}) \cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)))d\boldsymbol{y}} \right) {\sf \, ⨟ \,} h(t) \\ \end{align} \]
となる。ちなみにいうのが遅くなったが、この \(I(t)\)慣性モーメントと呼ばれる。
見ての通り、積分を取られるベクトル (この場合は線形写像) 値関数は時間に依存せず、あらかじめその部分の計算を済ませてしまうことができる。
コンピュータ上で物理エンジンを作るときは、剛体の姿勢を四元数として表現し、その四元数から適宜直交変換を生成させるようにするというアプローチを取ることが多い。つまり暗黙的に時間 \(t\) における剛体の回転 (\(h(t)\)) の情報をしっかりと持つことになるため、あらかじめ計算しておいた線形写像の両側からその回転を意味する線形写像を合成してあげることによって、即座に「その瞬間における全角運動量と角速度の間の対応関係」を線形写像として求めてしまうことができてしまうのだ。
さらに
\[ \begin{align} (I(t))^{-1} =& (h(t))^{-1} {\sf \, ⨟ \,} \left( \int_{\mathbb{R}^3}{\rho_0(\boldsymbol{y}) \cdot ({\lVert \boldsymbol{y} - \boldsymbol{r}_G(0) \rVert}^2 \cdot id - {\rm trans}(vec(\boldsymbol{y} - \boldsymbol{r}_G(0))) {\sf \, ⨟ \,} vec(\boldsymbol{y} - \boldsymbol{r}_G(0)))d\boldsymbol{y}} \right) ^{-1} {\sf \, ⨟ \,} h(t) \\ \end{align} \]
であるため、その逆向きの対応というのもあらかじめ計算してしておくことができる。