• ベストアンサー

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

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

noname#202167
noname#202167

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

  • ベストアンサー
  • 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

  • 3次元ベクトルをある軸ベクトルで回転させたい

    3次元ベクトルの求め方を教えてください。 下記図のように始点を軸ベクトルでθ(度)だけ回転したときの?の位置を求めたいのです。 これはどのような計算方法になるのでしょうか?なかなか思いつかなくて非常に悩んでいます。 アドバイスや回答をいただけたら助かります。よろしくお願いします。

  • 回転した座標軸と一致させるための回転軸と角度の算出

    こんにちは。お知恵をお借りしたく質問致します。 プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。 ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。) 図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。 また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)です。回転方向は、ベクトルの向きに時計回り…右ネジの法則みたいな感じです。 x軸から見たXの角度(θxX), y軸からのX(θyX), z軸からのX(θzX) 同様にx軸から見たY(θxY),θyY,θzY、θxZ,θyZ,θzZ といったように、それらの角度(コサイン値)は分かっています。 (=xyz座標からみたXベクトルの方向余弦、Yベクトルの方向余弦、Zベクトルの方向余弦が分かっている。) z軸とZ軸の外積を取ったベクトルを回転軸として、θzZが分かっているのでその角度で回転することでZ軸は一致しますけど、XY軸は合いません。(当然ですが…) そのXY軸を合わせるためにまた回転するというのも遠回りで、任意の軸1本を中心に何度か回転するだけ(上記関数を1度使用するだけ)で、必ず向きが一致する解があると思うのですが、その任意軸と角度を算出する方法が分かりません。 一般にどういう計算をするのでしょうか。アドバイスいただければ幸いです。 なお、上記関数を用いない方法でも構いません。 「X軸(Y軸、Z軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。 その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。 どうかよろしくお願いいたします。

  • ベクトルの回転について

    はじめまして。 以下のような問題について大学1年生の弟から質問されたのですが、 答えに自信がありません。どうか皆様のお力をお貸しください。 三次元空間上にベクトルA(ax,ay,az)、B(bx,by,bz)がある。 このAがBと平行になるような計算をしたい。 自分なりの考えは以下の通りです。 1.z座標を無視して、xy平面上のベクトルとして考え、成す角θzを求める θz=ArcCos{<A,B>/|A||B|} |A|=√ax^2+ay^2 |B|=√bx^2+by^2 <A,B>=ax×bx+ay×by 2.x座標を無視して、xy平面上のベクトルとして考え、成す角θxを求める θx=ArcCos{<A,B>/|A||B|} |A|=√ay^2+az^2 |B|=√by^2+bz^2 <A,B>=ay×by+az×bz 3.y座標を無視して、xy平面上のベクトルとして考え、成す角θyを求める θy=ArcCos{<A,B>/|A||B|} |A|=√ax^2+az^2 |B|=√bx^2+bz^2 <A,B>=ax×bx+az×bz 4.z軸回転させる。このとき、z軸回転させた座標をzAx、zAyとする。 zAx=ax Cosθz-ay Sinθz zAy=ax Sinθz + ay Cosθz 5.次にx軸回転させる。このとき、x軸回転させた座標をxAy、xAzとする。 xAy=zAy Cosθx-az Sinθx  xAz=zAy Sinθx + az Sinθx 6.次にy軸回転させる。このとき、y軸回転させた座標をyAx、yAzとする。  yAz=xAz Cosθy-zAx Sinθy yAx=xAz Sinθy + zAx Cosθy 7.求まったyAx、zAy、yAzを成分とする、ベクトルはBと平行である。(終了) うろ覚えですが、軸回転は順番によって全く違った回転をしてしまうというのを昔勉強したような気がするのですが、今回の場合は特にそういった問題は関係ないのでしょうか? また、それぞれの平面ごとになす角を求め、3つのなす角を使った回転を行ないましたが、 θ=ArcCos{<A,B>/|A||B|} |A|=√ax^2+ay^2+az^2 |B|=√bx^2+by^2+bz^2 <A,B>=ax×bx+ay×by+az×bz といった風に、一気に求めたθを用いて回転させる方法はありませんでしょうか? (AとBの外積で出てくる値が回転軸になるような・・・・?) 宜しくお願いします。

  • 任意の軸に回転するための角度を知りたい

    右手系の直交座標系で基準のベクトル(0,0,1)があったとします。 x軸周り、y軸周り、z軸周りの順番で基準のベクトルを回転してベクトル(x,y,z)にする時、z軸周りの回転角度は決まっていて、残りのx軸とy軸をそれぞれ何度回せばいいのか計算する方法を教えて下さい。

  • 角速度のベクトルの方向は何故回転軸なんでしょうか

    角速度のベクトルの方向は、回転軸になるというのが納得できません。 例えば、極座標系で、ある粒子がZ軸を中心に右周りに半径を変えず回転していたとして、 位置ベクトルが(s,0,z)だとして、 速度ベクトルは(ds/dt, s*(dθ/dt),dz/dt)=(0,s*(dθ/dt),0)になると思うのですが、 この点からしてもZ軸については速度が0のはずです。 粒子が動いているのは勿論θ方向なので、直感的に(0,Ω,0)がしっくりきます。 なのに、速度ベクトルΩが何故(0,0,Ω)になってしまうんでしょうか。。 どなたか分かる方教えてください。よろしくお願いします。

  • 3次元以上の直交変換(回転)を、2つのベクトルから求める方法。

    3次元以上の直交変換(回転)を、2つのベクトルから求める方法。 ユークリッド空間上で、例えば、ある2つのベクトルa,bが、 a = [1,0,0]; b = [0,1,0]; のように与えられたとき、aベクトルをbベクトルへ「視覚的に」重ね合わせる直交変換を探しています。 つまり、 b = Xa を満たす直交変換(回転行列)Xの求め方を探しています。 私のイメージとしては、3Dのポリゴンで描かれた自動車をマウスでグリグリ回転させるときに、正面を向いた状態から真横に向ける回転になるでしょうか。 無論、求める直交変換が一意に定まらないことは承知しております(ベクトルと垂直な面方向の自由度など)。また、sinやcosを使う方法は存じ上げておりますが、現在研究中のテーマに不適であるため、あえて利用しません。 どうにか、a,bの成分のみで直交変換を求める(または、直交変換の条件を決定する)一般的な方法があればご教授願います。 また、3次元よりも大きな場合に、例えば、 a = [1,0,0,0]; b = [0,1,0,0]; としたときの、aからbへの回転行列は自由度が高いのですが、 b = Xa を満たす回転行列Xをa,bを用いてどのように求めることができるのでしょうか。 支離滅裂な説明になっているかもしれませんが、もしご存知であればその参考となるURL等をご教授下さい。

  • ベクトルについて・・・。

    ベクトルA=(a,b),B=(c,d)について A+B=(a+c,b+d) という代数的計算で導かれる定義についてなのですけど, なぜこれが座標軸に無関係であることを確かめるひつようがあるのですか。 成分表示が座標軸に依存するからですか。

  • 線形代数学 ベクトル(0,1,1)を軸とするθの回転を与える行列

    線形代数学を最近学び始めて、いきずまってしまいました。 任意のベクトル(でいいのかな)を軸とするθの回転を与える行列を求める問題です。 問題として 3次元ユークリッド空間に直交座標x,y,zを入れて考える。 (1)x軸の周りのπ/4だけの回転を表す行列Qを求めよ。 (2)ベクトル(0,1,1)を軸とするθの回転を与える行列Q(-1)Rz(θ)Qを計算せよ。  ※Q(-1)はQの逆行列です。Rz(θ)はz軸の周りのθ回転の行列です。 (2)がわからなくて困っています。 行列Q(-1)Rz(θ)Qという形は対角化の形に似ているのですが、 これは、対角化を考えた時に、ベクトルが(0,1,1)がx軸と直角に交わっているからQが直行行列になるのかな~とか、思うのですが、 θ回転するのに対角行列が出てくる意味が少しわからないので、 (2)でなぜ行列Q(-1)Rz(θ)Qになるのか、解説をお願いします。 ちょっとわかりにくい文章になってしまってるかもしれませんが、 申し訳ありません・・・。

  • ベクトルの90度回転について

    このサイト http://www.deqnotes.net/acmicpc/2d_geometry/using_vectors の下段の方に「Normal vectors」という図があるのですが、この図で ベクトル a=(x,y) の法線ベクトル、つまりベクトル a を90度回転させたベクトル、であるベクトル a'=(-y,x) となっていますが、 どうもa'はaをy軸について対象に写像しているようにしかみえなくて、 a'=(-y,x) となることになっとくがいきません。 図的にいってどういう風に写像しているんでしょうか? 過去の質問 http://oshiete1.goo.ne.jp/qa2994956.html の回答では、数式的には納得いっても、図的には納得いきませんでした。 回答よろしくお願いします。

  • 回転軸と回転物の固定方法

    回転軸と歯車などの回転物との固定方法について 教えてください。 ・キーで固定する ・回転軸をDカット止めねじで押さえる  : などはよく見受けられますが・・・ 回転軸径方向に雌ねじタップをきって、回転物には 座ぐり孔として、ねじ固定した構造はあまり見受けません。 なにか私の知らない不都合があるのでしょうか? 現在、Dカット+止めねじとしていますが、 Dカットの場合、止めねじが垂直に当たっていないと 緩んでしまいます。 加工工数を考慮すると、軸にタップを切って ねじ止めでもよいと思いますが、いかがでしょう??