- ベストアンサー
3次元座標を原点中心に回転したい
任意のゼロでないベクトル(a,b,c)を原点中心に回転し、z軸に合致させるとする。同じ回転移動を3次元座標上の任意の点(x,y,z)に対して行った時の移動後座標が知りたいのです。 計算と結果を教えて下さい。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
A No. 1 です。補足。 「回転行列」 http://www.cg.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/tech07.html ロドリゲスの公式もあります。
その他の回答 (8)
- alice_44
- ベストアンサー率44% (2109/4759)
A No.6 「お礼」欄の「ひとつ疑問」について。 二段階移動の結果は、一発移動の結果とは異なります。 一致することが保証されるのは、(a,b,c) の定数倍 の点だけです。なぜ異なるのかの理由は、A No.8 に あるとおりですね。 一方、一発移動のみに制限すると、回転は一意に決まり、 A No.2 No.6 に書いたようなものになります。 二段階移動の結果は、この回転に、回転軸まわりの捻り を加えたものになります。
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
>2段階移動になってます。 >この結果は一発移動とは異なる結果なのでしょうか? 異なります。 例えば正午に日本を北極に移動させる地球の回転と、夕方まで待って日本を北極に移動させる回転では 北極での太陽に対する日本の向きが違いますよね。 基礎知識としてちょっと補足しておくと 1) 3次元で原点が移動しない回転は自由度が3。つまり3このパラメータで回転を完全に指定できる。 2) 回転は常に回転軸を持つ。つまり回転で不動な点が必ず存在する。 3) 複数の回転の組み合わせは回転 4) 回転行列は直行行列 5) 回転軸は回転行列の唯一の実固有値(=1)の固有ベクトルと並行(回転角≠0 つまり単位行列を除く)。
お礼
ありがとうございます。 3次元で回転移動の経験がないのでびっくりしました。
- alice_44
- ベストアンサー率44% (2109/4759)
A No.2 を実装してみる。 回転軸は、第二軸にするより、第三軸へ移したほうが 回転の向きが解りやすいかな? (a,b,c) 方向の単位ベクトルを v1 = (α,β,γ) = (a,b,c)/√(a^2+b^2+c^2)、 z 軸の単位方向ベクトルを z1 = (0,0,1) と置き、 p = v1×z1 = (β,-α,0), p1 = p/|p| = (β,-α,0)/√(α^2+β^2), q1 = p1×z1 = (-α,-β,0)/√(α^2+β^2), と定義すると、 q1,z1,p1 をこの順に第1,2,3基底ベクトルとして 正規直交基底が作れる。 問題の回転は、この基底上の成分表示で 第3軸を回転軸とする回転だから、 R = cosθ -sinθ 0 sinθ cosθ 0 0 0 1 を表現行列とする一次変換で表される。 ここに現れる θ は、 sinθ = |p| = |v1×z1|, cosθ = v1・z1 で求められる。 特に sinθ の正負と関連して、 上記の q1,z1,p1 がこの順番に並んでいることが重要。 この一次変換を標準座標の上で成分表示するには、 q1,z1,p1 をこの順に第1,2,3列とする行列 T によって 座標変換した TR(T^-1) を、表現行列とすればよい。 (x,y,z) の移動先は、 TR(T^-1)(x,y,z)^t で表される。 ただし、T^-1 は T の逆行列、 (x,y,z)^t は (x,y,z) を転置した列ベクトル。
お礼
詳細な回答をありがとうございます。 大変申し訳ありませんが、大学数学はまったく駄目です。一応理系大卒ですが。 ベクトルをxーy平面に正射影した方向をX軸、Z軸はもとのz軸と同じになるよう(X,Y,Z)座標系を設定し、XーZ平面内で回転移動させて求めました。もちろん元の(x,y,z)座標系との関係式は回転移動の式で表しました。 ひとつ疑問があります。 他回答で、回転方法で結果が変わるとの説明がありました。そこで回転移動は(X,YZ)座標での一回だけ、(x,y,z)座標との関係式を求めるだけで、これは移動でないよーみたいなセコイ解法にしました。ところが、定式化すると、どうみても「ベクトルをz軸の回りで回転させxz平面内に移動した後、zx平面内で回転移動して軸に合わせた」2段階移動になってます。 この結果は一発移動とは異なる結果なのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
「回転」するだけでは長さは変わりません>#4.
- oignies
- ベストアンサー率20% (673/3354)
計算というほどの計算はいらないですが・・・ (a.b.c.)を原点を中心に回転してZ軸に合致させるとすると (0,0,c)になりますよね。(Z軸に一致ということは、X座標Y座標がともに0 ということなので) ですので (x、y、z)に同じ回転をくわえると(x-a,Y-b,0) となります。あえて説明を加えるとすれば aがゼロになる変化は、a-a bがゼロになる変化は、b-b だからです。
お礼
ありがとうございます。
- oignies
- ベストアンサー率20% (673/3354)
計算というほどの計算はいらないですが・・・ (a.b.c.)を原点を中心に回転してZ軸に合致させるとすると (0,0,c)になりますよね。(Z軸に一致ということは、X座標Y座標がともに0 ということなので) ですので (x、y、z)に同じ回転をくわえると(x-a,Y-b,0) となります。あえて説明を加えるとすれば aがゼロになる変化は、a-a bがゼロになる変化は、b-b だからです。
- alice_44
- ベストアンサー率44% (2109/4759)
(a,b,c) 方向の単位ベクトルを v、 (0,0,1) を z と置く。 問題の回転は、 z, v×z, v×z×z を軸とする直交座標上で、 第二軸を回転軸とする回転移動として表される。 回転角 θ は、|v×z|=|sinθ| で求まる。 座標軸を軸とする回転は、容易に行列で表現される。 それに冒頭の座標変換を施せば、 標準座標上での表現行列となる。
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
この条件だけでは回転が一意に決まりませんが、回転軸を(a,b,c)とz軸の外積、回転量は内積で求めれば回転が一意に定まります。後はロドリゲスの公式で回転行列を求めることができます。
お礼
ありがとうございます。 回転が一意に決まらない、え?まさかと思って図形を思い浮かべましたが、確かにその通りでした。要望はベクトルとz軸を含む平面内での回転です。こうすれば一意に決まると思います。
お礼
ありがとうございます。 どえらい簡単な表現ですね。自分の計算と比べて見ます。公式でのIは単位行列ですか?また、Rは何の行列ですか?
補足
Rは書いてましたね。