Programming Tips for Computer Graphics
ベクトルの表現 V = (vx , vy , vz)
ベクトルの長さ |V| = sqrt(vx * vx + vy * vy + vz * vz)
#define X 0
#define Y 1
#define Z 2 が定義されているものとする
ベクトル(V1,V2)の内積
V1・V2 = |V1| |V2|
cosθ= V1x * V2x + V1y * V2y + V1z * V2z
V1[3],V2[3]
V1[X] * V2[X] + V1[Y] * V2[Y] + V1[Z] * V2[Z]
内積応用
2つのベクトルの平行判定
A・B = |A| |B|
(ベクトルは平行で同方向)
A・B = -|A| |B|
(ベクトルは平行で逆方向)
2つのベクトル垂直判定−内積が0の時
A・B = 0
2つのベクトルの角度
ベクトルの内積をそれぞれのベクトルの長さの積で割る
cosθ= A・B / |A| |B|
ベクトルの射影(ベクトルBをベクトルAに射影したベクトルC)
C = A・B / |A|
ベクトル外積
|V1×V2| = |V1|
|V2| sinθ
V1×V2 = (V1y*V2z - V1z*V2y, V1z*V2x - V1x*V2z,
V1x*V2y -V1y*V2x)
V1[3],V2[3]
V[X] = V1[Y] * V2[Z] - V1[Z] * V2[Y]
V[Y] = V1[Z] * V2[X] - V1[X] * V2[Z]
V[Z] = V1[X] * V2[Y] - V1[Y] * V2[X]
外積応用
2つのベクトルによって出来る並行四辺形の面積S = 外積
S = |V1×V2|
2つのベクトルによって出来る三角形の面積S = 外積 / 2
S = 1/2 * |V1×V2|
2つのベクトルに垂直なベクトルC(法線ベクトル)
C = A×B / |A
× B|
点平行移動
P[X] = P[X] + DX
P[Y] = P[Y] + DY
P[Z] = P[Z] + DZ
点Z軸回り回転
P[X] = P[X] * cosθ - P[Y] * sinθ
P[Y] = P[X] * sinθ + P[Y] * cosθ
P[Z] = P[Z]
Z軸を任意の単位ベクトルに一致させる回転
XANG = atan2(v[Y],v[Z]) // ベクトルをY-Z 平面に投影した時のX軸回転角
YANG = asin(v[X]) // X-Z 平面でのY軸回転角
Matrix
Matrix multiplication
a[4][3] x b[3][3]
a11 a12 a13 b11 b12 b13
a21 a22 a23 X b21 b22 b23
a31 a32 a33 b31 b32 b33
a41 a42 a43
a11*b11+a12*b21+a13*b31 a11*b12+a12*b22+a13*b32 a11*b13+a12*b23+a13*b33
a21*b11+a22*b21+a23*b31 a21*b12+a22*b22+a23*b32 a21*b13+a22*b23+a23*b33
a31*b11+a32*b21+a33*b31 a31*b12+a32*b22+a33*b32 a31*b13+a32*b23+a33*b33
a41*b11+a42*b21+a43*b31 a41*b12+a42*b22+a43*b32 a41*b13+a42*b23+a43*b33
a[n][m] x b[m][s] -> c[n][s] C sample source code
Inverse matrix
X x a[N][N] = a[N][N] x X = I
X = a-1
C sample source code
To home