GAMES101-Lecture 03&04(部分)

变换

作用:
描述摄像机的运动和位置移动;
表示复杂的旋转,以及他们联系在一起后错综复杂的变换;
用于缩放等;
用于光栅化成像,从三维世界到二维平面

正运动学:已知关节的角度,求末端的位姿
逆运动学:已知末端的位姿,求各关节的转角

类型:

  • 模型变换Modeling
  • 视图变换Viewing

二维变换

缩放scale

矩阵表示缩放
缩放矩阵:
缩放矩阵
反射(or对称)Reflection Matrix
对于y轴反转: x ′ = − x , y ′ = y x^{'} = -x,y^{'}=y x=x,y=y,用矩阵表示如下:
矩阵表示

切变 Shear Matrix

基于原点,且 y m a x = 1 y_{max}=1 ymax=1的切变矩阵表示:
切变

旋转Rotate

默认绕原点 ( 0 , 0 ) (0,0) (0,0)逆时针旋转。
旋转矩阵
旋转矩阵推导过程:用特殊点 ( 1 , 0 ) a n d ( 0 , 1 ) (1,0)and(0,1) (1,0)and(0,1)进行推导
推导
线性变换 :变换后的坐标可以用原坐标与矩阵 (维度要相同) 相乘得到的变换。
共同点

齐次坐标

二维齐次坐标

特殊的变换:平移
平移
平移矩阵表示(仿射变换Affine map):
矩阵表示
上述公式先应用线性变换,再平移
如何让平移变换也加入到一般表示矩阵中?
答:引入齐次坐标。

二维点: ( x , y , 1 ) T (x,y,1)^{T} (x,y,1)T
二维向量: ( x , y , 0 ) T (x,y,0)^{T} (x,y,0)T

为什么要区分点和向量?
答:向量具有平移不变性。向量 ( x , y , 0 ) T (x,y,0)^{T} (x,y,0)T经过平移(下面那个平移矩阵)依旧是 ( x , y , 0 ) T (x,y,0)^{T} (x,y,0)T

向量+向量=向量
点-点=向量
点+向量=点(一个点沿着向量移动变成另一个点)
点+点=这两个点的中点(理由如下)

如果使用 [ x y w ] \left[\begin{matrix}x\\y\\w\end{matrix}\right] xyw表示二维点,则其表示的是点 [ x / w y / w 1 ] , w ≠ 0 \left[\begin{matrix}x/w\\y/w\\1\end{matrix}\right],w\neq0 x/wy/w1,w=0

齐次坐标表示平移:
齐次坐标
齐次坐标表示仿射变换:
变换
上述公式依旧是先应用线性变换,再平移,只是用齐次坐标来表示仿射变换而已
各种变换矩阵:
具体变换矩阵

逆变换 M − 1 M^{-1} M1

逆变换
逆变换:变换后的坐标 ( x ′ , y ′ ) (x^{'},y^{'}) (x,y)乘变换矩阵 M M M 的逆矩阵 M − 1 M^{-1} M1,结果为原坐标 ( x , y ) (x,y) (x,y)

组合变换

先平移再旋转:
先平移再旋转
先旋转后平移
先旋转后平移
不满足交换律

结果受到变换的顺序的影响是因为矩阵乘法不满足交换律,如果要进行某一种变换,就要在已得到的矩阵的左边乘该变换矩阵。
先旋转后平移的矩阵表示(从右到左来应用):
具体
上面两个变换矩阵可以写成一个变换矩阵如下:
[ cos ⁡ 4 5 o − sin ⁡ 4 5 o 1 sin ⁡ 4 5 o − cos ⁡ 4 5 o 0 0 0 1 ] \left[\begin{matrix}\cos45^{o}&-\sin45^{o}&1\\\sin45^{o}&-\cos45^{o}&0\\0&0&1\end{matrix}\right] cos45osin45o0sin45ocos45o0101

推广

对点 [ x y 1 ] \left[\begin{matrix}x\\y\\1\end{matrix}\right] xy1依次应用变换 A 1 , A 2 , A 3 , . . . A n A_{1},A_{2},A_{3},...A_{n} A1,A2,A3,...An
矩阵形式如下:
实现
因为矩阵满足结合律,所以可以先将 A n × . . . × A 3 × A 2 × A 1 A_{n}\times...\times A_{3}\times A_{2}\times A_{1} An×...×A3×A2×A1计算得到一个 3 × 3 3\times3 3×3矩阵,再与齐次坐标相乘。所以其实是可以直接用一个 3 × 3 3\times3 3×3矩阵表示一个复杂的变换,而不需要按变换的顺序乘N个 3 × 3 3\times3 3×3矩阵。

变换分解

如何做到以任意一点为中心进行旋转?
答:需要变换分解。
绕点c ( x c , y c ) (x_{c},y_{c}) (xc,yc)进行旋转所需操作

  1. 移动到原点。把所有的点沿着-c ( − x c , − y c ) (-x_{c},-y_{c}) (xc,yc)方向移动
  2. 绕原点旋转规定角度
  3. 移动到点c。把所有的点沿着c ( x c , y c ) (x_{c},y_{c}) (xc,yc)方向移动

过程

三维变换

三维齐次坐标

三维点: ( x , y , z , 1 ) T (x,y,z,1)^{T} (x,y,z,1)T
三维向量: ( x , y , z , 0 ) T (x,y,z,0)^{T} (x,y,z,0)T

如果使用 [ x y z w ] \left[\begin{matrix}x\\y\\z\\w\end{matrix}\right] xyzw表示三维点,则其表示的是点 [ x / w y / w z / w 1 ] , w ≠ 0 \left[\begin{matrix}x/w\\y/w\\z/w\\1\end{matrix}\right],w\neq0 x/wy/wz/w1,w=0

三维仿射变换

一般表示
上述公式先应用线性变换、再平移
各种变换矩阵:
缩放和平移

三维旋转

绕着x、y、z轴进行旋转:绕哪个轴该轴的坐标不变
旋转
xyz坐标系遵循循环对称的性质(xyzxyzxyz…),xy得z,yz得x,zx得y。 z ⃗ × x ⃗ = y ⃗ \vec{z}\times\vec{x}=\vec{y} z ×x =y 而不是 x ⃗ × z ⃗ \vec{x}\times\vec{z} x ×z ,所以绕y轴得旋转矩阵中角度是负的。
绕三轴旋转矩阵可分解为:
绕三轴旋转
罗德里德斯旋转公式:
公式
R ⃗ ( n ⃗ , α ) − − 旋 转 轴 n ⃗ , 旋 转 角 度 α \vec{R}(\vec{n},\alpha)--旋转轴\vec{n},旋转角度\alpha R (n ,α)n α,默认旋转轴过原点(起点在原点上)。
矩阵N为叉积 a ⃗ × b ⃗ = A ∗ b \vec{a}\times\vec{b}=A^*b a ×b =Ab的叉积矩阵 A ∗ A^* A

如果要沿着任意轴旋转,且该轴起点不是原点,则需要先将所有坐标平移直到旋转轴起点为原点,然后旋转,最后再平移回去。

四元数可参考博客https://zhuanlan.zhihu.com/p/78987582

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值