games 101 第二课

图形学里的变换

1、线性变换(linear transformation)定义

线性

  • 定义1: 几何上, 线性代表直线, y=kx+by = kx + by=kx+b.
  • 定义2: 一种运算同时满足特定的“可加性”和“齐次性

齐次性

  • 定义1: 一个表达式所有变量的次数相同, a1x1+a2x2=0a_1x_1 + a_2x_2 = 0a1x1+a2x2=0
  • 定义2: 输入扩大k倍,其函数相应的也扩大k倍, f(kx)=kf(x)f(kx) = kf(x)f(kx)=kf(x).

可加性
f(x+y)=f(x)+f(y)f(x+y) = f(x)+f(y)f(x+y)=f(x)+f(y).

线性变换

  • VVVWWW是两个向量空间。一种满足线性运算的变换$f: V \rightarrow W $。

  • 形式上: 存在矩阵MMM, 满足: MV=WM V = WMV=W

2、线性变换举例
1)缩放变换

v=[xyz],w=[k1xk2yk3z]v = \left [ \begin{matrix} x \\ y \\ z \\ \end{matrix} \right], w = \left[ \begin{matrix} k_1x \\ k_2y \\ k_3z \\ \end{matrix} \right] v=xyz,w=k1xk2yk3z

[k1000k2000k3] \left[ \begin{matrix} k_1 & 0 & 0 \\ 0 & k_2 & 0 \\ 0& 0 & k_3 \\ \end{matrix} \right]k1000k2000k3

2) 旋转变换
  • 默认以原点为旋转中心
  • 默认逆时针为旋转正方向

a.按固定轴旋转:
绕y轴特殊,z叉乘x=yz 叉乘 x = yzx=y
Rx(ϕ)=[10000cosϕ−sinϕ00sinϕcosϕ00001[ R_x(\phi)= \left[ \begin{matrix} 1 && 0 && 0 && 0\\ 0 && cos\phi && -sin\phi && 0\\ 0 && sin\phi && cos\phi && 0\\ 0 && 0 && 0 && 1 \end{matrix} \right[ Rx(ϕ)=10000cosϕsinϕ00sinϕcosϕ00001

Ry(ϕ)=[cosϕ0sinϕ00100−sinϕ0cosϕ00001[ R_y(\phi) = \left[ \begin{matrix} cos\phi && 0 && sin\phi && 0\\ 0 && 1 && 0 && 0 \\ -sin\phi && 0 && cos\phi && 0 \\0 && 0 && 0 && 1 \end{matrix} \right[ Ry(ϕ)=cosϕ0sinϕ00100sinϕ0cosϕ00001

Rz(ϕ)=[cosϕ−sinϕ00sinϕcosϕ0000100001] R_z(\phi)= \left[ \begin{matrix} cos\phi && -sin\phi && 0 && 0 \\sin\phi && cos\phi && 0 && 0 \\ 0 && 0 && 1 && 0 \\0 && 0 && 0 && 1 \end{matrix} \right] Rz(ϕ)=cosϕsinϕ00sinϕcosϕ0000100001

b.按任意点旋转:
先平移到原点->旋转->平移回来R(T(c)θ)T(−c)R(T(c)\theta)T(-c)R(T(c)θ)T(c)

c.按任意轴的旋转:
Rodridues’ rotation formul todo

d.旋转矩阵是正交矩阵
矩阵的逆等于矩阵的转置

R(θ)=[cosθ−sinθsinθcosθ] R(\theta)= \left[ \begin{matrix} cos \theta && -sin \theta \\ sin \theta && cos \theta \end{matrix} \right] R(θ)=[cosθsinθsinθcosθ]

R(−θ)=[cosθsinθ−sinθcosθ] R(-\theta)= \left[ \begin{matrix} cos \theta && sin \theta \\ -sin \theta && cos \theta \end{matrix} \right] R(θ)=[cosθsinθsinθcosθ]

R(−θ)=R(θ)TR(-\theta) = R(\theta)^T R(θ)=R(θ)T

R(−θ)=R(θ)−1(通过定义) R(-\theta) = R(\theta)^{-1} \tag{通过定义} R(θ)=R(θ)1()

R(θ)−1=R(θ)T R(\theta)^{-1} = R(\theta)^T R(θ)1=R(θ)T

3、平移变换

x+xt=x′y+yt=y′z+zt=z′ x+x_t = x' \\ y+y_t = y' \\ z+z_t = z' \\ x+xt=xy+yt=yz+zt=z

v=[x+xty+ytz+zt],w=[x′y′z′] v = \left [ \begin{matrix} x+x_t \\ y +y_t \\ z +z_t \\ \end{matrix} \right], w = \left[ \begin{matrix} x' \\ y' \\ z' \\ \end{matrix} \right] v=x+xty+ytz+zt,w=xyz
到目前为止, 平移变换不能通过线性变换表示。也就是找到一个矩阵MMM,满足: Mv=wM v = wMv=w。 为了让平移变换也可以通过线性变换得到, 需要引入新的工具齐次坐标系

4、齐次坐标系(Homogeneous Coordinates)

https://oncemore2020.github.io/blog/homogeneous/

  • 使用n+1个量来表示n维坐标
  • 向量 (x,y,z,0)(x,y,z,0)(x,y,z,0)
  • (x,y,z,1)(x,y,z,1)(x,y,z,1)

“齐次”之名?
将欧式坐标的一个二维点 (1,2) 转换为齐次坐标,根据规则,可以选择 (1,2,1),也可以选择 (2,4,2),还可以选择 (4,8,4),(8,16,8)…,即 (k,2k,k),k∈ℝ 都是“合法”的齐次坐标表示,这些点都映射到欧式空间中的一点,即这些点具有 尺度不变性(Scale Invariant),是“齐性的”(同族的),所以称之为齐次坐标。

5、齐次坐标表示线性变换
  • 变换有顺序要求,矩阵乘法不满足交换律
  • 矩阵的应用顺序是从右向左执行.MtMrvM_tM_rvMtMrv,先旋转,然后平移。
  • 齐次变换矩阵,先应用线性变换(缩放、旋转),然后应用平移变换。

[x′y′z′1]=[abctxdeftyghity0001][xyz1] \left[ \begin{matrix} x' \\ y' \\ z' \\ 1 \\ \end{matrix} \right] = \left[ \begin{matrix} a & b & c & t_x\\ d & e & f & t_y\\ g & h & i & t_y\\ 0 & 0 & 0 & 1\\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right] xyz1=adg0beh0cfi0txtyty1xyz1

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐