计算机图形学一:数学基础

数学基础(变换矩阵,向量运算等)

1.变换矩阵总结

一切物体(包括模型,向量等)的缩放,旋转,平移,切变等,都可以通过变换矩阵得到。在投影(projection)变换时也有很多应用。
本节简单的介绍一下变换矩阵

1.1 旋转

旋转在几何和线性代数中是描述刚体围绕一个固定点的运动的在平面或空间中的变换

我们这里只讨论“坐标系保持不动,向量绕坐标轴旋转”的观点。
因为当旋转与平移进行结合时,会因为先后顺序发生不同的情况
(先平移后旋转,物体的位置会因旋转而发生变换,原因是在平移后坐标空间发生的变化,因此再使用旋转矩阵进行变换是相对于世界空间原点进行变换的)
在这里插入图片描述

(先旋转后平移,物体的位置不会因为旋转而发生变化,原因是在平移前,已经做了旋转变换,因此旋转时物体本身坐标空间还在世界中心。)
在这里插入图片描述
回到正题
在这里插入图片描述
在这里插入图片描述
由于涉及到角度,所以可以把笛卡尔坐标系转换到极坐标系,设r为极半径,则P点坐标为
在这里插入图片描述
相应的,P’点坐标为
在这里插入图片描述
根据三角函数公式,联立两个方,可知,P’关于x,y的方程为:
在这里插入图片描述
用4x4矩阵可以表述为:
在这里插入图片描述
即,绕Z轴旋转的变换矩阵为:
在这里插入图片描述
同理可得下面几个常见的旋转变换矩阵:
在这里插入图片描述
其中逆时针是正方向,当顺时针旋转时,角度可以取负的正方向,之后根绝三角函数的奇偶性即可进行转换(意思是只要记住逆时针旋转的公式就行了)

1.2缩放

缩放在欧式空间中是描述延一个或多个坐标轴方向的缩放因子放大或者缩小物体的线性变化

每一个坐标轴方向都有其单独的缩放因子。
各坐标轴缩放因子不同,缩放后结果的形状可能发生变化,此时的缩放被叫做方向缩放。
在这里插入图片描述
如图,我们已知P点坐标,则P’点的坐标可以表示为:
在这里插入图片描述
用4x4矩阵表示为:
在这里插入图片描述
所以,三维缩放变换矩阵为:[外链图片转存失败,源站可能有防盗在这里插入链机制,建描述]议将图片上https://传(imbg.csdnimg.cn/9c92cd97df154zPXT1688c7a164b2a4f00f.pg08)(https://img-log.csdnimg.cn/9c92cd97df1541688c7a164b2a4f800f.png)]

1.3平移

平移在仿射空间中指物体延同一方向移动相同距离的变换

平移是一种等距同构的变换,可以被视为某一向量施加于物体没一点的结果。即,设v是已知向量,P为空间中一点,则平移:
在这里插入图片描述
如下图所示:
在这里插入图片描述

用4x4矩阵表示为
在这里插入图片描述
即平移变换矩阵为:
在这里插入图片描述

1.4 投影

投影是指一个从向量空间V映射到它自身的线性变换。

投影是生活中“平行投影”概念的形式化和一般化。例如,在现实生活中,阳光照射物体在地面留下的影子。我们假设阳光是沿着同一方向(平行且垂直于地面的)照射物体,地面是严格的平面。那么,这就是投影最直观的例子。

1.5总结

适用于列向量的4x4矩阵形式
在这里插入图片描述
这里的x,y,z与平移相关,分别是x,y,z轴的平移量。
a,b,c,d,e,f,g,h,i与线性变换相关。
l,m,n与透视投影变换相关。

为什么仿射变换要升维度?

线性变换在几何直观上有如下特点:

变换前后,直线仍然保持是直线的状态

变换前后,原点保持固定,不会变化

是因为我们无法通过矩阵的实现平移操作,平移会改变向量空间。

仿射变换,又称仿射映射,是指在几何中,对一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

仿射变换相比于线性变换,不需要保证变换前后坐标原点不变。

我们希望能通过矩阵的乘法实现一个通用的计算模式,来进行坐标点的变化。
因此就需要齐次坐标:齐次坐标的本质就是升维来解决问题。

通过增加一个维度,可以在高维度上,通过线性变换来处理低维度的仿射变换。

在这里插入图片描述

2.向量点乘,叉乘的定义及几何意义

2.1 向量点乘

点乘的数学定义:在这里插入图片描述
点乘的几何意义:两个单位向量之间夹角的余弦值。在这里插入图片描述

2.2 向量叉乘

参考:https://www.jianshu.com/p/ccdee786acbd
http://www.360doc.com/content/19/1222/18/40070800_881412732.shtml
https://juejin.cn/post/6886474840111317005
https://www.jianshu.com/p/c3e887c4c4f4

3.欧拉角与四元数与万向节死锁

欧拉角:

pitch俯仰角:点头,x轴为旋转轴。
yaw偏航角:左右摇头,y轴为旋转轴
roll滚动角:向日葵(招手)式的摇头,z轴为旋转轴。
在这里插入图片描述
在这里插入图片描述
经典面试题:欧拉角定义的旋转矩有什么问题,怎么处理?
欧拉角定义了绕着三个坐标轴的旋转角,来确定刚体的旋转位置的方式,包括俯仰角pitch,偏航角yaw和滚动角roll;
它的优点是比较直观,而且单个维度上的角度上比较容易插值;
缺点是它不能进行任意方向的插值,而且会导致万向节死锁的问题,旋转的次序也会对结果产生影响,也就是在旋转过程中会损失自由度。
我们依次绕坐标系x,y,z轴旋转,当绕y轴旋转90度后,z轴就指向了原来的x轴,这样一来。事实上只绕了x和y两个轴旋转,第三个轴的自由度缺失了。

四元数:

我们使用四元数一般就是简单的用来进行三维旋转,记住下面的几个公式:
首先,定义一个需要做的旋转。旋转轴为向量v = (vx,vy,vz),旋转角度为θ(右手法则的旋转)。
在这里插入图片描述
在这里插入图片描述
那么与此相对应的四元数(下三行式子都是一个意思,只是不同的表达形式)。
注意角度都是θ/2。
在这里插入图片描述
这是它的共轭(下三行式子都是一个意思,只是不同的表达形式)。
在这里插入图片描述

如果你想算一个点w = (wx,wy,wz)在这个旋转下新的坐标W’,需要进行如下操作。

    1. 定义纯四元数
      qw = (θ,wx,wy,wz) = θ+wxi+wyj+wz*k
    1. 进行四元数运算
      qw’ = q x qw x q-1
    1. 产生的qw’一定是纯四元数,也就是说它的第一项为θ,有如下形式:
      qw’ = (θ,wx’,wy’,wz’) = θ + wx’*i+wy’*j+wz’*k
    1. qw’中的后三项(wx’,wy’,wz’)就是w’:
      w’ = (wx’,wy’,wz’)

这样一来,就完成了一次四元数旋转运算。

同理,如果你有一个四元数:
q = (q1,q2,q3,q4) =在这里插入图片描述
那么,它对应一个以向量v = (vx,vy,vz)为轴旋转θ角度的旋转操作(右手法则的旋转)。

其他小记:

其实还有一些比较重要的数学上的知识,比如说MVP矩阵的推导,尤其是
VP矩阵的推导
三角形插值,透视插值矫正,光线追踪求交等。
都略知一二,但是都不是很深入,有待整理提高。
慢慢的往上加,但是一般在后面的章节里都有记载。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyCat垂直分库案例以及全局表概念讲解

这里的分片指的就是分库分表 1.垂直拆分 1.1场景介绍 1.2 数据库准备 1.3MyCat配置 schema.xml: <schema name"shopping" checkSQLschema"true" sqlMaxLimit"100"><table name"tb_goods_base" dataNode"dn1" pr…

Git基础知识:常见功能和命令行

文章目录 1.Git介绍2.安装配置2.1 查看配置信息 3.文件管理3.1 创建仓库3.2 版本回退3.3 工作流程3.4 撤销修改3.5 删除文件 4.远程仓库4.1 连接远程库4.2 本地上传至远程4.3 从远程库克隆到本地 5.分支管理5.1 创建分支5.2 删除分支5.3 合并分支解决冲突 参考&#xff1a; Git…

python与深度学习(十五):CNN和宝可梦模型

目录 1. 说明2. 宝可梦模型2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存 3. 宝可梦的CNN模型可视化结果图4. 完整代码5. 宝可梦的迁移学习 1. 说明 本篇文章是CNN的另外一个例子&#xff0c;宝可梦模型&#xff0c;是自制数据集的例子。之前…

b站视频标题的获取(xpath、jsonpath的一个简单应用)

目录 1.目的2.代码的演示 注&#xff1a;该篇文章为本人原创&#xff0c;由于本人学习有限&#xff0c;若有错误或者笔误或者有问题&#xff0c;欢迎大家进行批评指正&#xff0c;谢谢。 1.目的 在b站大学上&#xff0c;为了更好的写笔记&#xff0c;本人根据学到的Python(即Py…

element vue2 动态添加 select+tree

难点在 1 添加一组一组的渲染 是往数组里push对象 循环的&#xff1b;但是要注意对象的结构! 因为这涉及到编辑完成后&#xff0c;表单提交时候的 校验&#xff01; 是校验每一个select tree里边 是否勾选 2 是在后期做编辑回显的时候 保证后端返回的值 是渲染到 select中的tr…

C语言案例 按序输出多个整数-03

难度2复杂度3 题目&#xff1a;输入多个整数&#xff0c;按从小到大的顺序输出 步骤一&#xff1a;定义程序的目标 编写一个C程序&#xff0c;随机输入整数&#xff0c;按照从小到大的顺序输出 步骤二&#xff1a;程序设计 整个C程序由三大模块组成&#xff0c;第一个模块使…

实战项目——多功能电子时钟

一&#xff0c;项目要求 二&#xff0c;理论原理 通过按键来控制状态机的状态&#xff0c;在将状态值传送到各个模块进行驱动&#xff0c;在空闲状态下&#xff0c;数码管显示基础时钟&#xff0c;基础时钟是由7个计数器组合而成&#xff0c;当在ADJUST状态下可以调整时间&…

AlexNet卷积神经网络-笔记

AlexNet卷积神经网络-笔记 AlexNet卷积神经网络2012年提出 测试结果为&#xff1a; 通过运行结果可以发现&#xff0c; 在眼疾筛查数据集iChallenge-PM上使用AlexNet&#xff0c;loss能有效下降&#xff0c; 经过5个epoch的训练&#xff0c;在验证集上的准确率可以达到94%左右…

电源控制--品质因素Q值全解

什么是品质因素Q值&#xff1f; 在电源控制中&#xff0c;品质因素 Q 值通常用于描述电源滤波器的性能。电源滤波器用于减小电源中的噪声和干扰&#xff0c;以提供干净稳定的电源供应给电子设备。 品质因素 Q 值在电源滤波器中表示滤波器的带宽和中心频率之比&#xff0c;用于…

SpringBoot集成百度人脸识别实现登陆注册功能Demo(二)

前言 上一篇SpringBoot集成百度人脸demo中我使用的是调用本机摄像头完成人脸注册&#xff0c;本次demo根据业务需求的不同我采用文件上传的方式实现人脸注册。 效果演示 注册 后端响应数据&#xff1a; 登录 后端响应数据&#xff1a; 项目结构 后端代码实现 1、BaiduAiUtil…

【C++学习】STL容器——list

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比…

8月1日上课内容 第一章web基础与http协议

dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层--传输层---网络层----数据链路层-----物理层 ip地址&#xff0c;我们每一台主机都有一个唯一的地址标识(固定的ip地址)&#xff0c;区分用户和计算机通信。 ip地址:32位二进制数组成的&#xff0c;不方便记忆 192.168.…

SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 REST 一、REST简介1.1REST风格简介 二、RESTful入门案例2.…

绘制曲线python

文章目录 import matplotlib.pyplot as plt# 提供的数据 x= [1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,6,6.1,6.2…

门面模式(C++)

定义 为子系统中的一组接口提供一个一致(稳定) 的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用(复用)。 应用场景 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合&#xff0c;随着外部客户程序和各子…

代码随想录算法训练营day55

文章目录 Day55 判断子序列题目思路代码 不同的子序列题目思路代码 Day55 判断子序列 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以…

java文件

一.File类 二.扫描指定目录&#xff0c;并找到名称中包含指定字符的所有普通文件&#xff08;不包含目录&#xff09;&#xff0c;并且后续询问用户是否要删除该文件 我的代码: import java.io.File; import java.io.IOException; import java.util.Scanner;public class Tes…

Excel功能总结

1&#xff09;每一张表格上都打印表头 “页面布局”-->“打印标题”-->页面设置“工作表”页-->打印标题“顶端标题行” 如&#xff1a;固定第1~2行&#xff0c;设置成“$1:$2” 2&#xff09;将页面内容打印在一页【缩印】 1.选好需要打印的区域&#xff0c;“页面布…

数据结构 | 利用二叉堆实现优先级队列

目录 一、二叉堆的操作 二、二叉堆的实现 2.1 结构属性 2.2 堆的有序性 2.3 堆操作 队列有一个重要的变体&#xff0c;叫作优先级队列。和队列一样&#xff0c;优先级队列从头部移除元素&#xff0c;不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前&#xff…

全志D1-H (MQ-Pro)驱动 OV5640 摄像头

内核配置 运行 m kernel_menuconfig 勾选下列驱动 Device Drivers ---><*> Multimedia support --->[*] V4L platform devices ---><*> Video Multiplexer[*] SUNXI platform devices ---><*> sunxi video input (camera csi/mipi…