Games101笔记-Lecture03

本文详细介绍了齐次坐标在二维空间中的应用,如何通过齐次坐标实现点的位移操作,并探讨了向量与点的加法运算。此外,还讲解了仿射变换、放缩、旋转和位移等基本操作的矩阵表示,以及矩阵逆操作的意义。最后,提到了如何组合变换矩阵来实现复杂的几何变换,如绕某点旋转。

Homogeneous Coordinates(齐次坐标)

在一个二维的空间中,对点做位移操作无法通过二维矩阵作用完成。因此用齐次坐标来完成对所有操作的表示。

齐次坐标中:

2D Point=(x,y,1)T(x, y,\textcolor{orange}1)^T(x,y,1)T 2D Vector=(x,y,0)T(x, y,\textcolor{orange}0)^T(x,y,0)T

对点进行位移操作:
(x′y′w′)=(10tx01ty001).(xy1)=(x+txy+ty1)\begin{pmatrix}x^{'}\\y^{'}\\w^{'}\end{pmatrix}=\begin{pmatrix}1&0&t_x\\0&1&t_y\\0&0&1\end{pmatrix}.\begin{pmatrix}x\\y\\1\end{pmatrix}=\begin{pmatrix}x+t_x\\y+t_y\\1\end{pmatrix}xyw=100010txty1.xy1=x+txy+ty1

www坐标为0或1的有效操作:
vector+vector = vector
vector+point = point
point - point = vector
point + point比较特殊,(xyw)\begin{pmatrix}x\\y\\w\end{pmatrix}xyw表示为一个2D Point(x/wy/w1)\begin{pmatrix}x/w\\y/w\\1\end{pmatrix}x/wy/w1,其中www不为0
因此point + point = point(两点的中点)

Affin Transformation仿射变换
(x′y′1)=(abtxcdty001).(xy1)\begin{pmatrix}x^{'}\\y^{'}\\1\end{pmatrix}=\begin{pmatrix}a&b&t_x\\c&d&t_y\\0&0&1\end{pmatrix}.\begin{pmatrix}x\\y\\1\end{pmatrix}xy1=ac0bd0txty1.xy1

Scale 放缩
S(sx,sy)=(sx000sy0001)\bold{S}(s_x, s_y)=\begin{pmatrix}s_x&0&0\\0&s_y&0\\0&0&1\end{pmatrix}S(sx,sy)=sx000sy0001

Rotation 旋转
R(α)=(cos⁡α−sin⁡α0sin⁡αcos⁡α0001)\bold{R}(\alpha)=\begin{pmatrix}\cos{\alpha}&-\sin{\alpha}&0\\\sin{\alpha}&\cos{\alpha}&0\\0&0&1\end{pmatrix}R(α)=cosαsinα0sinαcosα0001

Translation 位移
T(tx,ty)=(10tx01ty001)\bold{T}(t_x, t_y)=\begin{pmatrix}1&0&t_x\\0&1&t_y\\0&0&1\end{pmatrix}T(tx,ty)=100010txty1

一个矩阵的逆矩阵意味着进行逆操作,如顺时针旋转α\alphaαR(α)\bold{R}(\alpha)R(α),则R−1(α)\bold{R}^{-1}(\alpha)R1(α)为逆时针旋转α\alphaα

Composing Transforms复合变换
变换是有顺序的,即矩阵的作用顺序不能随意改变。复杂的变换可以拆分成几个基础的变换矩阵的乘积。

如何表示绕某个点c旋转?
可以先将点c移动到原点,进行旋转,再移动回c。
T(c)⋅R(α)⋅T(−c)\bold{T}(c)\cdot\bold{R}(\alpha)\cdot\bold{T}(-c)T(c)R(α)T(c)

3维空间中雷同

源码来自:https://pan.quark.cn/s/a3a3fbe70177 AppBrowser(Application属性查看器,不需要越狱! ! ! ) 不需要越狱,调用私有方法 --- 获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。 支持iOS10.X 注意 目前AppBrowser不支持iOS11应用查看, 由于iOS11目前还处在Beta版, 系统API还没有稳定下来。 等到Private Header更新了iOS11版本,我也会进行更新。 功能 [x] 已安装的应用列表 [x] 应用的详情界面 (打开应用,删除应用,应用的相关信息展示) [x] 应用运行时信息展示(LSApplicationProxy) [ ] 定制喜欢的字段,展示在应用详情界面 介绍 所有已安装应用列表(应用icon+应用名) 为了提供思路,这里只用伪代码,具体的私有代码调用请查看: 获取应用实例: 获取应用名和应用的icon: 应用列表界面展示: 应用列表 应用运行时详情 打开应用: 卸载应用: 获取info.plist文件: 应用运行时详情界面展示: 应用运行时详情 右上角,从左往右第一个按钮用来打开应用;第二个按钮用来卸载这个应用 INFO按钮用来解析并显示出对应的LSApplicationProxy类 树形展示LSApplicationProxy类 通过算法,将LSApplicationProxy类,转换成了字典。 转换规则是:属性名为key,属性值为value,如果value是一个可解析的类(除了NSString,NSNumber...等等)或者是个数组或字典,则继续递归解析。 并且会找到superClass的属性并解析,superClass如...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值