压轴出场的变换

news2024/11/15 21:35:29

Why study transformation

为什么我们要学习变换呢?

先认识两种不同的变换:Modeling(模型变换)、Viewing(视图变换)

描述摄像机位置的移动是变换的一个重大应用(平滑曲线移动),会跳舞的机器人

bc00e51628094de4af938977bb27e254.png

a4e6ca2cc54349babf1794021e81d130.png

动画: 

cc1c0909b6ae4e58b4addabe91154656.png

经典的开场 :变换可表示缩放动画

b18ade7432b943b6b379969916d765df.png

光栅化成像也大量涉及到变换,三维空间拍照片会变成二维图片(投影也是一种很重要的变换)

2D Transformations:Rotation,Scale,Shear

Scale 

4df6d2dcc0e146628060064753377058.png

 图像的缩放是一种很常见的变换,将原图缩小到原来的eq?%5Cfrac%7B1%7D%7B2%7D

aaa66fa3c0c64b5ebb97422a89646cca.png

可以将其写成矩阵形式:一个(缩放矩阵)对角阵:

b578978094e941f9ab81bdc3a3589116.png

那假如缩放的比例不一样呢?

 8784df5f35f943beafb698ec8c682265.jpeg

不一样也没关系,只要让Sx和Sy不相同就可以了 

Reflection Matrix

f90e760feb784064a9c6e9c6b8c1caa0.jpeg

镜像反转坐标嘞

 Shear Matrix

b45389c0d42c4b94a74b106bec6f43f4.png

切变就是拿到一张图,这张图有弹性,可以拽着上面那条边向右拉,拉歪后形成右面的结果

水平方向坐标发生变化,竖直方向坐标并没有变 

任何x水平方向的移动都是a×y:

 

4bb3cad338444ef884277c19445b3b27.png

Rotate

旋转变换:

edb146a89ca34f688b3d720f8f5c88a5.png

二维平面内绕着原点逆时针旋转45°  ,最重要的是找到一一对应的关系 

8498fc6eb4684b4e92944d2165a7b1f9.png

这个公式是整体性的,也就是说特殊点也符合该公式(1,0): 

f7d711509b1c4acb96cdb164dffb23d9.png

将这个矩阵展开:

16bb7d13ddc84f2ab905529beaea0f25.png

用这个特殊点(1,0)将A和C的值得到了,可以再用一个特殊点(0,1)将B和D的值算出来,最终结果:

547c044794aa4053b5b0abdacd2bd689.jpeg

共性:

f0b6daa39ed1424798b8b1f46a422313.png

这种形式我们称之为线性变换 (要用相同维度的矩阵×向量)

Homogeneous coordinates

 齐次坐标是一个需要注意的点,为什么要引入齐次坐标这样一个概念呢?

有一种很特殊的变换是平移变换:

3135b0ca99ab4e128986b25ccc865210.png

这一看就是很简单的一个变换呀:

 554feafbef4b437b9534679e334fc53d.png

这确实很简单,但存在一个问题,能不能把它写成矩阵形式,我们只能把它写成这样的形式:

0d821680e4e14bb8b4c5f1d8d0a826bc.png

平移操作不属于线性变换的范畴嘞,但是我们由于懒,不想把这个当做一个特殊情况去考虑,那有没有办法让所有变换都用一种简单的形式表达出来呢?

人们在长期探索中发现我们可以引入一种形式来表示坐标:将二维增加一个维度,对于点和向量写成这样的形式:

c1cfda6b9138475a8144f14ba529a3a2.png

 好处就是可以写成这样的形式:

262a1f6ec08a47d4b13a5a4fc7c414ba.png

引入齐次坐标之后,通过增加一个数将平移变换也写成矩阵×向量的形式

那为什么要把点和向量区别对待呢?

有个概念:向量方向不变(平移不变性),将向量的新增维度置零保持向量的不变性

6a056c31e3164c9988d3d41719984525.png

 点+点定义被扩充:

描述二维的点,表示两个点的中点(2-->1):

5426dfb13ce141b694f40900c18ff188.jpeg

Affine Transformations 

所有的仿射变换都可以写成齐次坐标的形式:

7c78a2e7609b498cb6fa81467e7afde6.png

用一个矩阵就可统一所有的操作:

1a0eab856efb40b79d90f4605c0a1020.jpeg

代价就是引入了额外的数字 

Inverse Transform

逆变换是将操作(撤销:Ctrl+U)返回来:

01a14332d8c6488fbc07d38ba6353d50.jpeg

Composing Transforms

组合变换是什么意思捏?还是举个例子:

dfce9175941b46a5bc9c105ae1830512.png

这样的变换是怎么得到的呢?

 我们可能可以这样做:

881740bc1d164dee9b597034f05614dc.png

平移后旋转发现和目标并不一致 

那怎样做能达到效果呢?这样就可以啦:

62ec6864db0e4398a1bad5bc12c1314a.png

明确两个点:

复杂的变换可以由简单的变换得到,变换的顺序十分重要 

057864e3d3f34397a9cbd1d4d27f9b4f.png

矩阵不满足交换律 ,向量默认是列向量,×矩阵,矩阵放在向量的左边,上面展示的是从右到左依次应用矩阵

这个概念是可以推广的:

6b26329c17414690b839f3ebaffbf248.png

从A1到An依次应用,用矩阵写就是上面的形式

 矩阵没有交换律但有结合律,那对它有什么作用呢?

可以表示非常复杂的变换

Decomposing Complex Transforms

e7bf65c22085497ab955bae80caf1e94.jpeg

变换不仅可以合成,还可以分解

旋转有缺省方式(以原点为中心逆时针旋转45°),那不想绕着原点为中心旋转该怎么办呢?

按照以上步骤:平移 -> 旋转 -> 平移,这是分解(从右到左)

3D Transformations

三维变换要复杂些,也会涉及到平移,老样子:

8eeca1e324f149da98571663ab9e3045.png

 齐次坐标矩阵×点:

f2d75ad1ea1749ceac3d438095d5fb32.png

 先线性变化,再平移

c70a42fcc28c45d38b3af98c9abd1970.png

旋转角度,顺时针旋转和逆时针旋转,相当于转置

从定义上看这是互逆操作:旋转矩阵的逆等于旋转矩阵的转置

Scale

缩放,和二维空间差不多:

35c336307683439dbbddbc33224a8e4e.png

Translation

平移,也不再赘述:

c1b7afa027344f80be8b58871d655cc8.png

 Rotate

三维变换中最复杂的可能就是旋转了:

05a2c7020c9042a3b06afeb47f676ca7.jpeg

上面是绕着某个坐标轴旋转,绕着y轴旋转有点问题:

根据右图可以看出,z叉乘x能得到y,而不是x叉乘z,这就是为什么是反的原因

复杂的问题可以转化成简单问题的组合:

9344a6d28bac413eb0bba6eb88f34e37.jpeg

 给我们简单的旋转来描述复杂的旋转,在图形学中发明了个可以描述任意旋转的式子:

666e72cf8ce94650aaf433086901020d.png

定义旋转轴(平移 -> 旋转 -> 平移),旋转角度 ,N(向量叉乘的对应矩阵)

Viewing transformation

View/Camera transformation

什么是视图变换呢?

f0f3fcc3f1d14893a1fc840a2441ccfe.png

摆pose-->找角度-->“茄子!”

在图形学中也进行着类似的变换,摆放相机:

69559c444a66404b954031a6993ee945.png

下一步是如何进行视图变换,当相机和所有物体一起移动的时候,得出的结果可能是一样的,那我们不妨把相机固定,让相机的位置永远不变,都是物体在移动,把相机放在原点处,沿着-z看 :

6217159c5e224188bdb833825432235d.jpeg

从任意位置调整到标准位置该怎么做呢?

792b61c692b4490f9690cb053ffe54d8.png

移中心 --> 旋转到-z ...

写成矩阵形式:

c083f8cdfd4744b6960165868cb2e7bc.png

 任意-->标准不好搞,但是标准-->任意较简单

 对旋转矩阵求逆,逆就是它的转置,这就是视图变换

相机物体应用同样的变换,相机落到相应的位置上,物体也就落在了相应的位置上

97e64516e50d46c1829b5e85d684cf74.png

Projection transformation

投影,投影分为正交投影和透视投影:

2911c05000b042d78217f54898124cfb.png

人眼成像更接近于右面的透视投影(平行线不再平行,相交到某一个地方)

 正交投影更多应用于工程制图,正交投影没有近大远小

93a3d492c2db44ebadeea683e6291afc.png

Orthograhic projection

正交,正交投影比较简单易学,不论远近,挤到一个平面就可以了,这样摆放:

067ee6ee759641b091d62833894b587c.png

好处是把Z扔掉自然就是一个平面了,但这样的操作不是很方便,在图形学中还有一种方式:

a403a3416878455e99b4cab23c2fdb97.png

采取平移后缩放的方式,将变换写成矩阵的形式用数学变换来做:

41d145b7ab2a41f0903c64a4d2576e36.png

Perspective projection

透视

 e4ff32665668452dbcb26a6002de03a4.png

透视投影是图形学中应用比较广泛的投影,近大远小(平行线永不香蕉,但近大远小)

 a6d695ddc9a3448299be7b8d27ff9128.png

看我的蕉币: 

71208778808a4300a9a6129bb15c369e.png

为什么这么多冰香蕉?

在透视投影中,一个投影相当于投影到另外的平面上,这种情况下将不代表平行线

740212f7adff44bc844ed0098d1e84ce.png

×z也是×,定义远近两个平面:

 3f2e543e0ec0430f8d6f294568fa901e.png

透视投影=挤压+正交投影 

那么我们怎么挤压呢?

b7b95ebaef4b4e70a47753d58ae02538.png

根据相似三角形求比值,已经告诉我们很多信息了,上下挤压可以被映射到右边的向量:

810c4b58dda74279a00b2ca6e040a34d.png

 

 根据已有关系推导矩阵:

f7c8c2bd6e5d44ffba0a2a767ac883d0.png

剩余的一行怎么办捏?

 任何一点近的平面没关系,远一点的平面也没关系

5400807c95cd4dc5806a206c31cc053e.png

 特殊点被映射成自己:

4e7d80f3fcd9457aa90dd9a57296419a.png

所以根据特殊点可以推断出第三行的前两个值(0,0)

在远平面上依旧如此,我们取远平面的中心点,挤压后仍然是最初的美好

c332033db8cd4693991c4304b3992c70.png

 

把这两个式子放到一块:

c0f1226796124281b1a06ea17f221bba.png

后面就是正交投影变换啦!是不是还挺简单的

 变换就到这告一段落啦!拜拜~

 

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

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

相关文章

在云中确保安全的五个技巧

随着采用云计算战略并开始充分意识到云计算技术可以提供的回报,企业可以做些什么来改善他们的风险状况?以下是德迅云安全在云中确保安全的五个技巧。 德迅云安全对如何在云计算基础设施中确保安全的五个技巧进行了阐述和分析。 在当今的混合工作环境中&#xff0c…

一个全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核详解》(可下载)

随着摩尔定律的逐渐放缓,传统的芯片设计方法面临着越来越多的挑战。而FPGA以其并行处理能力和可编程性,为解决复杂问题提供了新的途径。它允许设计者在同一个芯片上实现多种不同的功能模块,极大地提高了资源的利用率和系统的综合性能。 FPGA…

精通Java异常机制,写出高质量代码

作为一名Java开发人员,异常处理是一个无法回避的话题。无论你是初学者还是老手,精通异常处理对于写出高质量、可维护的代码至关重要。今天,我将与大家分享关于Java异常处理的一切,助你在代码质量的道路上突飞猛进! 一、什么是异常…

【RSGIS数据资源】1981-2021年中国陆地生态系统蒸腾蒸散比数据集

文章目录 摘要基本信息数据结构和内容采集方法信息数据处理方法与数据质量 摘要 本数据集涵盖了中国陆地生态系统蒸腾蒸散比(T/ET)、蒸腾(T)及蒸散(ET)三组数据。基于模型-数据融合方法,集成PT…

在window中使用HTTP服务器获取kali的文件

文章目录 一、在window中使用HTTP服务器获取kali的文件1、疑问2、执行条件3、成功读取 一、在window中使用HTTP服务器获取kali的文件 1、疑问 有时候kali上面有的文件想传入window但是发现不允许这样操作那怎么办呢?特别是在一些限制工具的比赛中想把kali的文件传…

杨校老师课题之基于Idea的SSM实训项目案例开发之在线手机商城开发(一)【非常适合初学者】

1.前期配置 2.开发涉及技术栈和工具 2.1 技术栈 后端: SSM前端:Html、CSS、BootStrap(官方定义好的CSS样式)数据库: MySQL 2.2 开发环境(工具) 进行本次开发,需要具备如下环境: JDK a. JDK8.0/1.8 b. 注意: 没有JDK是无法运行IdeaIDEA a. …

GPT-4o:重塑人机交互的未来

一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能(AI)领域,自然语言处理(NLP)技术一直被视为连接人类与机器的桥梁。近年来,随着深度学习技术的快速发展,NLP领域迎来了前所未有的变革…

SQL问题的常用信息收集命令及解决思路 |OceanBase应用实践

面对SQL问题,大家的常用的分析思路是: 一、问题是否源于SQL本身?是的话需进行SQL调优。 二、SQL语句本身无误,但执行效果并未达到我们的预期效果。 检查当前的服务器负载状况,例如CPU利用率、内存占用、IO读写等关键…

【服务器部署篇】Linux下Node.js的安装和配置

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

二叉树链式结构的前序_中序_后续_层序遍历【详细图解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

unity中的常用属性修饰符

unity中的常用属性修饰符 一、前言二、常用修饰符三、结语 一、前言 在做unity开发编辑脚本的时候经常会用到属性修饰符,使开发调试更加便捷。初学者见过最多的莫过于[Header("标题文本")]了吧,除此之外其实还有很多,这篇文章列举说…

「异步魔法:Python数据库交互的革命」(二)

哈喽,我是阿佑,上篇文章带领了大家跨入的异步魔法的大门——Python数据库交互,一场魔法与技术的奇幻之旅! 从基础概念到DB-API,再到ORM的高级魔法,我们一步步揭开了数据库操作的神秘面纱。SQLAlchemy和Djan…

[Linux系统编程] 静态库与动态库

一.库的概念 库是写好的现有的,成熟的,可以复用的代码。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。…

[leetcode hot 150]第一百九十一题,位1的个数

题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中设置位的个数(也被称为汉明重量)。 这道题比较简单,直接对最后一位进行与1的与操作,然…

JVM之垃圾判断的详细解析

垃圾判断 垃圾介绍 垃圾:如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾 作用:释放没用的对象,清除内存里的记录碎片,碎片整理将所占用的堆内存移到堆的一端,以便 JVM 将整理出的内…

microk8s 报错tls: failed to verify certificate: x509:

问题: ssh命令出现如下图所示 输入任何microk8s的容器命令几乎都是x509报错 kubectl get pods -ALL 原因: 证书过期 相关文档: MicroK8s - 服务和端口 Microk8S v1.24 - refresh-certs 似乎无法刷新证书 问题 #3241 规范/microk8s Git…

Mybatis进阶——动态SQL(1)

目录 一、 <if> 标签 二、<trim> 标签 三、<where> 标签 四、<set> 标签 五、<foreach> 标签 六、<include> 标签 动态SQL 是Mybatis的强大特性之一&#xff0c;能够完成不同条件下的不同SQL拼接&#xff0c;可以参考官方文档&#…

端到端目标检测 |从DETR 到 GroundingDINO

文章目录 一&#xff0c;DETR1. 简介2. 亮点3. 细节4. 总结一下 二&#xff0c;GroundingDINOGrounding DINO的整体流程Grounding DINO的目标函数 一&#xff0c;DETR 之前的目标检测框架&#xff0c;需要很多的人工干预&#xff0c;很多的先验知识&#xff0c;而且可能还需要…

AppInventor2 表格布局的外面的黑框怎么去掉?

问&#xff1a;表格布局的外面的黑框怎么去掉啊&#xff1f; 答&#xff1a;这个黑框是界面设计的布局位置示意&#xff0c;实际 App 测试时并没有框。 来源&#xff1a;AppInventor2 表格布局的外面的黑框怎么去掉&#xff1f; - App应用开发 - 清泛IT社区&#xff0c;为创新…

SQL查询电商数据案例

包括&#xff0c;Python连接数据库到模拟电商数据库&#xff0c;到sql场景查询 1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码&#xff1a; import random import time import pymysql# 定义名字数据 xing ["王", "李",…