gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

3Dオブジェクトの回転操作

2021-10-10 08:04:01 | ブログ
 3Dオブジェクトの回転操作、特に回転軸を任意の方向に設定する必要があるような回転操作について語る。

 シンプルな3Dオブジェクトの一つとして、正六面体がある。このオブジェクトの中心点を原点Oとするような(x,y,z)座標系を設け、頂点P1の座標を(1,1,1)とする。原点Oと点P1を結ぶ方向にz’軸をとり、回転軸とする。回転軸の方向ベクトルは、(1/SQRT(3),1/SQRT(3),1/SQRT(3))と表せる。

 次に、x’軸とy’軸各々の方向ベクトルを設定することになる。方向余弦で表す6個の未知数があるのに対して、5個の等式しか存在しない。つまり、x’,y’軸各々についての正規化条件と、x’,y’,z’軸間の3個の直交条件との5個の等式しかなく、x’,y’軸の方向ベクトルの設定には、自由度があり、一意には定まらない。

 例えば、x’軸の方向ベクトルの3つの要素のうち2つの値が等しいと置けばよいだろう。ここでは、x'軸の方向ベクトルを(1/SQRT(6),1/SQRT(6),-2/SQRT(6))に、y'軸の方向ベクトルを(1/SQRT(2),-1/SQRT(2),0)に設定したものとする。

 次に、座標変換の公式を用いてオブジェクト上の点の座標(x,y,z)を回転座標系の座標(x’,y’,z’)に変換する。例えば頂点P1の座標(1,1,1)がP1’(0,0,SQRT(3))に変換される。同様に頂点P5(1,1,-1)がP5’(2SQRT(6)/3,0,1/SQRT(3))に、面上の点Q(1,0,0)がQ’(1/SQRT(6),-1/SQRT(2),1/SQRT(3))に変換される。

 さらに、点P5’および点Q’を回転軸のまわりに角度t(シーター)だけ回転させたときの点P5’’およびQ’’の座標を計算すると、P5’’は(2SQRT(6)cost/3,2SQRT(6)sint/3,1/SQRT(3))となる。Q’’は、
   x’’=cost/SQRT(6)+sint/SQRT(2)
y’’=sint/SQRT(6)-cost/SQRT(2)
z’’=1/SQRT(3)
となる。

 以下、4元数を用いる三次元空間における回転操作について述べる。4元数とは、19世紀の数学者ハミルトンが開拓した数体系のことである。高校数学では4元数を扱わないし、大学の理工系学科でも4元数を扱わないと思われるので、この扱いはマニアックにも感じられる。しかし、衛星の姿勢制御の計算などに実際に4元数が使われているようであるし、参考文献にはなぜか「高校数学の美しい物語」というサブタイトルも付いているので、あながち無意味なことでもないだろう。

 4元数は、次の式
   q=a+bi+cj+dk (a,b,c,dは実数)
によって定義される。ここで
   i^2=j^2=k^2=-1; jk=-kj=i; ki=-ik=j; ij=-ji=k
として乗法が定義されている。

 qと共役な4元数をq_と記すと、
   q_=a-bi-cj-dk
と定められる。なお4元数の詳細については、参考文献などを参照されたい。

 4元数の虚数i,j,kの代わりに、4元数の虚数c,c’,c’’を導入し、上記事例の場合のz’軸の方向ベクトルをi,j,kを用いて次のように定義する。
   c=i/SQRT(3)+j/SQRT(3)+k/SQRT(3)

 P5’ベクトル(2SQRT(6)/3,0,1/SQRT(3))を次の4元数と同一視する。
   v=c/SQRT(3)+2c’SQRT(6)/3

 また、Q’ベクトル(1/SQRT(6),-1/SQRT(2),1/SQRT(3))を次の4元数と同一視する。
   v=c/SQRT(3)+c’/SQRT(6)-c’’/SQRT(2)
 ここで
   c^2=c’^2=c’’^2=-1; c’’c=-cc’’=c’; cc’=-c’c=c’’; c’c’’=-c’’c’=c
となり、i,j,kが持っていた関係がそっくりc,c’,c’’に受け継がれることになる。ここで、c,c’,c’’間の直交関係は、x’,y’,z’軸間の直交関係を受け継ぐことになる。したがって、回転操作ではi,j,kに関する演算は忘れて、c,c’,c’’に関する演算だけを考慮すればよい。

 4元数vをqが定める演算によって回転させると、v’=qvq_になる。

 頂点P5’についてこの回転計算を行うと、結果は、
   v’=c/SQRT(3)+2c’SQRT(6)cost/3+2c’’SQRT(6)sint/3
となって、上記計算結果に一致することを確認できる。

 また、点Q’についてこの回転計算を行うと、結果は、
 v’=c/SQRT(2)+(cost/SQRT(6)+sint/SQRT(2))c’+(sint/SQRT(6)-cost/SQRT(2))c’’
となって、上記計算結果に一致する。

 なお、自然科学カフェでスタッフをしておられる鵜沼さんから4元数の使い方についてご指導いただきました。ありがとうございます。

 参考文献
 インターネット記事「四元数と三次元空間における回転」

最新の画像もっと見る

コメントを投稿