[笔记][图形学]变换与观察(课程第6节)

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] 100010001

错切: [ 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] x1x2xny1y2yn111

\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] x1x2xny1y2yn111

多次变换: 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θ00100sinθ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] 1000010000100001

错切: [ 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} T1 = [ 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

比例: T − 1 T^{-1} T1 = [ 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} T1 = [ 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} TRZ1 = [ 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 − 1 T_{RX}^{-1} TRX1 = [ 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 − 1 T^{-1}_{RY} TRY1 = [ 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θ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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值