banner
IWSR

IWSR

我永远喜欢志喜屋梦子!

三次元図形の基本的な幾何学的変換の行列導出

前書き#

この文書は、齐次坐标与二维图形基本几何变换的矩阵推导の派生物です。2 次元の変換を理解すれば、3 次元の変換も簡単に推導できます。

3 次元図形の基本的な幾何学的変換#

移動#

点 (x, y, z) から (x + dx, y + dy, z + dz) への移動を表します。

同次座標を導入すると、(x, y, z, 1) の変形は (x + dx, y + dy, z + dz, 1) となります。

既知の条件:

(a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44)(xyz1)=(x+dxy+dyz+dz1)\begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} = \begin{pmatrix} x + d_x \\ y + d_y \\ z + d_z \\ 1 \end{pmatrix}

これから

{a11x+a12y+a13z+a14=x+dxa21x+a22y+a23z+a24=y+dya31x+a32y+a33z+a34=z+dza41x+a42y+a43z+a44=1\begin{cases} a_{11}x + a_{12}y + a_{13}z + a_{14} = x + d_x \\ a_{21}x + a_{22}y + a_{23}z + a_{24} = y + d_y \\ a_{31}x + a_{32}y + a_{33}z + a_{34} = z + d_z \\ a_{41}x + a_{42}y + a_{43}z + a_{44} = 1 \\ \end{cases}

となります。

解くと

(100dx010dy001dz0001)\begin{pmatrix} 1 & 0 & 0 & dx \\ 0 & 1 & 0 & dy \\ 0 & 0 & 1 & dz \\ 0 & 0 & 0 & 1 \end{pmatrix}

となります。

スケーリング#

点 (x, y, z) から (sx * x, sy * y, sz * z) へのスケーリングを表します。ここで、sx、sy、sz は定数です。

同次座標を導入すると、(x, y, z, 1) の変形は (sx * x, sy * y, sz * z, 1) となります。

既知の条件:

(a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44)(xyz1)=(sxxsyyszz1)\begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} = \begin{pmatrix} s_x * x \\ s_y * y \\ s_z * z \\ 1 \end{pmatrix}

これから

{a11x+a12y+a13z+a14=sxxa21x+a22y+a23z+a24=syya31x+a32y+a33z+a34=szza41x+a42y+a43z+a44=1\begin{cases} a_{11}x + a_{12}y + a_{13}z + a_{14} = s_x * x \\ a_{21}x + a_{22}y + a_{23}z + a_{24} = s_y * y \\ a_{31}x + a_{32}y + a_{33}z + a_{34} = s_z * z \\ a_{41}x + a_{42}y + a_{43}z + a_{44} = 1 \\ \end{cases}

となります。

解くと

(sx0000sy0000sz00001)\begin{pmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}

となります。

回転#

3 次元の回転は、3 つの行列(x 軸周りの回転、y 軸周りの回転、z 軸周りの回転)の積として分解できます。

z 軸周りの回転 - Rz(β)#

2 次元の回転の導出を覚えていますか?x 軸と y 軸で構成される平面上での回転も、実際には z 軸の周りでの回転と見なすことができます。したがって、3 次元の回転も理解しやすいです。ただし、固定された変わらない次元が追加されるだけです。

つまり:

(a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44)(xyz1)=(xcosβysinβycosβ+xsinβz1)\begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} = \begin{pmatrix} xcosβ - ysinβ \\ ycosβ + xsinβ \\ z \\ 1 \end{pmatrix}

となります。

これから:

{a11x+a12y+a13z+a14=xcosβysinβa21x+a22y+a23z+a24=ycosβ+xsinβa31x+a32y+a33z+a34=za41x+a42y+a43z+a44=1\begin{cases} a_{11}x + a_{12}y + a_{13}z + a_{14} = xcosβ - ysinβ \\ a_{21}x + a_{22}y + a_{23}z + a_{24} = ycosβ + xsinβ \\ a_{31}x + a_{32}y + a_{33}z + a_{34} = z \\ a_{41}x + a_{42}y + a_{43}z + a_{44} = 1 \\ \end{cases}

となります。

解くと

Rzβ=(cosβsinβ00sinβcosβ0000100001)R_{z}β = \begin{pmatrix} cosβ & -sinβ & 0 & 0 \\ sinβ & cosβ & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}

となります。

x 軸周りの回転 - Rx(α)#

同様に導出できます(x を固定)

Rxα=(10000cosαsinα00sinαcosα00001)R_{x}α = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & cosα & -sinα & 0 \\ 0 & sinα & cosα & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}

y 軸周りの回転 - Ry(γ)#

同様に導出できます(y を固定)

Ryγ=(cosγ0sinγ00100sinγ0cosγ00001)R_{y}γ = \begin{pmatrix} cosγ & 0 & sinγ & 0 \\ 0 & 1 & 0 & 0 \\ -sinγ & 0 & cosγ & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}

したがって、3 次元の回転行列は次のようになります。

R=RxαRyγRzβR = R_{x}αR_{y}γR_{z}β

ただし、このような軸の周りの θ 角度を αβγ に分解する方法については、別の記事で説明します。

ただし、現時点では回転軸は原点を通過することに制限されています。回転軸が原点を通過しない場合は、まず軸を原点を通過するように平行移動し、その後回転を行い、回転が終了したら元の位置に平行移動します。複雑な変換は、いくつかの単純な変換の組み合わせに分解できます。

シア#

X 軸に沿ってシア#

つまり、(x, y, z) から (x + m * y + n * z, y, z) への変換を表します。ここで、m と n は正接関数です。

(a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44)(xyz1)=(x+my+nzyz1)\begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} = \begin{pmatrix} x + m * y + n * z \\ y \\ z \\ 1 \end{pmatrix}

解くと

(1mn0010000100001)\begin{pmatrix} 1 & m & n & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{pmatrix}

となります。

Y 軸に沿ってシア#

点 (x, y, z) から (x, y + m * x + n * z, z) への変換を表します。

解くと

(1000m1n000100001)\begin{pmatrix} 1 & 0 & 0 & 0 \\ m & 1 & n & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{pmatrix}

となります。

Z 軸に沿ってシア#

点 (x, y, z) から (x, y, z + m * x + n * y) への変換を表します。

(10000100mn100001)\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ m & n & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{pmatrix}

となります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。