Hatena::ブログ(Diary)

ishikawashの学習ノート RSSフィード

2008-08-23

[] 射影ベクトルと外積

久しぶりに「ゲームプログラミングのための3Dグラフィックス数学」から。ぶらぶらと本屋に行ったついでに、また立ち読みしてきました。○ュンク堂書店さん、本当に冷やかしばかりですみません...。

§

射影ベクトルと外積の計算は線形変換なので行列で表現できます。あらためて指摘されて別に驚くことでもないですが、内積と外積が入り交じった行列計算を行う場合に便利です。例えば、外積を使って任意軸周りの回転行列を求める時など応用できます。

射影ベクトルの表現行列

ベクトルPからベクトルQへの射影ベクトルP'は

 ¥vec{P’} = ¥frac{¥vec{P}¥cdot¥vec{Q}}{|¥vec{Q}|^{2}} ¥vec{Q}

と求められます。これをPからP'への線形変換とみなすと、

 ¥vec{P’} = ¥frac{1}{|¥vec{Q}|^{2}} ¥begin{pmatrix}  {Q_{x}}^{2} & Q_{x}Q_{y} & Q_{x}Q_{z} ¥¥ Q_{x}Q_{y} & {Q_{y}}^{2} & Q_{y}Q){z} ¥¥ Q_{x}Q_{z} & Q_{y}Q_{z} & {Q_{z}}^{2} ¥end{pmatrix} ¥begin{pmatrix}  P_{x} ¥¥ P_{y} ¥¥ P_{z}  ¥end{pmatrix}

外積の表現行列

ベクトルPとベクトルQの外積は

 ¥vec{P}¥times¥vec{Q} = ¥begin{pmatrix} P_{y}Q_{z} - P_{z}Q_{y} ¥¥ P_{z}Q_{x} - P_{x}Q_{z} ¥¥ P_{x}Q_{y} - P_{y}Q_{x} ¥end{pmatrix}

ですが、これをベクトル・行列の積に分解すると、

 ¥vec{P}¥times¥vec{Q} = ¥begin{pmatrix}  0 & -P_{z} & P_{y} ¥¥ P_{z} & 0 & -P_{x} ¥¥ -P{y} & P_{x} & 0 ¥end{pmatrix} ¥begin{pmatrix}  Q_{x} ¥¥ Q_{y} ¥¥ Q_{z}  ¥end{pmatrix}

§

まだ本書を買ってもいない自分が言うのもなんですが、これは確かに良い本ですね。CGに必要な数学の知識が網羅されていると同時に説明も丁寧。分かりやすさは読者のレベルに応じて個人差があると思いますが、これからCGを学ぼうとする方にお勧めします。私も就職できた暁には(それはいつ?)、ぜひ購入してじっくり読んでみたいと思います。ところで、本書は第2版(原書)が出版されてから既に5年も経っていますが、第3版の予定はあるでしょうか?あの「Real-Time Rendering」は第3版がもうすぐ出るらしいですけど*1

Mathematics for 3d Game Programming and Computer Graphics (Game Development Series)

Mathematics for 3d Game Programming and Computer Graphics (Game Development Series)

*1:まだ出ていないと思ったのですが、既に7月末に発売されていますね。

トラックバック - http://d.hatena.ne.jp/ishikawash/20080823/1219469105