三维变换
使用齐次坐标,避免各变换矩阵可能会有不同的维度并且无法相乘。
平移变换
点原位置
P
(
x
,
y
,
z
)
P(x,y,z)
P(x,y,z),平移后位置
P
′
(
x
+
T
x
,
y
+
T
y
,
z
+
T
z
)
P^{'}(x+T_x, y+T_y, z+T_z)
P′(x+Tx,y+Ty,z+Tz)。由此可得:
P
′
=
T
P
P^{'}=TP
P′=TP
(
x
+
T
x
y
+
T
y
z
+
T
z
1
)
=
[
1
0
0
T
x
0
1
0
T
y
0
0
1
T
z
0
0
0
1
]
(
x
y
z
1
)
\begin{pmatrix} x+T_x \\ y+T_y \\ z + T_z\\ 1 \end{pmatrix} = \begin{bmatrix} 1& 0 & 0 & T_x \\ 0 & 1 & 0 & T_y \\ 0 & 0 & 1 & T_z \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix}
x+Txy+Tyz+Tz1
=
100001000010TxTyTz1
xyz1
缩放变换
点原位置
P
(
x
,
y
,
z
)
P(x, y, z)
P(x,y,z),缩放后位置
P
′
(
x
S
x
,
y
S
y
,
z
S
z
)
P^{'}(x S_x, yS_y, zS_z)
P′(xSx,ySy,zSz)。由此可得:
P
′
=
S
P
P^{'}=SP
P′=SP
(
x
S
x
y
S
y
z
S
z
1
)
=
[
S
x
0
0
0
0
S
y
0
0
0
0
S
z
0
0
0
0
1
]
(
x
y
z
1
)
\begin{pmatrix} xS_x \\ yS_y \\ z S_z\\ 1 \end{pmatrix} = \begin{bmatrix} S_x& 0 & 0 & 0 \\ 0 & S_y & 0 & 0 \\ 0 & 0 & S_z & 0 \\ 0 & 0 & 0 & 1\end{bmatrix} \begin{pmatrix} x \\ y \\ z \\ 1\end{pmatrix}
xSxySyzSz1
=
Sx0000Sy0000Sz00001
xyz1
缩放还可以用来切换坐标系
旋转变换
-
绕 x x x轴旋转 θ \theta θ
( x y ′ z ′ 1 ) = [ 1 0 0 0 0 cos θ − sin θ 0 0 sin θ cos θ 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x \\ y^{'} \\ z^{'} \\1 \end{pmatrix}=\begin{bmatrix} 1& 0 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta & 0 \\ 0 & \sin\theta & \cos\theta & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} xy′z′1 = 10000cosθsinθ00−sinθcosθ00001 xyz1 -
绕 y y y轴旋转 θ \theta θ
( x ′ y z ′ 1 ) = [ cos θ 0 sin θ 0 0 1 0 0 − sin θ 0 cos θ 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x^{'} \\ y \\ z^{'} \\1 \end{pmatrix}=\begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \\ 0 & 1 &0 & 0 \\ -\sin\theta & 0 & \cos\theta & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} x′yz′1 = cosθ0−sinθ00100sinθ0cosθ00001 xyz1 -
绕 z z z轴旋转 θ \theta θ
( x ′ y ′ z 1 ) = [ cos θ − sin θ 0 0 sin θ cos θ 0 0 0 0 1 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x^{'} \\ y^{'} \\ z \\1 \end{pmatrix}=\begin{bmatrix} \cos\theta & -\sin\theta & 0 & 0 \\ \sin\theta & \cos\theta &0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} x′y′z1 = cosθsinθ00−sinθcosθ0000100001 xyz1
视图变换
已知世界基坐标系
(
e
⃗
x
,
e
⃗
y
,
e
⃗
z
)
(\vec{e}_x, \vec{e}_y,\vec{e}_z)
(ex,ey,ez), 相机坐标系
(
u
⃗
,
v
⃗
,
n
⃗
)
(\vec{u}, \vec{v}, \vec{n})
(u,v,n),
P
w
=
x
e
⃗
x
+
y
e
⃗
y
+
z
e
⃗
z
P_w=x\vec{e}_x+y\vec{e}_y+z\vec{e}_z
Pw=xex+yey+zez。求
P
w
P_w
Pw在相机坐标系的坐标值
P
c
P_c
Pc。
P
w
=
x
e
⃗
x
+
y
e
⃗
y
+
z
e
⃗
z
=
[
e
⃗
x
e
⃗
y
e
⃗
z
]
(
x
y
z
)
P_w=x\vec{e}_x+y\vec{e}_y+z\vec{e}_z=\begin{bmatrix} \vec{e}_x & \vec{e}_y & \vec{e}_z\end{bmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix}
Pw=xex+yey+zez=[exeyez]
xyz
P
c
=
x
′
u
⃗
+
y
′
v
⃗
+
z
′
n
⃗
=
[
u
⃗
v
⃗
n
⃗
]
(
x
′
y
′
z
′
)
=
[
u
x
e
⃗
x
+
u
y
e
⃗
y
+
u
z
e
⃗
z
v
x
e
⃗
x
+
v
y
e
⃗
y
+
v
z
e
⃗
z
n
x
e
⃗
x
+
n
y
e
⃗
y
+
n
z
e
⃗
z
]
(
x
′
y
′
z
′
)
=
[
e
⃗
x
e
⃗
y
e
⃗
z
]
[
u
x
v
x
n
x
u
y
v
y
n
y
u
z
v
z
n
z
]
(
x
′
y
′
z
′
)
P_c=x^{'}\vec{u}+y^{'}\vec{v}+z^{'}\vec{n}=\begin{bmatrix} \vec{u} & \vec{v} & \vec{n}\end{bmatrix} \begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix}=\begin{bmatrix} u_x\vec{e}_x+u_y\vec{e}_y+u_z\vec{e}_z &v_x\vec{e}_x+v_y\vec{e}_y+v_z\vec{e}_z& n_x\vec{e}_x+n_y\vec{e}_y+n_z\vec{e}_z\end{bmatrix} \begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix}=\begin{bmatrix} \vec{e}_x & \vec{e}_y & \vec{e}_z\end{bmatrix}\begin{bmatrix} u_x & v_x & n_x \\ u_y & v_y & n_y \\ u_z &v_z & n_z\end{bmatrix}\begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix}
Pc=x′u+y′v+z′n=[uvn]
x′y′z′
=[uxex+uyey+uzezvxex+vyey+vzeznxex+nyey+nzez]
x′y′z′
=[exeyez]
uxuyuzvxvyvznxnynz
x′y′z′
由此可得:
[
u
x
v
x
n
x
u
y
v
y
n
y
u
z
v
z
n
z
]
(
x
′
y
′
z
′
)
=
(
x
y
z
)
\begin{bmatrix} u_x & v_x & n_x \\ u_y & v_y & n_y \\ u_z &v_z & n_z\end{bmatrix}\begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix} = \begin{pmatrix} x \\ y \\ z \end{pmatrix}
uxuyuzvxvyvznxnynz
x′y′z′
=
xyz
(
x
′
y
′
z
′
)
=
[
u
x
u
y
u
z
v
x
v
y
v
z
n
x
n
y
n
z
]
(
x
y
z
)
\begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix} = \begin{bmatrix} u_x & u_y & u_z \\ v_x & v_y & v_z \\ n_x &n_y & n_z\end{bmatrix}\begin{pmatrix} x \\ y \\ z \end{pmatrix}
x′y′z′
=
uxvxnxuyvynyuzvznz
xyz