2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3次元座標変換における回転行列と転置行列の使い方

2
Posted at

複数軸回転と回転行列の扱い方について

座標系を回転させたいときの基本

座標系を回転させたい場合は、
点を「回転させたい方向と逆方向」に回転させればよい

これはこれまで述べてきた通りで、
実装上は「座標系を回す」のではなく
点に回転行列を掛けることで表現する。

複数回転する場合はどうするか

次に、座標系を複数回転させたい場合を考える。

結論から言うと、

回転時に使用した回転行列の転置行列を使えばよい

ということになる。

なぜ複数回転が必要なのか

ほとんどの3次元問題では、
1軸だけの回転で理想的な座標系に一致することは少ない

例外としては、
Yaw軸だけを揃えたい場合などが挙げられるが、
多くの場合は X・Y・Zの3軸回転 を考える必要がある。

ローカル系で物体を定義する理由

そもそも、なぜ物体はローカル座標系で定義するのか。

例として、鉛筆を考える。

  • ワールド系から見た鉛筆の長さ
  • 鉛筆の先端を基準にした鉛筆の長さ

どちらが扱いやすいかというと、
明らかに後者である。

鉛筆を投げようが、回転しようが、壊れようが、
鉛筆自身のローカル系で見た長さは常に一定だからだ。

一方で、ワールド系では姿勢が変わるたびに
数値が変化してしまう。

このため、

物体はローカル系で定義し、
必要に応じてワールド系へ変換する

という考え方が重要になる。

ローカル系とワールド系の変換

ローカル系をワールド系から定義する場合、
通常は X・Y・Zの3軸回転 を順番に行う。

このとき注意すべき点は、

  • 回転には順番がある
  • 元に戻すときは 回転させた順番の逆順で戻す

ということだ。

その結果、次のような形で扱うことになる。

  • X回転行列
  • Y回転行列
  • Z回転行列

を順番に掛け合わせ、
点(X, Y, Z)に適用することで、
ローカル系・ワールド系の行き来を行う。

回転行列を1つにまとめる考え方

毎回、

「座標系を回したから、点を逆に回す」

という操作を軸ごとに繰り返すことも可能だが、
実務的にはあまり現実的ではない。

そこで、通常は

  • ワールド系 → ローカル系 への変換用回転行列
    (ここでは World2Local とする)

をあらかじめ定義する。

転置行列で行き来する

回転行列は直交行列であるため、

逆行列 = 転置行列

が成り立つ。

そのため、

  • World2Local の転置行列を使えば
  • Local → World の変換が可能になる

関係式

  • World2Local × ワールド座標 = ローカル座標
  • World2Localᵀ × ローカル座標 = ワールド座標

このように、

  • 回転行列を1つ定義しておけば
  • 転置を使うだけで座標系を行き来できる

という、非常にシンプルな構成になる。

まとめ

  • 座標系は直接回さない
  • 点に回転行列を掛ける
  • 複数回転は1つの回転行列にまとめる
  • 行き来には転置行列を使う

この考え方を押さえておくと、
3次元座標変換で迷うことがかなり減る。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?