• ベストアンサー

3Dベクトルを3Dの軸ベクトルに沿って回転させる方法

3Dベクトルを3Dの軸ベクトルに沿って回転させる方法 ベクトルA(1, 1, 1)をベクトルB(1, 0, 0)を軸に たとえば90度(時計回りに)回転させたいと思った場合 どう計算すれば良いのでしょうか・・?

質問者が選んだベストアンサー

  • ベストアンサー
  • info22_
  • ベストアンサー率67% (2650/3922)
回答No.2

参考URL http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%A2%A5%D5%A5%A3%A5%F3%CA%D1%B4%B9_3DCG のアフィン変換で、X軸中心に「-90°」回転する回転行列Mを使えばいいでしょう。平行移動を伴わなければ(4列目と4行目を除いた)3行*3列の行列でもいいですね。 A:(1,1,1) θ=-90°、sin(-90°)=-1,cos(-90°)=0なので M: (1,0,0) (0,0,1) (0,-1,0) 従って、 回転後のベクトルC:(x,y,z)は C=A*M で計算できます。 C:(x,y,z)= (1,1,1)* (1,0,0) (0,0,-1) (0,1,0) =(1,1,-1) と得られます。 参考URL http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%A2%A5%D5%A5%A3%A5%F3%CA%D1%B4%B9_3DCG http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%A2%A5%D5%A5%A3%A5%F3%CA%D1%B4%B9_3DCG

noname#202167
質問者

お礼

ご回答ありがとうございます。

その他の回答 (3)

  • Mr_Holland
  • ベストアンサー率56% (890/1576)
回答No.4

 高校数学のレベルで求めてみます。  「ベクトルA(1, 1, 1)をベクトルB(1, 0, 0)を軸に回転」させることは、ベクトルAをx軸を軸にして回転させることに相当します。  いま、ベクトルAの始点を原点に合わせると、ベクトルAの終点は x=1 の平面上にあります。  そこで、ベクトルの回転を x=1 の平面上で考えます。  この平面を+xから-xの方向に見ます。  このとき、ベクトルAの終点は 座標(y、z)=(1,1)にあります。  ここで、この点を時計回りに90°回転させるのですから、 平面:x=1 上の原点(0,0)を中心に -90°回転させることになります。  原点を中心に-90°回転させる変換は、次の1次変換で得られます。    y’=+z、  z’=-y  従って、ベクトルAを回転させたベクトルA’の平面:x=1 上の座標は(y’、z’)=(1,-1)にあります。  ベクトルA’の終点は平面:x=1上にあることから、ベクトルAを回転させたベクトルA’は 次のようになります。   ベクトルA’=(1,1,-1)

noname#202167
質問者

お礼

ご回答ありがとうございます。

  • alice_38
  • ベストアンサー率43% (75/172)
回答No.3

回転は一次合同変換なので、 アフィン変換まで話を拡げる意味は疑問。 特にポイントは、平行移動の有無よりも、 斜行しない変換の合成であることによって、 最終的な合成変換を、途中の変換で幾何的に 解釈できるところにある。 人間は、CADソフトと違い、計算する前に 見通しを得たほうがよい。

noname#202167
質問者

お礼

ご回答ありがとうございます。

  • alice_38
  • ベストアンサー率43% (75/172)
回答No.1

つい先日、ほぼ同じ質問に回答しました。 このサイトの QNo.5590811 にあります。 ご参考になれば幸い。

noname#202167
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

専門家に質問してみよう