华中科大-万琳 计算机图形学 学习笔记
6 变换与观察
6.1 神奇的齐次坐标
6.1.1 齐次坐标
齐次坐标: 用n+1维向量表示n维向量。eg:(x, y)
→
\to
→ (x, y, 1)。
规范化齐次坐标: (x, y)
齐
次
化
→
\underrightarrow{齐次化}
齐次化 (x, y, h)
规
范
化
→
\underrightarrow{规范化}
规范化 (x/h, y/h, 1)。
6.1.2 常用几何变换
平移:
P
P
P(x, y)
→
\to
→
P
′
P'
P′(
x
′
x'
x′,
y
′
y'
y′)
\qquad
x
′
x'
x′ = x +
T
x
T_x
Tx (
T
x
T_x
Tx:x方向的平移矢量)
\qquad
y
′
y'
y′ = y +
T
y
T_y
Ty (
T
y
T_y
Ty:y方向的平移矢量)
比例:
P
P
P(x, y)
→
\to
→
P
′
P'
P′(
x
′
x'
x′,
y
′
y'
y′)
\qquad
x
′
x'
x′ = x
∗
\ast
∗
S
x
S_x
Sx (
S
x
S_x
Sx:x方向的比例系数)
\qquad
y
′
y'
y′ = y
∗
\ast
∗
S
y
S_y
Sy (
S
y
S_y
Sy:y方向的比例系数)
旋转:将P点绕坐标原点转动
θ
\theta
θ角度(逆时针为正,顺时针为负)得到新的点
P
′
P'
P′.
\qquad
P
P
P(x, y)
→
\to
→
P
′
P'
P′(
x
′
x'
x′,
y
′
y'
y′)
\qquad
x
′
x'
x′ = r
∗
\ast
∗ cos(
α
\alpha
α +
θ
\theta
θ) = r(cos
α
\alpha
αcos
θ
\theta
θ - sin
α
\alpha
αsin
θ
\theta
θ)
\qquad
y
′
y'
y′ = r
∗
\ast
∗ sin(
α
\alpha
α +
θ
\theta
θ) = r(sin
α
\alpha
αcos
θ
\theta
θ + cos
α
\alpha
αsin
θ
\theta
θ)
\qquad
又 x = r
∗
\ast
∗ cos
α
\alpha
α
\qquad
\quad
y = r
∗
\ast
∗ sin
α
\alpha
α
\qquad
x
′
x'
x′ = xcos
θ
\theta
θ - ysin
θ
\theta
θ
\qquad
y
′
y'
y′ = xsin
θ
\theta
θ + ycos
α
\alpha
α
对称:
P
P
P(x, y)
→
\to
→
P
′
P'
P′(
x
′
x'
x′,
y
′
y'
y′)
\qquad
x
′
x'
x′ =
x
x
x
\qquad
y
′
y'
y′ = -
y
y
y
错切:用于产生弹性物体的变形处理。
\qquad
P
P
P(x, y)
→
\to
→
P
′
P'
P′(
x
′
x'
x′,
y
′
y'
y′)
\qquad
x
′
x'
x′ = x + cy (c:x方向的错切因子)
\qquad
y
′
y'
y′ = bx + y (b:y方向的错切因子)
6.1.3 在齐次坐标下统一为矩阵运算
公式:[
x
′
x'
x′
y
′
y'
y′
1
1
1] = [
x
x
x
y
y
y
1
1
1]
⋅
\cdot
⋅
T
2
D
T_{2D}
T2D = [
x
x
x
y
y
y
1
1
1]
⋅
\cdot
⋅
[
a
b
p
c
d
q
l
m
s
]
\left[ \begin{array}{cc|c} a & b & p \\ c & d & q \\ \hline l & m & s \end{array}\right]
⎣⎡aclbdmpqs⎦⎤
T
1
T_1
T1 =
[
a
b
c
d
]
\begin{bmatrix} a & b \\c & d \end{bmatrix}
[acbd]
\qquad
对点作比例、旋转、对称、错切等变换。
T 2 T_2 T2 = [ l m ] \left[ \begin{array}{c}l & m\end{array}\right] [lm] \quad 对点作平移变换。
T 3 T_3 T3 = [ p q ] \left[ \begin{array}{c}p \\ q\end{array}\right] [pq] \quad \qquad 对点作投影变换。
T 4 T_4 T4 = [ s ] \left[ \begin{array}{c}s\end{array}\right] [s] \quad \qquad 对点作整体比例变换。
平移: [ 1 0 0 0 1 0 T x T y 1 ] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ T_x & T_y & 1 \end{matrix}\right] ⎣⎡10Tx01Ty001⎦⎤
比例: [ S x 0 0 0 S y 0 0 0 1 ] \left[ \begin{matrix} S_x & 0 & 0 \\ 0 & S_y & 0 \\ 0 & 0 & 1 \end{matrix}\right] ⎣⎡Sx000Sy0001⎦⎤
旋转: [ c o s θ s i n θ 0 − s i n θ c o s θ 0 0 0 1 ] \left[ \begin{matrix} cos\theta & sin\theta & 0 \\ -sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{matrix}\right] ⎣⎡cosθ−sinθ0sinθcosθ0001⎦⎤
对称: [ 1 0 0 0 − 1 0 0 0 1 ] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{matrix}\right] ⎣⎡1000−10001⎦⎤
错切: [ 1 b 0 c 1 0 0 0 1 ] \left[ \begin{matrix} 1 & b & 0 \\ c & 1 & 0 \\ 0 & 0 & 1 \end{matrix}\right] ⎣⎡1c0b10001⎦⎤
整体比例:[ x ′ x' x′ y ′ y' y′ 1 1 1] = [ x x x y y y 1 1 1] ⋅ \cdot ⋅ T 2 D T_{2D} T2D = [ x x x y y y 1 1 1] ⋅ \cdot ⋅ [ 1 0 0 0 1 0 0 0 s ] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & s \end{matrix}\right] ⎣⎡10001000s⎦⎤
\qquad \qquad [ x ′ x' x′ y ′ y' y′ 1 1 1] = [ x x x y y y 1 1 1] ⋅ \cdot ⋅ T 2 D T_{2D} T2D = [ x x x y y y s s s]
\qquad \qquad 规 范 化 → \underrightarrow{规范化} 规范化 [ x s \frac{x}{s} sx y s \frac{y}{s} sy s s \frac{s}{s} ss] = [ x s \frac{x}{s} sx y s \frac{y}{s} sy 1 1 1]
\qquad \qquad 则有 ( x ′ x' x′, y ′ y' y′) = ( x s \frac{x}{s} sx, y s \frac{y}{s} sy)
\qquad 显然,s < 1 放大,s > 1 缩小,s = 1 不变。
6.1.4 多点变换和多次变换
多点变换:
P
′
P'
P′ =
P
P
P
⋅
\cdot
⋅
T
T
T,
P
′
P'
P′和
P
P
P可以包含多个点,即
\qquad
\qquad
P
P
P =
[
x
1
y
1
1
x
2
y
2
1
⋮
⋮
⋮
x
n
y
n
1
]
\left[ \begin{matrix} x_1 & y_1 & 1 \\ x_2 & y_2 & 1 \\ \vdots & \vdots & \vdots \\ x_n & y_n & 1 \end{matrix}\right]
⎣⎢⎢⎢⎡x1x2⋮xny1y2⋮yn11⋮1⎦⎥⎥⎥⎤
\qquad \qquad P ′ P' P′ = [ x 1 ′ y 1 ′ 1 x 2 ′ y 2 ′ 1 ⋮ ⋮ ⋮ x n ′ y n ′ 1 ] \left[ \begin{matrix} x'_1 & y'_1 & 1 \\ x'_2 & y'_2 & 1 \\ \vdots & \vdots & \vdots \\ x'_n & y'_n & 1 \end{matrix}\right] ⎣⎢⎢⎢⎡x1′x2′⋮xn′y1′y2′⋮yn′11⋮1⎦⎥⎥⎥⎤
多次变换:
P
′
P'
P′ =
P
P
P
∗
\ast
∗
T
T
T =
P
P
P
∗
\ast
∗
T
1
T_1
T1
∗
\ast
∗
T
2
T_2
T2
∗
\ast
∗
⋯
\cdots
⋯
∗
\ast
∗
T
n
T_n
Tn (n > 1)
\qquad
6.2 三维模型动态化
6.2.1 基本三维变换
齐次矩阵公式:[ x ′ x' x′ y ′ y' y′ z ′ z' z′ 1 1 1] = [ x x x y y y z z z 1 1 1] ⋅ \cdot ⋅ T 3 D T_{3D} T3D =[ x x x y y y z z z 1 1 1] ⋅ \cdot ⋅ [ a b c p d e f q h i j r l m n s ] \left[ \begin{array}{ccc|c} a & b & c & p\\ d & e & f & q\\ h & i & j & r\\ \hline l & m & n & s \end{array}\right] ⎣⎢⎢⎡adhlbeimcfjnpqrs⎦⎥⎥⎤
T 1 T_1 T1 = [ a b c d e f h i j ] \begin{bmatrix} a & b & c\\d & e & f \\h & i & j \end{bmatrix} ⎣⎡adhbeicfj⎦⎤ \qquad 对点作比例、旋转、对称、错切等变换。
T 2 T_2 T2 = [ l m n ] \left[ \begin{array}{c}l & m & n\end{array}\right] [lmn] \quad 对点作平移变换。
T 3 T_3 T3 = [ p q r ] \left[ \begin{array}{c}p \\ q \\ r\end{array}\right] ⎣⎡pqr⎦⎤ \quad \qquad 对点作透视投影变换。
T 4 T_4 T4 = [ s ] \left[ \begin{array}{c}s\end{array}\right] [s] \quad \qquad 对点作整体比例变换。
平移: [ 1 0 0 0 0 1 0 0 0 0 1 0 T x T y T z 1 ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ T_x & T_y & T_z & 1 \end{matrix}\right] ⎣⎢⎢⎡100Tx010Ty001Tz0001⎦⎥⎥⎤
比例: [ S x 0 0 0 0 S y 0 0 0 0 S z 0 0 0 0 1 ] \left[ \begin{matrix} S_x & 0 & 0 & 0\\ 0 & S_y & 0 & 0\\ 0 & 0 & S_z & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡Sx0000Sy0000Sz00001⎦⎥⎥⎤
旋转:(皆准寻右手螺旋定则向正向旋转,大拇指方向对应轴正方向)
\qquad
T
R
Z
T_{RZ}
TRZ =
[
c
o
s
θ
s
i
n
θ
0
0
−
s
i
n
θ
c
o
s
θ
0
0
0
0
1
0
0
0
0
1
]
\left[ \begin{matrix} cos\theta & sin\theta & 0 & 0\\ -sin\theta & cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right]
⎣⎢⎢⎡cosθ−sinθ00sinθcosθ0000100001⎦⎥⎥⎤
\qquad T R X T_{RX} TRX = [ 1 0 0 0 0 c o s θ s i n θ 0 0 − s i n θ c o s θ 0 0 0 0 1 ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & cos\theta & sin\theta & 0\\ 0 & -sin\theta & cos\theta & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡10000cosθ−sinθ00sinθcosθ00001⎦⎥⎥⎤
\qquad T R Y T_{RY} TRY = [ c o s θ 0 − s i n θ 0 0 1 0 0 s i n θ 0 c o s θ 0 0 0 0 1 ] \left[ \begin{matrix} cos\theta & 0 & -sin\theta & 0\\ 0& 1 & 0 & 0\\ sin\theta & 0 & cos\theta & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡cosθ0sinθ00100−sinθ0cosθ00001⎦⎥⎥⎤
对称:(
F
x
y
F_{xy}
Fxy即关于
x
O
y
xOy
xOy平面,其余类似)
\qquad
T
F
x
y
T_{F_{xy}}
TFxy =
[
1
0
0
0
0
1
0
0
0
0
−
1
0
0
0
0
1
]
\left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & -1 & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right]
⎣⎢⎢⎡1000010000−100001⎦⎥⎥⎤
错切: [ 1 b c 0 d 1 f 0 g h 1 0 0 0 0 1 ] \left[ \begin{matrix} 1 & b & c & 0\\ d & 1 & f & 0\\ g & h & 1 & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡1dg0b1h0cf100001⎦⎥⎥⎤
整体比例:[ x ′ x' x′ y ′ y' y′ 1 1 1] = [ x x x y y y 1 1 1] ⋅ \cdot ⋅ T 2 D T_{2D} T2D = [ x x x y y y 1 1 1] ⋅ \cdot ⋅ [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 s ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & s \end{matrix}\right] ⎣⎢⎢⎡100001000010000s⎦⎥⎥⎤
\qquad \qquad s < 1 放大,s > 1 缩小,s = 1 不变。
6.2.2 逆变换
平移: T − 1 T^{-1} T−1 = [ 1 0 0 0 0 1 0 0 0 0 1 0 − T x − T y − T z 1 ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ -T_x & -T_y & -T_z & 1 \end{matrix}\right] ⎣⎢⎢⎡100−Tx010−Ty001−Tz0001⎦⎥⎥⎤
比例: T − 1 T^{-1} T−1 = [ 1 / S x 0 0 0 0 1 / S y 0 0 0 0 1 / S z 0 0 0 0 1 ] \left[ \begin{matrix} 1/S_x & 0 & 0 & 0\\ 0 & 1/S_y & 0 & 0\\ 0 & 0 & 1/S_z & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡1/Sx00001/Sy00001/Sz00001⎦⎥⎥⎤
整体比例: T − 1 T^{-1} T−1 = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 / S ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1/S \end{matrix}\right] ⎣⎢⎢⎡1000010000100001/S⎦⎥⎥⎤
旋转:(皆准寻右手螺旋定则向正向旋转,大拇指方向对应轴正方向)
\qquad
T
R
Z
−
1
T_{RZ}^{-1}
TRZ−1 =
[
c
o
s
θ
−
s
i
n
θ
0
0
s
i
n
θ
c
o
s
θ
0
0
0
0
1
0
0
0
0
1
]
\left[ \begin{matrix} cos\theta & -sin\theta & 0 & 0\\ sin\theta & cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right]
⎣⎢⎢⎡cosθsinθ00−sinθcosθ0000100001⎦⎥⎥⎤
\qquad T R X − 1 T_{RX}^{-1} TRX−1 = [ 1 0 0 0 0 c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & cos\theta & -sin\theta & 0\\ 0 & sin\theta & cos\theta & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡10000cosθsinθ00−sinθcosθ00001⎦⎥⎥⎤
\qquad T R Y − 1 T^{-1}_{RY} TRY−1 = [ c o s θ 0 s i n θ 0 0 1 0 0 − s i n θ 0 c o s θ 0 0 0 0 1 ] \left[ \begin{matrix} cos\theta & 0 & sin\theta & 0\\ 0& 1 & 0 & 0\\ -sin\theta & 0 & cos\theta & 0\\ 0 & 0 & 0 & 1 \end{matrix}\right] ⎣⎢⎢⎡cosθ0−sinθ00100sinθ0cosθ00001⎦⎥⎥⎤
6.2.3 复合变换
相对于任一参考点的变换:以F(
x
f
x_f
xf,
y
f
y_f
yf,
z
f
z_f
zf)为例
\qquad
分三步:1、将参考点F移至原点;
\qquad
\qquad
\quad
2、针对原点进行基本几何变换;
\qquad
\qquad
\quad
3、反平移。
\qquad
6.3 观察者动态化
6.3.1 绕任意轴的旋转变换
已知空间有任意轴AB,A点的坐标为A(
x
A
x_A
xA,
y
A
y_A
yA,
z
A
z_A
zA),AB的方向数为(a, b, c)。
已知现有一点P(x, y, z),绕AB轴逆时针旋转
θ
\theta
θ角后成为
P
′
(
x
′
,
y
′
,
z
′
)
P'(x', y', z')
P′(x′,y′,z′),若旋转变换矩阵为
T
R
A
B
T_{RAB}
TRAB。
则: [
x
′
x'
x′
y
′
y'
y′
z
′
z'
z′
1
1
1] = [
x
x
x
y
y
y
z
z
z
1
1
1]
⋅
\cdot
⋅
T
R
A
B
T_{RAB}
TRAB,求
T
R
A
B
T_{RAB}
TRAB。
步骤:1、把A点移动到坐标原点;
\quad
\quad
2、把AB轴绕道某个坐标轴上;
\quad
\quad
3、旋转;
\quad
\quad
4、求1、2的逆变换,回到AB原来的位置。
6.3.2 观察变换
观察变换:从世界坐标系到观察坐标系的转换。
观察坐标系:
\quad
\quad
坐标原点:观察者所在位置;
\quad
\quad
Z
v
Z_v
Zv:视点和观察物体上焦点的连线;
\quad
\quad
Y
v
Y_v
Yv:向上的方向;
\quad
\quad
X
v
X_v
Xv:按照右手定则确定方向。
观察变换实际上就是求世界坐标系中的任意点如Q(x, y, z)在观察坐标系中的坐标值。
复合变换步骤:
\quad
\quad
1、平移观察参考点到用户坐标系原点;
\quad
\quad
2、进行旋转变换分别让
X
v
X_v
Xv、
Y
v
Y_v
Yv、
Z
v
Z_v
Zv轴对应于用户坐标系的
X
X
X、
Y
Y
Y、
Z
Z
Z轴,得到要求的
Q
′
(
x
,
y
,
z
)
Q'(x, y, z)
Q′(x,y,z)。