ベクトル

スカラー乗算

ベクトルa\bold{a}にスカラーssを乗じることは、ベクトルa\bold{a}の各成分にスカラーssを乗じること。

sa=(sax,say,saz)s\bold{a} = (sa_x, sa_y, sa_z)

アダマール積

スケール係数はそれぞれの軸に沿って変えることができる。(非一様スケーリング

スケーリングベクトルs\bold{s}とベクトルa\bold{a}のコンポーネントごとの積はアダマール積と呼ばれ、演算子\otimesで表される。

sa=(sxax,syay,szaz)\bold{s} \otimes \bold{a} = (s_xa_x, s_ya_y, s_za_z)

スケーリングベクトルssは、3x3対角スケーリング行列S\bold{S}をコンパクトに表したもの。

S=[sx000sy000sz]\bold{S} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & s_z \end{bmatrix}

この行列をベクトルa\bold{a}に右から掛けることで、同様の結果が得られる。

aS=(ax,ay,az)[sx000sy000sz]=(sxax,syay,szaz)=sa\begin{align*} \bold{a}\bold{S} &= (a_x, a_y, a_z) \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & s_z \end{bmatrix} \\ &= (s_xa_x, s_ya_y, s_za_z) \\ &= \bold{s} \otimes \bold{a} \end{align*}

法線ベクトル

ベクトルがある表面に垂直であるとき、その表面に対する法線であるという。

ドット積(スカラー積、内積)

ベクトル射影

u\bold{u}が単位ベクトルのとき、u=1|\bold{u}| = 1であるため、

au=aucosθ=acosθ\bold{a} \cdot \bold{u} = |\bold{a}||\bold{u}|\cos\theta = |\bold{a}|\cos\theta

これは、u\bold{u}の方向によって定義される無限直線上のベクトルa\bold{a}への射影の長さを表す。

共線判定

2つのベクトルが同一直線上にあるとき、2つのベクトルは共線であるという。

同方向

2つのベクトル間の角度が0°のとき、cosθ\cos\theta11になるので、ドット積は次のようになる。

ab=ab\bold{a} \cdot \bold{b} = |\bold{a}||\bold{b}|

逆方向

2つのベクトル間の角度が180°のとき、cosθ\cos\theta1-1になるので、ドット積は次のようになる。

ab=ab\bold{a} \cdot \bold{b} = -|\bold{a}||\bold{b}|

垂線判定

2つのベクトル間の角度が90°のとき、cosθ\cos\theta00になるので、ドット積は次のようになる。

ab=0\bold{a} \cdot \bold{b} = 0

方向判定

ドット積の符号は、2つのベクトルの間の角度によって決まる。

同方向

2つのベクトル間の角度が90°以下のとき、cosθ\cos\thetaは正の値になるので、ドット積は正の値になる。

ab>0\bold{a} \cdot \bold{b} > 0

逆方向

2つのベクトル間の角度が90°以上のとき、cosθ\cos\thetaは負の値になるので、ドット積は負の値になる。

ab<0\bold{a} \cdot \bold{b} < 0

平面と点の距離

2つのベクトルを使えば、平面を定義することができる。

3D空間において、平面より上または下にある点Pの高さhhは、次のように求められる。

h=(PQ)nh = (\bold{P - Q}) \cdot \bold{n}

これは、n\bold{n}によって定義される直線上にあるPQ\bold{P - Q}の射影である。

クロス積(外積)

2つのベクトルのクロス積は、それらのベクトルに垂直なベクトルを生成する。

a×b=(aybzazby,azbxaxbz,axbyaybx)=(aybzazby)i+(azbxaxbz)j+(axbyaybx)k\begin{align*} \bold{a} \times \bold{b} &= (a_yb_z - a_zb_y, a_zb_x - a_xb_z, a_xb_y - a_yb_x) \\ &= (a_yb_z - a_zb_y)\bold{i} + (a_zb_x - a_xb_z)\bold{j} + (a_xb_y - a_yb_x)\bold{k} \end{align*}

クロス積の大きさ

2つのベクトルa\bold{a}b\bold{b}の間の角度をθ\thetaとすると、sinθ\sin\thetaは次のようになる。

sinθ=a×bab\sin\theta = \frac{|\bold{a} \times \bold{b}|}{|\bold{a}||\bold{b}|}

これを変形すると、クロス積の大きさは次のようになる。

a×b=absinθ|\bold{a} \times \bold{b}| = |\bold{a}||\bold{b}|\sin\theta

これは、辺がa\bold{a}b\bold{b}になる平行四辺形の面積である。

三角形の面積が平行四辺形の半分であることから、位置ベクトルV1\bold{V}_1V2\bold{V}_2V3\bold{V}_3を持つ3つの頂点を持つ三角形の面積は次のようになる。

Striangle=12(V2V1)×(V3V1)S_{triangle} = \frac{1}{2} |(\bold{V}_2 - \bold{V}_1) \times (\bold{V}_3 - \bold{V}_1)|

クロス積の方向

右手座標系では右手の法則、左手座標系では左手の法則に従って、クロス積の方向を決定することができる。

線形補間(linear interpolation, LERP)

2つの既知の座標点の間の位置を見つけるために、線形補間を使用することができる。

lerp(a,b,t)=(1t)a+tblerp(\bold{a}, \bold{b}, t) = (1 - t)\bold{a} + t\bold{b}

ここで、ttは0から1の間の値である。

lerp(a,b,t)lerp(\bold{a}, \bold{b}, t)は、点a\bold{a}と点b\bold{b}への線分に沿ってtt%の位置にある点を表す。