001_图形学里的变换
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
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).
线性变换
-
设VVV和WWW是两个向量空间。一种满足线性运算的变换$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 = yz叉乘x=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ϕ00−sinϕ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ϕ0−sinϕ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ϕ00−sinϕ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=x′y+yt=y′z+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=⎣⎡x′y′z′⎦⎤
到目前为止, 平移变换不能通过线性变换表示。也就是找到一个矩阵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] ⎣⎢⎢⎡x′y′z′1⎦⎥⎥⎤=⎣⎢⎢⎡adg0beh0cfi0txtyty1⎦⎥⎥⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤
更多推荐


所有评论(0)