当前位置: 首页 > news >正文

(三)变换

---theme: default ---

前言

变换包括缩放(Scale)、非均匀缩放(Non-Uniform Scale)、(水平/垂直)镜像(Reflection)、剪切(Shear)、旋转(Rotation)和平移(Translation)等等。假如二维空间中存在一个或多个点(或多个点组成的图形/图像),我们可以对它进行一种或多种变换。

对二维空间中每个点的某种变换都可以表示为某矩阵与这个点做点乘,多种操作即多个矩阵与该点进行点乘。

变换分为线性变换非线性变换

线性变换

缩放(Scale)

请在此添加图片描述

非均匀缩放

请在此添加图片描述

镜像

请在此添加图片描述

剪切

请在此添加图片描述

旋转

请在此添加图片描述

综上,我们可以得出一个规律如下,即线性变换:

请在此添加图片描述

但是我们貌似漏了一种变换:平移。平移相对上面提到几种变换来说相对较为特殊,因为它是非线性的,即无法用一个矩阵点乘的方式来表示。

请在此添加图片描述

请在此添加图片描述

齐次坐标

那么我们是否有别的办法将平移也纳入到线性变换体系中呢?答案是肯定的!但需要付出代价,这个代价就是齐次坐标。所谓代价是因为齐次坐标将一个原本是n维的问题拓展到了n+1维。

齐次坐标为了解决平移与线性变换不统一的问题在原先维度上新增了一个维度,比如用三个值来表示二维中的点和向量:

请在此添加图片描述

通过上面的矩阵与(x, y, 1)做点乘,就得到了 x = x + t_x,y = y + t_y,将平移纳入到了线性变换的体系。

但是为什么对于二维中的点加一维是用“1”来表示,而对于向量却是“0”呢?原因就是向量具有平移不变性,即向量在二维空间中,它只表示方向和长度,并不表示位置,相反点在二维空间中只能表示位置,表示不了方向和长度。而平移恰巧是对位置的变换,所以它只影响点的数值,而不影响向量的数值,这也反向证明了向量的平移不变性。

其实 1 和 0 是有意义的,上图中的 w 可以理解为他们是二维中的点或向量在三维中的投影大小,当 w 不等于 0 时,x 方向的大小在三维中表示为 x/w,y 方向同理为 y/x。试想一下,当 w 为 1 时,这个点(x, y)在 x 方向正好为 x,y 方向正好等于 y。如下图所示:

请在此添加图片描述

那么为什么要加上 w 不等于零的条件呢?因为 w 等于零表示不存在高一级维度,等于一表示存在。所以可以理解为齐次坐标就是利用了高一级的维度来解决了低一级维度的变换不统一的问题。试想,我们本来就是要引入一维来辅助我们进行统一,却让它等于零,这显然不合理。

我们把这种借助高维来表示的变换也叫做仿射变换。则线性变换 + 平移 = 仿射变换。

请在此添加图片描述

自此,我们统一了二维空间中所有变换形式,将他们纳入到了线性体系中,缩放、旋转、平移矩阵也就可以表示为如下形式。

请在此添加图片描述

变换组合

既然可以将所有变换都表示为矩阵与点点乘(线性)的形式,变换之间进行组合时就表现出了与矩阵一致的特性:不符合交换律,符合结合律

逆变换

逆变换并不是一种新的变换形式,它与逆矩阵相对应,即在做了某种变换(如先向左旋转后再向右平移)后再逆向操作回原来的位置。这跟两个互逆矩阵点乘后的结果一致。

请在此添加图片描述

变换顺序

多个变换组合操作时,其顺序与矩阵也具有相同的属性,符合从右到左的顺序。如果要对某个点进行 A1,A2,...,An种变换,表示为矩阵则为按 An,...,A2,A1的顺序做点乘。

请在此添加图片描述

变换分解

变换不仅可以组合,也可以进行分解,如下图所示,我们的目标是将二维平面中的某图像以其某个点(非原点)进行旋转,则可以将这一过程分解为平移,旋转,再平移的过程。同样,过程中变换的顺序是不能改变的,要符合矩阵不可交换的定律。

请在此添加图片描述

拓展

将上述特性,包括齐次坐标,拓展到三维空间中的点和向量的话,则表示如下:

请在此添加图片描述

请在此添加图片描述

http://www.sczhlp.com/news/6498/

相关文章:

  • Python连接与操作Mongo_Alats
  • 【JPCS出版】第五届计算机、遥感与航空航天国际学术会议(CRSA 2025)
  • 浅谈 RAG 并基于 NodeJS 实现基础向量检索服务
  • 【IEEE出版】第二届计算机与信息安全国际会议(WCCIS 2025)
  • 静态链接和动态链接
  • GCC、CMake 和 vcpkg 的关系与应用
  • rust学习第一课:window环境报错(error: linker `link.exe` not found)
  • Python + Requests 接口自动化框架的实现
  • 数据库锁表现场排查与处理手册
  • CGCS2000 GK3degree坐标投影问题
  • 最短路径求解
  • 制造业痛点:图纸外发安全如何管控?2025最新技术方案解析
  • Qt | 四种方式实现多线程导出数据功能
  • 无法访问 Maven 3.8.1 http 仓库
  • 研发场景题
  • 漏洞挖掘-01
  • 微信扫描二维码登录的跳转重定向被浏览器阻止
  • 免费的个人网站托管-InfinityFree
  • 论保护电脑隐私的重要性
  • 详细介绍:C++高频知识点(十四)
  • Awaken Your Web 创新挑战赛
  • 基于若依框架二次开发
  • Windows报错:请求列出指定服务器上的可用功能失败问题处理
  • 模型和模型量化,模型量化后损失了什么
  • 服务器侧简单测试大模型问答实现
  • 【补题计划】 [BJOI2014] 大融合
  • [KAFKA] KAFKA消费者自动提交机制
  • 剑指offer-19、顺时针打印矩阵
  • CyberTalents蓝队奖学金CTF题解:从数字取证到网络安全的实战技巧
  • 大语言模型幻觉检测新工具与数据集