外積

cross-product.png

外積の意味

外積は2つのベクトルの張る平面の面積でもあるぞ。
法線でもある。
プラスだったらその面は表、
マイナスだったらその面は裏。
右手座標系(OpenGL系)だったら、
頂点が反時計まわりに並んでいる三角形の外積(b-a)x(c-a)はプラス
頂点が時計まわりに並んでいる三角形の外積(b-a)x(c-a)はマイナス
になります。

3次元ベクトル同士の外積の式

(1)
\begin{align} p\times q= \begin{pmatrix} p_yq_z-p_zq_y\\ p_zq_x-p_xq_z\\ p_xq_y-p_yq_x\\ \end{pmatrix} \end{align}

行列式版

(2)
\begin{align} p\times q=\mathrm{det} \left[ \begin{matrix} e_x&p_x&q_x\\ e_y&p_y&q_y\\ e_z&p_z&q_z \end{matrix}\right] \end{align}

サラスの公式が使えます

(3)
\begin{equation} e_x(p_y q_z)+e_y(p_z q_x)+e_z(p_x q_y)-e_x(q_y p_z)-e_y(q_z p_x)-e_z(q_y p_x) \end{equation}

eは基底ベクトル$e_x=(1,0,0),e_y=(0,1,0),e_z=(0,0,1)$
なので結局外積の長さは

(4)
\begin{equation} (p_y q_z)+(p_z q_x)+(p_x q_y)-(q_y p_z)-(q_z p_x)-(q_y p_x) \end{equation}

でいいのかな?

コード

Vec3 Vec3::outerProduct(Vec3 &a, Vec3 &b) {
    Vec3 res;
    res.x= a.y*b.z- a.z*b.y;
    res.y= a.z*b.x-a.x*b.z;
    res.z= a.x*b.y-a.y*b.x;
 
    return (res);
}

性質

外積は掛け算にたいして非可換
もし内積と外積が一緒に使われていたら、外積を優先する。
なぜなら、内積はスカラーを返し、スカラーとベクトルの積は計算出来ないため。

外積の大きさ

(6)
\begin{align} \|a\times b\|=\|a\|\|b\|\sin\theta \end{align}

外積のノルムはaとbを2辺とした平行四辺形の面積と等しい。

外積と点とベクトルの関係


coordinate-system cross outer-product

サポートサイト Wikidot.com coordinate-systemcrossouter-product