GAMES101笔记 Lecture03 Transformation

news2024/9/23 1:31:11

目录

    • Transoformation(变换)
      • Why stuty transformation(为什么要学习变换呢?)
      • 2D transformations(2D变换)
        • Scale transformation(缩放变换)
          • Reflection Matrix(反射矩阵)
          • Shear Matrix(切变矩阵)
        • Rotate transformation(旋转变换)
        • Linear Transforms = Matrices(线性变换 = 矩阵)
      • Homogeneous coordinates(齐次坐标)
        • Translation(平移) 引入齐次坐标
        • Solution: Homogenous Coordinates(解决方法:齐次坐标)
        • Affine Transformations(仿射变换)
        • Inverse Transform(逆变换)
      • Composing Transforms(组合变换)
      • Decomposing Complex Transforms(分解复杂的变换)
      • 3D Transforms(三维的变换)
      • 参考资源

Transoformation(变换)

Why stuty transformation(为什么要学习变换呢?)

2D transformations(2D变换)

Scale transformation(缩放变换)

在这里插入图片描述
写成数学形式:
x ′ = s x x' = sx x=sx
y ′ = s y y' = sy y=sy
在这里, s = 0.5 s = 0.5 s=0.5
写成矩阵形式,结果如下:
[ x ′ y ′ ] = [ s 0 0 s ] [ x y ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} s & 0 \\ 0 & s \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right] [xy]=[s00s][xy]

在这里,我们称矩阵 [ s 0 0 s ] \left[\begin{array}{ll} s & 0 \\ 0 & s \end{array}\right] [s00s]为缩放矩阵。
如果缩放不是均匀的:
在这里插入图片描述
此时变换可以写成如下形式:
[ x ′ y ′ ] = [ s x 0 0 s y ] [ x y ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} s_{x} & 0 \\ 0 & s_{y} \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right] [xy]=[sx00sy][xy]

缩放矩阵: [ s x 0 0 s y ] \left[\begin{array}{ll} s_{x} & 0 \\ 0 & s_{y} \end{array}\right] [sx00sy]

Reflection Matrix(反射矩阵)

在这里插入图片描述
坐标变换 x ′ = − x , y ′ = y x^{\prime} = -x, y^{\prime} = y x=x,y=y

Shear Matrix(切变矩阵)

在这里插入图片描述
提示:

  • 竖直方向上的位移始终为 0 0 0
  • y = 0 y = 0 y=0时,水平方向的位移为 0 0 0
  • y = 1 y = 1 y=1时,水平方向位移是 a a a

变换方程为: [ x ′ y ′ ] = [ 1 a 0 1 ] [ x y ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} 1 & a \\ 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right] [xy]=[10a1][xy]

Rotate transformation(旋转变换)

默认是绕着原点 ( 0 , 0 ) (0, 0) (0,0),逆时针旋转。
在这里插入图片描述
逆时针旋转角度 θ \theta θ的旋转矩阵如下:
R θ = [ c o s θ − s i n θ s i n θ c o s θ ] R_{\theta} = \left[\begin{array}{ll} cos{\theta} & -sin{\theta} \\ sin{\theta} & cos{\theta} \end{array}\right] Rθ=[cosθsinθsinθcosθ]

Linear Transforms = Matrices(线性变换 = 矩阵)

通过上面几个变换的例子,我们发现无论哪种变换,我们均可以写成矩阵的形式,因为它们都是线性变换:
x ′ = a x + b y x^{\prime} = ax + by x=ax+by
y ′ = c x + d y y^{\prime} = cx + dy y=cx+dy

变换方程如下:

[ x ′ y ′ ] = [ a b c d ] [ x y ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} a & b \\ c & d \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right] [xy]=[acbd][xy]

Homogeneous coordinates(齐次坐标)

Translation(平移) 引入齐次坐标

在这里插入图片描述
平移变换就不好写成两个矩阵相乘的形式,只能写成下面的形式:
[ x ′ y ′ ] = [ a b c d ] [ x y ] + [ t x t y ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} a & b \\ c & d \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right] + \left[\begin{array}{l} t_{x} \\ t_{y} \end{array}\right] [xy]=[acbd][xy]+[txty]

因为,平移操作并不属于线性变换。

但是,我们并不希望将平移当作一种特殊的情况考虑。
有没有一种特殊方式来表示全部变换呢?

Solution: Homogenous Coordinates(解决方法:齐次坐标)

添加一个新的维度:

  • 2D point = ( x , y , 1 ) T (x, y, 1)^{T} (x,y,1)T
  • 2D vector = ( x , y , 0 ) T (x, y, 0)^{T} (x,y,0)T

现在使用矩阵来表示平移变换,变换方程如下:
[ x ′ y ′ w ′ ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] = [ x + t x y + t y 1 ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \\ w^{\prime} \end{array}\right]=\left[\begin{array}{ll} 1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=\left[\begin{array}{l} x + t_{x} \\ y + t_{y} \\ 1 \end{array}\right] xyw = 100010txty1 xy1 = x+txy+ty1

向量具有平移不变性,这就是为什么向量的第三维是 0 0 0,可以有效地保证其在平移时保持不变。

[ x y w ] \left[\begin{array}{l} x \\ y \\ w \end{array}\right] xyw 表示的点都是 [ x / w y / w 1 ] , w ≠ 0 \left[\begin{array}{l} x / w \\ y / w \\ 1 \end{array}\right], w\ne0 x/wy/w1 ,w=0

在齐次坐标下,合法的操作:

  • vector + vector = vector
  • point - point = vector
  • point + vector = point
  • point + point = 两个点的中点

Affine Transformations(仿射变换)

放射变换等于线性变换加上一次平移变换

[ x ′ y ′ ] = [ a b c d ] [ x y ] + [ t x t y ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} a & b \\ c & d \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right] + \left[\begin{array}{l} t_{x} \\ t_{y} \end{array}\right] [xy]=[acbd][xy]+[txty]

使用齐次坐标,变换方程如下:
[ x ′ y ′ w ′ ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \\ w^{\prime} \end{array}\right]=\left[\begin{array}{ll} 1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] xyw = 100010txty1 xy1

现在可以使用一个方程来表示全部变换了,唯一的代价就是多了一维,增加了空间。

Inverse Transform(逆变换)

变换矩阵 M M M的逆矩阵 M − 1 M^{-1} M1在几何意义下也是逆变换。
在这里插入图片描述

Composing Transforms(组合变换)

变换的顺序是影响最后的结果的,因为矩阵乘法不满足交换律。
在这里插入图片描述
变换矩阵是从右到左进行应用的。
在这里插入图片描述

Decomposing Complex Transforms(分解复杂的变换)

如果绕着一个指定的顶点 c c c进行旋转:

  1. 首先将中心移动到原点。
  2. 旋转。
  3. 再将其移动回原来的位置。

变换表示如下:
T ( c ) ∗ R ( α ) ∗ T ( − c ) T(c) * R(\alpha) * T(-c) T(c)R(α)T(c)

3D Transforms(三维的变换)

使用齐次坐标进行表示:

  • 3D point = ( x . y , z , 1 ) T (x. y, z, 1)^{T} (x.y,z,1)T
  • 3D vector = ( x , y , z , 0 ) T (x, y, z, 0)^{T} (x,y,z,0)T

( x , y , z , w ) ( w ≠ 0 ) (x, y, z, w)(w \ne 0) (x,y,z,w)(w=0),表示的点为 ( x / w , y / w , z / w ) (x / w, y / w, z / w) (x/w,y/w,z/w)

使用下面 4 × 4 4 \times 4 4×4的矩阵来进行仿射变换:
( x ′ y ′ z ′ 1 ) = ( a b c t x d e f t y g h i t z 0 0 0 1 ) ⋅ ( x y z 1 ) \left(\begin{array}{l} x^{\prime} \\ y^{\prime} \\ z^{\prime} \\ 1 \end{array}\right)=\left(\begin{array}{lllc} a & b & c & t_{x} \\ d & e & f & t_{y} \\ g & h & i & t_{z} \\ 0 & 0 & 0 & 1 \end{array}\right) \cdot\left(\begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right) xyz1 = adg0beh0cfi0txtytz1 xyz1

参考资源

GMAES101 Lecture03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java泛型详解,史上最全图文详解

泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。 毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确使用泛型,是一门必修课。 一:泛型本质 Java 泛型(generics&#…

C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

Windows应用程序开发 一、实验目的 初步掌握Windows应用程序的设计方法。掌握常用窗体控件的使用方法。 二、实验内容 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健&#xf…

前端学习-html基础

html学习与总结 一、基础认知 1.1.1 认识网页(了解) ➢ 问题1:网页由哪些部分组成? ✓ 文字、图片、音频、视频、超链接 ➢ 问题2:我们看到的网页背后本质是什么? ✓ 前端程序员写的代码 ➢ 问题3&a…

设计模式的几大原则

设计模式原则 前言一.单一职责原则1.1 定义1.2 例子1.3 总结 二.里氏替换原则2.1 定义1.2 例子1.3 总结 三.依赖倒置原则3.1 定义3.2例子3.3总结 四.接口隔离原则4.1 定义4.2 例子4.3 总结五.迪米特法则5.1 定义5.2 例子5.3 总结 六.开闭原则6.1 定义6.2 例子6.3 结论 前言 设…

MongoDB复制(副本)集实战及其原理分析-04

MongoDB复制集 复制集架构 在生产环境中,不建议使用单机版的MongoDB服务器。 原因如下: 单机版的MongoDB无法保证可靠性,一旦进程发生故障或是服务器宕机,业务 将直接不可用。 一旦服务器上的磁盘损坏,数据会直接丢…

UDS系列-31服务(Routine Control)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍例程控制服务RoutineControl,该服务的目的是Client端使用Routine Control服务来执行定义的步骤序列并获取特定序列的相关结果。这个服务经常在EOL、Bootloader中使用,比如,检查刷写条件是否满足、擦除内存、覆盖正…

post接口请求测试,通俗易懂

目录 前言: GET方法和POST方法传递数据的异同 POST方法如何传递数据 接口测试软件简介 POST请求接口的测试 测试方法 3.保存接口测试用例,生成自动化测试套件 总结 前言: Post请求是HTTP中请求方法之一,用于向服务器提交…

AI 绘画(2):Ai模型训练,Embedding模型,实现“人物模型“自由

文章目录 文章回顾感谢人员题外话Ai绘画公约Ai模型训练硬件要求显存设置查看显存大小显存过小解决方法 视频教程前期准备SD配置设置SD设置配置SD训练配置pt生成训练集收集训练集要求截图软件推荐训练集版权声明一键重命名图片训练图片来源批量修改图片尺寸 开始训练导入训练集&…

MQTTX的使用

1.MQTT介绍 MQTT是一种常用的物联网协议。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅通信协议,用于在物联网(IoT)和机器对机器(M2M)通信中传输消息。 MQTT协议被设计用…

013.【排序算法】合并排序法

1. 合并排序法 合并排序法是针对已经排序好的两个或两个以上的数列,通过合并的方式,将其组合成一个大的且排序好的数列。首先是将无序的数列分成若干小份,分若干份的规则就是不断把每段长度除以2(对半分),…

Jmeter断言详细使用教程

目录 前言: 断言介绍与使用 响应断言 断言持续时间 XML断言 1、响应断言 2、JSON Assertion 3、Size Assertion(见图知意) 4、JSR223 Assertion JSR223 Assertion实例: 5、XPath Assertion 6、Compare Assertion 7、断言持续时间…

如何获得忠诚的铁粉

目录 1.选择热门主题 2.提供独特观点(原创精神) 3.写作风格(目录定位分点总结) 4.提供有价值的内容 5.总结: 📢导语:赢得铁粉(粉丝)的支持对于一个作者来说至关重要。…

前端Vue加载中页面动画弹跳动画loading

前端Vue加载中页面动画弹跳动画loading&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13091 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- ref:唯一ref top&#xff1a;距离中间顶部距离 --> <cc-loading ref&…

Postman大势已去,Apifox的时代已到来

目录 前言&#xff1a; 前情简介&#xff1a;亲身经历节选 Code: 403 “将我踢飞” 浓眉大眼的 Swagger 把我欺骗 工作提效的版本答案 为什么是Apifox 贴心为你 写在最后 前言&#xff1a; Apifox是一款基于web的API设计工具&#xff0c;提供了简洁明了的界面和丰富的…

Debezium系列之:Outbox Event Router

Debezium系列之&#xff1a;Outbox Event Router 一、认识Outbox Event Router二、使用发件箱模式进行可靠的微服务数据交换三、双写问题四、发件箱模式五、基于变更数据捕获的实现六、发件箱表七、发送事件到发件箱八、注册 Debezium 连接器九、主题路由十、Apache Kafka 中的…

交叉编译libcurl libosip libeXosip(包含openssl)

交叉编译libcurl ./configure --with-ssl/home/zx/zxapp/openssl-1.1.0l/output --without-zlib --enable-shared --enable-static --hostarm-linux-gnueabihf CCarm-linux-gnueabihf-gcc --prefix$PWD/build 交叉编译openssl ./config no-asm shared -fPIC --prefix/home/…

ColorUI 全网最全使用文档(建议收藏)

Color UI 我想大家都知晓吧&#xff0c;我就不过多阐述了&#xff0c;是 文晓港 大佬开发的一款适应于H5、微信小程序、安卓、ios、支付宝的高颜值&#xff0c;高度自定义的 Css 组件库.&#xff0c;属于出道即巅峰的史诗级大作&#xff0c;众所周知&#xff0c;万物皆可 Color…

【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【雕爷学编程】Arduino动手做(115)---HB100多普勒雷达模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

思科交换机与路由器基础命令(二)

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、静态路由与默认路由配置命令 1、静态路由 2、默认路由 3、查看路由表 三、使用ping命令测试连通性 1、排除物理故障&#xff…