图形几何之美系列:仿射变换矩阵(二)

 在几何计算、图形渲染、动画、游戏开发等领域,常需要进行元素的平移、旋转、缩放等操作,一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等,四元数在图形学中主要用于解决旋转问题,特别是在三维空间中绕任意轴的旋转,且四元数与仿射变换可以相互转换。

上一篇我们介绍了仿射变换矩阵原理、构成和转换:图形几何之美系列:仿射变换矩阵。

本篇我们继续进行探索,包括左乘还是右乘左手/右手坐标系先转后偏等内容。

1. 左乘还是右乘

    通过前文(图形几何之美系列:仿射变换矩阵)办法构造的仿射变换矩阵作用于点和向量时是左乘,且如果有多次姿态变换时,需要依次将对应的仿射变换矩阵左乘于点或向量。

    如物体Object依次经过旋转、偏移、绕点P缩放姿态变换,对应的仿射变换矩阵分别为TrsRotate、TrsTrans、TrsScaleBaseP,其数学表达如下,

图片
图:左乘

    可以右乘吗?在把点或向量看作1X4矩阵时,可以右乘4X4的仿射变换矩阵吗?答案是可以,但需要更改4X4矩阵的构造,对其进行转置。

1. 一般我们不采用右乘的方案,你可以简单的认为是业界如此,需要制定清晰和明确的规则,方便大家学习和执行。
2. 就像在世界各国汽车要靠右侧或左侧行驶一样,需要制定明确清晰的规则,方便大家学习和遵守,如果都可以,那道路将无法畅通。

2. 右手坐标系&左手坐标系

    仿射变换矩阵和左手或右手坐标系有关系吗?或者只能应用于右手坐标系吗?
仿射变换矩阵和左右手坐标系没有关联关系,其应用也没有局限于此,甚至可以将左手坐标系的物体转换为右手坐标系下的度量,只要你愿意。

提示
1. 通过修改4X4矩阵中左上角的3个列向量即可进行左右手坐标系间的转换,比如当左手坐标系相对于目标右手坐标系仅存在X轴方向反向时,可以将X轴基向量baseX取反即可得到到目标右手坐标系的仿射变换矩阵。
2. 这其实和局部坐标系转为世界坐标系是类似的,可以认为左手坐标系是局部坐标系,而目标右手坐标系是世界坐标系。
3. 即使实际情况比较复杂,也可以基于上述章节中仿射变换矩阵构成和原理进行矩阵的构造。
4. 镜像变换也是类似的原理。

3. 先转后偏

        如果一次变换中存在多种类型的姿态变换,需要先构造矩阵左上角的3X3部分(缩放、旋转、镜像、非均匀变换),最后再叠加偏移。

如果先偏移,则需要基于偏移值的坐标点进行矩阵左上角3X3部分的构造,这将变得复杂的多,这对于大多数人来说不可接受,毕竟我们很多时候要做的是化繁为简,同时提高精度。

图片
图:先转后偏

 

    如上图所示,我们对点P进行仿射变换,同时包含旋转和平移,即绕点T旋转Θ,然后平移向量P'P''

如果是先旋转后偏移:(1)P绕T旋转θ;(2)移动P'P'';即可得到最终姿态P''。

补充
构造P绕T旋转θ的仿射变换矩阵时:

  1. 可以先构造偏移TO的偏移矩阵(这样T偏移到了原点,而P可以绕原点旋转了)TrsT2O;

  2. 然后构造P绕原点旋转θ的3X3矩阵,再叠加OT偏移得到TrsRotate_and_O2T;嘿嘿,这又是一个先转后偏的实践。

  3. 左乘上述两个矩阵得到结果矩阵:TrsRotate_and_O2T x TrsT2O

    如果是先偏后转,问题将变得复杂,在偏移P的同时需要对T也作相同力度的偏移,没错,进行“先偏”操作时,你需要关心其他姿态变换元素,如“绕T旋转的元素T”;然后再绕T'点旋转θ。

图片
图:先偏后转

    记住,我们是要化繁为简,以清晰便捷的过程去处理问题,这会降低错误的发生,也降低了学习成本,提高学习工作体验。

谁不愿意开心的学习和工作呢?对,还有开心的生活~

    注意,如果同时有旋转、缩放、镜像、不均匀变换时(如透视投影)时,这几种姿态变换没有先后顺序的要求,你可以先转后缩,也可以先缩后转。想一想4x4矩阵的构造,这几种类型都是左上角3x3部分,该部分3列实际上是三个基向量。

欢迎关注,图形几何之美系列 将继续更新......

  1. 图形几何之美系列:三维实体结构表达

  2. 图形几何之美系列:仿射变换矩阵

  3. 图形几何之美系列:仿射变换矩阵(二)

4.写在后面

图形几何、数据处理、并行计算相关研究和研发,公众号:geometrylib,欢迎交流。

 

_________哈市雪花__________

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

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

相关文章

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,或者是第三方公司提供的是Android的库,这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种,Module模…

微信小程序——用户隐私保护指引填写(详细版)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

reg注册表研究与物理Hack

reg注册表研究与物理Hack 声明:内容的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 目录 reg注册表研究与物理HackWindows注册表修改注册表实现应用程序开机…

[论文粗读][REALM: Retrieval-Augmented Language Model Pre-Training

引言 今天带来一篇检索增强语言模型预训练论文笔记——REALM: Retrieval-Augmented Language Model Pre-Training。这篇论文是在RAG论文出现之前发表的。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 语言模型预训练…

深入浅出WebSocket(实践聊天室demo)

文章目录 什么是WebSocket?WebSocket连接过程WebSocket与Http的区别重连机制完整代码使用方法心跳机制实现聊天室demo(基于Socket.io)参考文章、视频小广告~什么是WebSocket? WebSocket 是一种在单个TCP连接上进行全双工通信的协议(计算机网络应用层的协议) 在 WebSocket A…

CompletableFuture与CountDownLatch实现多任务并行执行

CompletableFuture与CountDownLatch实现多任务并行执行 前言:CountDownLatch可以实现多任务并行,最后收集结果。业务中更广泛的使用CompletableFuture来实现多任务并行 一、 CompletableFuture实现多任务异步执行 1.1 描述 CompletableFuture.supplyAsy…

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type:队列类型1.2、Name:队列名称1.3、Durability:声明队列是否持久化1.4、Auto delete: 是否自动删除1.5、Exclusive:1.6、Arguments:队列的其他属性&#xf…

重构代码之取消临时字段

在代码重构中,临时字段是一种常见的反模式。临时字段指的是一个类的字段在部分方法中会被赋值或使用,但在其他很多方法中却未被使用,导致代码的维护性和可读性变差。这种设计往往表明字段的存在是偶然的或局部的,而非类的真正属性…

springboot029基于springboot的网上购物商城系统

🍅点赞收藏关注 → 添加文档最下方联系方式领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 基于…

【大数据学习 | HBASE】habse的表结构

在使用的时候hbase就是一个普通的表,但是hbase是一个列式存储的表结构,与我们常用的mysql等关系型数据库的存储方式不同,mysql中的所有列的数据是按照行级别进行存储的,查询数据要整个一行查询出来,不想要的字段也需要…

二手交易平台测试用例设计和执行

🎄欢迎来到边境矢梦的csdn博文🎄 🎄追求开源思想和学无止境思想一直在提升技术的路上 🎄 🌈涉及的领域有:Java、Python、微服务架构和分布式架构思想、基本算法编程🌈 🎆喜欢的朋友可…

SpringBoot框架的简介及实现步骤

一,SpringBoot简介: Spring Boot 是一个由 Pivotal 团队开发的开源框架,它基于 Spring 框架,旨在简化新 Spring 应用的初始搭建以及开发过程。Spring Boot 提供了多种特性来帮助开发者快速地创建独立的、生产级别的基于 Spring 的应用。 在…

npm常用函数定义手册(持续更新)

使用国内源 # 查询当前使用的镜像源 npm get registry # 设置为淘宝镜像源 npm config set registry https://registry.npmmirror.com/ # 还原为官方镜像源 npm config set registry https://registry.npmjs.org/ sql.js npm install sql.js

蓝牙FTP 协议详解及 Android 实现

文章目录 前言一、什么是蓝牙 FTP 协议?二、FTP 的工作流程1.蓝牙设备初始化2. 设备发现与配对3. 建立OBEX FTP 连接4. 文件传输文件上传(通过OBEX PUT命令)文件下载(通过OBEX GET命令) 5. 关闭OBEX会话 三、进阶应用与…

七大AI知识库工具概览

在数字化转型的浪潮中,企业越来越注重知识管理的重要性。以下是七款各具特色的AI知识库工具,它们通过智能化手段助力企业在知识管理、团队协作及客户服务等方面取得显著成效。 HelpLook AI知识库 概述:作为一款SaaS软件,HelpLook…

[NewStar 2024] week5完结

每次都需要用手机验证码登录&#xff0c;题作的差不多就没再进过。今天把week5解出的部分记录下。好像时间过去很久了。 Crypto 没e也能完 这题给了e,p,q,dp,dq。真不清楚还缺啥 long_to_bytes(pow(c,dp,p)) 格格你好棒 给了a,b和提示((p2*r) * 3*a q) % b < 70 其中r…

26.校园快递物流管理系统(基于SSM和Vue的Java项目)

目录 1.系统的受众说明 2.相关技术 2.1 JAVA简介 2.2 SSM三大框架 2.3 MyEclipse开发环境 2.4 Tomcat服务器 2.5 MySQL数据库 2.6访问数据库实现方法 3. 系统分析 3.1 需求分析 3.2 系统可行性分析 3.2.1技术可行性&#xff1a;技术背景 3.2.2经济可行性…

数据编排与ETL有什么关系?

数据编排作为近期比较有热度的一个话题&#xff0c;讨论度比较高&#xff0c;同时数据编排的出现也暗示着数字化进程的自动化发展。在谈及数据编排时&#xff0c;通常也会谈到ETL&#xff0c;这两个东西有相似点也有不同点。 数据编排和ETL&#xff08;提取、转换、加载&#x…

CSS教程(二)- CSS选择器

1. 作用 匹配文档中的某些元素为其应用样式。根据不同需求把不同的标签选出来。 2. 分类 分类 基础选择器 包含 标签选择器、ID选择器、类选择器、通用选择器等 复合选择器 包含 后代选择器、子代选择器、伪类选择器等 1 标签选择器 介绍 又称为元素选择器&#xff0c;根…