前書き#
この文書は、齐次坐标与二维图形基本几何变换的矩阵推导の派生物です。2 次元の変換を理解すれば、3 次元の変換も簡単に推導できます。
3 次元図形の基本的な幾何学的変換#
点 (x, y, z) から (x + dx, y + dy, z + dz) への移動を表します。
同次座標を導入すると、(x, y, z, 1) の変形は (x + dx, y + dy, z + dz, 1) となります。
既知の条件:
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=x+dxy+dyz+dz1
これから
⎩⎨⎧a11x+a12y+a13z+a14=x+dxa21x+a22y+a23z+a24=y+dya31x+a32y+a33z+a34=z+dza41x+a42y+a43z+a44=1
となります。
解くと
100001000010dxdydz1
となります。
スケーリング#
点 (x, y, z) から (sx * x, sy * y, sz * z) へのスケーリングを表します。ここで、sx、sy、sz は定数です。
同次座標を導入すると、(x, y, z, 1) の変形は (sx * x, sy * y, sz * z, 1) となります。
既知の条件:
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=sx∗xsy∗ysz∗z1
これから
⎩⎨⎧a11x+a12y+a13z+a14=sx∗xa21x+a22y+a23z+a24=sy∗ya31x+a32y+a33z+a34=sz∗za41x+a42y+a43z+a44=1
となります。
解くと
sx0000sy0000sz00001
となります。
3 次元の回転は、3 つの行列(x 軸周りの回転、y 軸周りの回転、z 軸周りの回転)の積として分解できます。
z 軸周りの回転 - Rz(β)#
2 次元の回転の導出を覚えていますか?x 軸と y 軸で構成される平面上での回転も、実際には z 軸の周りでの回転と見なすことができます。したがって、3 次元の回転も理解しやすいです。ただし、固定された変わらない次元が追加されるだけです。
つまり:
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=xcosβ−ysinβycosβ+xsinβz1
となります。
これから:
⎩⎨⎧a11x+a12y+a13z+a14=xcosβ−ysinβa21x+a22y+a23z+a24=ycosβ+xsinβa31x+a32y+a33z+a34=za41x+a42y+a43z+a44=1
となります。
解くと
Rzβ=cosβsinβ00−sinβcosβ0000100001
となります。
x 軸周りの回転 - Rx(α)#
同様に導出できます(x を固定)
Rxα=10000cosαsinα00−sinαcosα00001
y 軸周りの回転 - Ry(γ)#
同様に導出できます(y を固定)
Ryγ=cosγ0−sinγ00100sinγ0cosγ00001
したがって、3 次元の回転行列は次のようになります。
R=RxαRyγRzβ
ただし、このような軸の周りの θ 角度を αβγ に分解する方法については、別の記事で説明します。
ただし、現時点では回転軸は原点を通過することに制限されています。回転軸が原点を通過しない場合は、まず軸を原点を通過するように平行移動し、その後回転を行い、回転が終了したら元の位置に平行移動します。複雑な変換は、いくつかの単純な変換の組み合わせに分解できます。
X 軸に沿ってシア#
つまり、(x, y, z) から (x + m * y + n * z, y, z) への変換を表します。ここで、m と n は正接関数です。
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=x+m∗y+n∗zyz1
解くと
1000m100n0100001
となります。
Y 軸に沿ってシア#
点 (x, y, z) から (x, y + m * x + n * z, z) への変換を表します。
解くと
1m0001000n100001
となります。
Z 軸に沿ってシア#
点 (x, y, z) から (x, y, z + m * x + n * y) への変換を表します。
10m001n000100001
となります。