粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

3D座標変換の勘所メモ①

タイトルが非常に付けづらかったので埋もれないようにキーワードだけ並べました。

問題設定

2つの座標系があった時,1つの座標系から見て位置^1t_{1p}にある点Pがもう片方の座標系からはどういう値に見えるかという問題を考えることがままあります。 例えばカメラの撮像系等でこのような話はよくありますね。

図で示すと以下のような感じです。

f:id:ossyaritoori:20190221171254p:plain
手書きですまない

毎回こんな図を書いて確認してしまうので記事として書いて答え合わせにしようと思います。

前提:ベクトルの記法について

どの座標系からみたベクトルかを左に添え字で書いています。そこそこPopularな記法だと思います。

例えば^2t_{1p}はベクトルt_{1p}を座標系2の上で解釈したものということにします。

また,^1_2 R^1_2 tはそれぞれ座標系1から2への回転と並進の変位を表しています。教科書では1,2等の数字ではなく記号で書かれることが多いですね。

導出

まず座標系1からみた「座標系2to点P」のベクトル^1t_{2p}

^1t_{2p}=^1t_{1p}-^1_2 t

のようになります。 このベクトルを座標系2から見た時は,回転量^1_2 Rの分だけ逆に回せばいいので(2次元座標で考えてみればすぐわかる)

\begin{align} ^2 t_{2p} = ^1_2 R^\top {}^1 t_{2p} \end{align}

これを先程の式と合わせると

\begin{align} ^2 t_{2p} = ^1_2 R^\top {}^1 t_{1p} - ^1_2 R^\top {}^1_2 t \end{align}

となります。

答え

結局これを以下のような同次表現に落としたとき,

\begin{align} ^2 t_{2p} = [R | t] \begin{bmatrix} {}^1 t_{1p} \\ 1 \end{bmatrix} \end{align}

R,tと「座標系1と2の関係を表すR,t」との関係は \begin{align} R = ^1_2 R^\top \\ t = - ^1_2 R^\top {}^1_2 t \end{align} という風になるわけです。この関係式はちょうど逆もしかりになります(当たり前)。

画像系でよくこのRとtを求めることがありますがGlobal座標でのカメラの位置に変換するにはこのような手順を踏む必要があるのを忘れないように。

余談:はてなブログTex記法を書く方法

以下の呪文を冒頭で唱えた後に,

<p style="display: none;">[tex: ]</p>

\begin{align}で囲むなどすれば通常とほぼ同様に書くことが出来ます。ただし,^や_などの文字には\でエスケープが必要になるらしく,特にt_{1p}などの複数の文字を配置したい場合にはt\_{1p}のように書いたほうが安定するようです。

[参考サイト]

はてなブログで数式が綺麗に書けるTeXの便利ワザ for 見たままモード - cBlog

追記: 最近同じことを書いているサイトを見つけました。No more 車輪の再発明。金言ですね。私はやってしまったわけですがw mem-archive.com