多次元の回転に関してご紹介した 前回のページ のプログラムは反復解法によるもので、 特に、奇数次元の最初の軸を決める部分の反復回数はかなりのものになっていました(プログラムの71~75行目)。 この反復回数は、一定の範囲までの次元で十分と思われる精度を得るために決めたものですが、実は三次元に関しては最初の一回だけで正確な値を得ます。 なお、ここで得られる L の最初の列は、回転の軸に相当する単位ベクトルになっています。
逆に、軸が見つかれば、この第一ステップで求める L は、この軸を第一の列成分とするテキトーな直交行列とすることができます。 また、L が知れれば、O = L ・ M ・ L-1 なのですから、第一ステップの M を求めることもできます。 してみると、軸がカギということになります。 前々回のページ で回転の軸を見つける考え方をご説明しましたが、それをプログラムとしてご紹介することにしました。
回転の軸を見つける解法を良く考えてみたところ、思い付いたことは次のイメージで説明できます。
回転させては中点を求める操作を2回行い、最後にもう1回、回転させます。 図の青い三角形とオレンジの三角形は相似になっているので、二つの点を延長した外分によって軸に属する一点を知ることができます。 あるいは、最後の回転はしなくても、青と緑の相似比を二乗すれば青とオレンジの相似比が得られます。
この方法によるこのページのプログラムでは、確かに三次元に限れば反復なしで解は得られます。 五次元以上では一度では求まりませんが、かなりの回数を反復すれば、求まることは求まるようでした。 五次元以上の事情というのはなかなかイメージしづらいですが、こんな感じでしょうか?
(最初のベクトルの設定に)乱数を使うなど、面倒な部分もあり、計算の手間において特に優れる方法ではないかも知れませんが、理解し易い、面白い方法だとは思います。