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)の内積
V1V2 = |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つのベクトルの平行判定
AB = |A| |B| (ベクトルは平行で同方向)

AB = -|A| |B| (ベクトルは平行で逆方向)
2つのベクトル垂直判定−内積が0の時
AB = 0
2つのベクトルの角度
ベクトルの内積をそれぞれのベクトルの長さの積で割る
cosθ= AB / |A| |B|
ベクトルの射影(ベクトルBをベクトルAに射影したベクトルC)
C = AB / |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