• 締切済み

ある空間上のベクトルをある単位ベクトル周りに回転する方法(3x3行列)

ある空間上のベクトルをある単位ベクトル周りに回転する方法(3x3行列)を探しており、 以下の「任意軸に対する回転行列」のサイトにたどり着きました。 http://www.laksmido.com/3010.html 大変申し訳ありませんが、この行列の導出方法を教えていただけないでしょうか? (理由: 現在、上記の単位ベクトル周りの回転後のベクトルを算出するプログラムを  VBAで書いていますが、数学的な裏づけ(理解)がしたかったため。) 高校・大学教養レベルの線形代数のレベルでも導出できますか? ちなみに当方、大卒(物理学科)です。 以上、よろしくお願いします。 ちなみに、作者殿に半月前にメールで問い合わせたのですが、回答頂けませんでしたので こちらに質問しました。

みんなの回答

  • muturajcp
  • ベストアンサー率78% (508/650)
回答No.3

v=t(v_x,v_y,v_z) (t()は()の転置行列とする) |v|^2=(v_x)^2+(v_y)^2+(v_z)^2=1 v_x=cosψcosθ v_y=cosψsinθ v_z=sinψ となる ψ,θ がある u=t(-sinθ,cosθ,0) w=t(-v_z*cosθ,-v_z*sinθ,cosψ) とすると (v,u)=(v,w)=(u,w)=0 |u|^2=|w|^2=|v|^2=1 v,u,w は互いに垂直な単位ベクトルとなる A=(v,u,w) 任意のベクトルpに対して p=(p,v)v+(p,u)u+(p,w)w t((p,v),(p,u),(p,w))=tAp v軸のまわりに点 p を α 回転した点を q S=((1,  0,   0),   (0,cosα,-sinα),   (0,sinα, cosα)) R=AS(tA) とすると q=(p,v)v+((p,u)cosα-(p,w)sinα)u+((p,u)sinα+(p,w)cosα)w=Rp R=(v_x,-sinθ,-v_z*cosθ)(1,  0,   0)(    v_x,   v_y,  v_z)  (v_y, cosθ,-v_z*sinθ)(0,cosα,-sinα)(   -sinθ,  cosθ,  0) (v_z,  0,   cosψ)(0,sinα, cosα)(-v_z*cosθ,-v_z*sinθ,cosψ) =(  (v_x)^2*(1-cosα)+cosα,v_x*v_y*(1-cosα)-v_z*sinα,v_z*v_x*(1-cosα)+v_y*sinα) (v_x*v_y*(1-cosα)+v_z*sinα,  (v_y)^2*(1-cosα)+cosα, v_y*v_z(1-cosα)-v_x*sinα) (v_z*v_x*(1-cosα)-v_y*sinα,v_y*v_z*(1-cosα)+v_x*sinα,   v_z^2*(1-cosα)+cosα)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

方法はいろいろあるとは思うけど、その1つとして。 点V(Vx,Vy,Vz)をZ軸で回転させて、YZ平面上に移動させる回転行列をU、 さらにそれをX軸で回転させて、Z軸上に移動させる回転行列をVとします。 また、Z軸でθ回転する回転行列をRとします。 そうすると、ベクトル(Vx,Vy,Vz)を軸として回転する回転行列Tは、 T=U’V’RVU となります(U’、V’はU、Vの逆行列)。 U=((cosφ, -sinφ, 0), (sinφ, cosφ, 0), (0, 0, 1)) U’=((cosφ, sinφ, 0), (-sinφ, cosφ, 0), (0, 0, 1)) V=((1, 0, 0), (0, cosψ, -sinψ), (0, sinψ, cosψ)) V’=((1, 0, 0), (0, cosψ, sinψ), (0, -sinψ, cosψ)) R=((cosθ, -sinθ, 0), (sinθ, cosθ, 0), (0, 0, 1)) cosφ=Vy/√(Vx^2+Vy^2) sinφ=Vx/√(Vx^2+Vy^2) cosψ=Vz sinψ=√(Vx^2+Vy^2) なので、これからTを計算すれば求めるものになるはずです。

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.1

http://www5d.biglobe.ne.jp/~noocyte/Programming/Geometry/3DRotation.html 検索してみた. 外積を使って,二次元のケースに落とすのがポイントです. このサイトはベクトルで表現しているけど それを成分に直して行列の形にすれば所望の回転行列がでてくるでしょう 向きについては適宜調整してください.

関連するQ&A