【GAMES101】三维变换

news2024/11/23 10:35:47

games101的第四节课讲了三维变换和观察变换,我们这里先记录一下三维变换的知识,后面再讲观察变换

齐次坐标下的三维变换

类似于解决之前二维变换平移的问题,三维变换下用齐次坐标通过增加一个维度来表示,第四个维度为1表示这是个点,第四个维度为0表示这是个向量,这样就可以通过四维矩阵乘法来表示平移变换了

这样,所有的三维变换就可以通过一个矩阵乘法来表示了

 

和之前二维变换类似的,三维下的缩放和平移都可以用类似的矩阵表示

比较复杂的是三维中的旋转,二维中的旋转方式是固定的,要么是逆时针旋转要么是顺时针旋转 

但是在三维中旋转的角度可以是任意方向的,如何用一个变换矩阵来表示呢

首先从简单的x、y和z三个轴方向上的旋转来研究

如果是绕着x轴旋转,那么就是x坐标不变,y和z坐标在发生变化,类似于二维的旋转矩阵表示

如果是绕着z轴旋转,那么就是z坐标不变,x和y坐标在发生变化,类似于二维的旋转矩阵表示 

但是到了绕着y轴旋转时,实际的旋转矩阵是这样的

你可能会发现,之前正弦值都是右上角的是负的,为什么到了绕y轴旋转时,却变成了左下角是负的呢?

如何来理解这个事情,我们知道x和y叉乘可以得到z,y和z叉乘可以得到x,但是呢,x和z叉乘得到的是-y,只有z和x叉乘得到的才是y,所以呢,到了旋转的时候,实际上是整个的角度取反了,余弦函数是偶函数,所以没变化,但是正弦函数是奇函数,符号就发生了变化

现在呢我们知道了在三个轴上的旋转如何变换了,那么对于任意角度的旋转,实际上就可以通过在这三个轴上的旋转合成来实现,这一组角,就叫做欧拉角,好比飞机的俯仰pitch、偏航yaw和翻转roll

现在问题是如何用一个统一的矩阵变换来表示三维空间的旋转,实际上对于任意方向的旋转都可以表示为相对于某个方向的旋转轴旋转,这里引入罗德里德斯的旋转公式,可以根据旋转轴n和对应的旋转角度来完成任意方向的旋转

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

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

相关文章

自动数据增广论文笔记 | AutoAugment: Learning Augmentation Strategies from Data

谷歌大脑出品 paper: https://arxiv.org/abs/1805.09501 这里是个论文的阅读心得,笔记,不等同论文全部内容 文章目录 一、摘要1.1 翻译1.2 笔记 二、(第3部分)自动增强:直接在感兴趣的数据集上搜索最佳增强策略2.1 翻译2.2 笔记 三、跳出论文&#xff0c…

Python超级详细的raise用法

当程序出现错误时,系统会自动引发异常。除此之外,Python 也允许程序自行引发异常,自行引发异常使用 raise 语句来完成。 很多时候,系统是否要引发异常,可能需要根据应用的业务需求来决定,如果程序中的数据…

智能配电房解决方案

智能配电房解决方案运用物联网、云计算、大数据、人工智能等先进技术,构建具备遥测、遥信、遥控、遥调、遥视功能的智能配电房,依托电易云-智慧电力物联网实现对配电室的全面感知、智能监控、优化运行、精益管理,提高供电可靠性,降…

系统设计之数据库

为您的项目选择正确的数据库是一项复杂的任务。许多数据库选项都适合不同的用例,很快就会导致决策疲劳。 我们希望这份备忘单提供高级指导,以找到符合您项目需求的正确服务并避免潜在的陷阱。 注意:Google 关于其数据库用例的文档有限。尽管…

笔记本用gpu运行tensorflow-gpu,keras写的老程序,结果与原来不一样,一脸懵逼。

先说结论我笔记一是rtx3050ti, 重点RTX30系列最低要求CUDA版本为11.1,否则最后跑程序会报错。再说现象,突发奇想想在笔记本上运行一个以前在1080titensorflow-gpu1.5.2,keras2.2.4上面写的一个图像分类模型,先用cpu模式 运行一下一切正常。如…

探索正则可视化工具:让编程更直观、高效

导语:在当今的编程世界中,正则表达式已成为不可或缺的技能。然而,理解和编写正则表达式往往是一项具有挑战性的任务。为了降低门槛,提高编程效率,正则可视化工具应运而生。 一、正则表达式的简介与历史 正则表达式&a…

基于JNI实现调用C++ SDK

基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法,在逐一实践、踩坑后,最终还是敲定采用 JNI 方式进行实现。在文章开始的过程,会先大概讲讲笔者遇到的情况,因为封装方式需要根据实际…

文本润色工具有哪些,高质量的文本润色软件

在当今信息过载的时代,文本的重要性愈发凸显。即便是最精心构思的文章,若未经过仔细的润色,也难以达到最佳的表达效果。本文将专心分享文本润色工具的种类。 文本润色工具的种类 文本润色工具根据其功能和应用范围可以分为多个种类&#xff…

【C语言快速学习基础篇】之二控制语句、循环语句、隐式转换

文章目录 一、控制语句1.1、for循环1.2、while循环1.3、注意:for循环和while循环使用上面等同1.4、do while循环1.4.1while条件成立时1.4.2、while条件不成立时 C语言介绍 C语言是一门面向过程的计算机编程语言,与C、C#、Java等面向对象编程语言有所不同…

python pydoc生成API文档

pydoc是python内置的一个文档生成模块。 pydoc 模块会根据 Python 模块来自动生成文档。 生成的文档可在控制台中显示为文本页面,提供给 Web 浏览器访问或者保存为 HTML 文件。 对于模块、类、函数和方法,显示的文档内容取自文档字符串(即 _…

202350读书笔记|《再别康桥:徐志摩诗选》——微风起,清芬酝藉,不减荼

202350读书笔记|《再别康桥:徐志摩诗选》——微风起,清芬酝藉,不减荼 《再别康桥:徐志摩诗选》我觉得有时候诗人是很狂热的,上头的感觉。 有几首很喜欢,节选如下: 偶然 我是天空里的一片云&…

【STM32】TIM定时器输入捕获

1 输入捕获 1.1 输入捕获简介 IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时(上升沿/下降沿),当前CNT的值将被锁存到CCR中(把CNT的值读出来,写入到…

JavaScript编程基础 – 闭包(Closure)

JavaScript编程基础 – 闭包 JavaScript Programming Essentials - Closure By JacksonML 闭包和JavaScript的作用域有关。 我们需要先理解闭包的概念。 本文简要介绍闭包函数以及环境状态,并用实例说明闭包的创建及其基本用法。希望对学习及开发有所帮助。 1. …

sql优化常用的几种方法

SQL优化是数据库管理和应用开发中的一个重要环节,它涉及到对SQL查询语句的改进,以提高执行效率,减少系统负载,并优化资源使用。以下是一些常用的SQL优化方法,我会尽量覆盖一些关键的点。 使用合适的数据类型 选择适…

通俗易懂的案例+代码解释AOP 切面编程

目录 1. 理解AOP2 Before2.1 controller层2.2 service层2.3 自定义注解2.4 切面 advice 3 After4 Around spring的三大核心:IOC控制反转、DI依赖注入、AOP面向切面编程 刚开始接触springboot项目,前两个使用的多,亲自使用AOP的机会并不多&…

python自动化测试如何做数据缓存 ?这个第三方包推荐给你,方便又简单!

1.数据缓存说明 数据缓存可以说也是项目开发中比不可少的一个工具 ,像我们测试的系统中 ,你都会见到像Redis一样的数据缓存库 。使用缓存数据库的好处不言而喻,那就是效率高 ,简单数据直接放在缓存中 ,存取简单方便 。…

探索Scrapy-spider:构建高效网络爬虫

Spider简介 Scrapy中的Spider是用于定义和执行数据抓取逻辑的核心组件。Spider负责从指定的网站抓取数据,并定义了如何跟踪链接、解析内容以及提取数据的规则。它允许您定制化地指定要抓取的网站、页面和所需的信息。Spider的作用是按照预定的规则爬取网页&#xf…

12.7 C++作业

自由发挥登录窗口的应用场景,实现一个登录窗口界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//*******窗口相关设置********this->setWindowTitle("王者农药"); //设置窗口标题this->setWindowIcon(QIc…

OpenTiny Vue 3.12.0 发布:文档大优化!增加水印和二维码两个新组件

你好,我是 Kagol。 非常高兴跟大家宣布,2023年11月30日,OpenTiny Vue 发布了 v3.12.0 🎉。 OpenTiny 每次大版本发布,都会给大家带来一些实用的新特性,10.24 我们发布了 v3.11.0 版本,增加了富…