3DCGで良く使う数式

3DCGなどで良く使う数式をまとめてみました.

 \vec{a} \times \vec{b} ベクトルaとベクトルbの外積
 \vec{a} \cdot \vec{b} ベクトルaとベクトルbの内積

点と平面の距離

 \vec{p}と平面  \vec{n} \cdot \vec{x}=dとの距離d

 d = \frac{|\vec{n} \cdot \vec{p} - d|}{|\vec{n}|}

(\vec{n}は平面の法線ベクトル)

点と直線の距離(垂線の長さ)

  •  \vec{p}と直線  \vec{n} t + \vec{d} の距離d

 d = \frac{|\vec{n} \times (\vec{p}-\vec{d})|}{|\vec{n}|}

(\vec{n}は直線の方向ベクトル)

  • 2点 \vec{x}_1\vec{x}_2を通る直線と,点\vec{p}の距離d

 d = \frac{|(\vec{x}_2 - \vec{x}_1) \times(\vec{x}_1 - \vec{p})|}{|\vec{x}_2 - \vec{x}_1|}

直線と直線の距離

二つの直線  \vec{x}_1 + (\vec{x}_2 - \vec{x}_1) s \vec{x}_3 + (\vec{x}_4 - \vec{x}_3) tの距離d

  • 二直線がねじれの位置にある場合

 d = \frac{|(\vec{x}_3-\vec{x}_1)\cdot[(\vec{x}_2-\vec{x}_1)\times(\vec{x}_4-\vec{x}_3)]|}{|(\vec{x}_2-\vec{x}_1)\times(\vec{x}_4-\vec{x}_3)|}

(ねじれの位置にある場合, (\vec{x}_3-\vec{x}_1)\cdot[(\vec{x}_2-\vec{x}_1)\times(\vec{x}_4-\vec{x}_3)] \neq 0となる)

  • 二直線が並行の場合

 d = |(\vec{x}_3 - \vec{x}_1)-\vec{v}(\vec{v}\cdot(\vec{x}_3-\vec{x}_1) )|

(ただし  \vec{v} \eq \frac{\vec{x}_2 - \vec{x}_1}{|\vec{x}_2 - \vec{x}_1|})

おすすめの書籍

数式,導出方法,対応するC/C++ソースコードが必要な場合は以下の本が非常に参考になります.

3D Game Engine Design: A Practical Approach to Real-Time Computer Graphics (The Morgan Kaufmann Series in Interactive 3d Technology)
David H. Eberly
Morgan Kaufmann Pub
売り上げランキング: 14634
おすすめ度の平均: 4.5
3 教科書としてはあまりに不親切
5 3Dリアルタイムグラフィックスのバイブル
5 本の内容はとてもすばらしいが・・