3D数学读书笔记——矩阵基础番外篇之线性变换
本系列文章由birdlove1987编写。转载请注明出处。
文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425
前面有一篇文章讨论过多坐标系的问题。有的人可能会问我那么多坐标系,它们之间怎么关联呢?嘿嘿~这次的内容能够为解决问题打基础奥。
线性变换基础(3D数学编程中。形式转换常常是错误的根源,所以这部分大家要多多思考,细致运算)
一般来说,方阵(就是行和列都相等的矩阵)能描写叙述随意的线性变换,所以后面我们一般用方阵来变换
事实上简单的说。线性变换就是保留直线和平行线,原点没有移动。而其它的几何性质。如长度、角度、面积和体积可能被改变。
从视觉的直观角度上讲,线性变换可能“拉伸”坐标系,但不会“弯曲”和“卷折”坐标系(毕竟是“线性”的变换嘛,不然可能就叫做曲线变换了)。
以下先引入一个直观的变换样例:
先在单位基向量处画一个茶壶
然后我们给出一个变换矩阵
然后我们让这个茶壶的坐标按上面的矩阵经行变换
这个变换包括z轴顺时针旋转45°和不规则缩放。
在讨论详细的变换之前。还必需要搞清楚。我们究竟要变换什么。在这里我们所提到的变换,其内容主要就两个:变换物体和变换坐标系。
变换物体,意味着变换物体上全部的点,这这点将被移动到一个新的位置,我们仍使用同一坐标系来描写叙述变换前和变换后的位置。
变换坐标。意味着物体上的点实际没有移动。我们仅仅是在另外一个坐标系中描写叙述它的位置而已。
事实上这两种变换实际上是等价的。将物体变换一个量等价于将坐标系变换一个相反的量。
ps:以下我们实现的变换都是物体变换
旋转
2D中绕原点旋转的參数仅仅有一个:角度θ,它描写叙述了旋转量。(逆时针旋转常常被觉得是正方向。顺时针方向时负方向)
依据几何知识我们可知旋转矩阵应该为
在3D场景中,一般都是绕轴旋转,而且在绕轴旋转θ°时,必须知道哪个方向别觉得“正”,哪个方向被觉得“负”。
在左手坐标系中定义此方向的规则为左手规则
左手坐标系 | ||
从哪里看 | 正方向 | 负方向 |
从轴的负端点向正端点看 | 逆时针 | 顺时针 |
从轴的正端点向负端点看 | 顺时针 | 逆时针 |
绕轴变换中最为常见的就是绕坐标轴旋转
X轴
可得到变换矩阵
同理得到Y轴和Z轴的变换公式
Y轴
Z轴
ps:对于随意轴的旋转,可能等我们学完了平移。将随意轴平移旋转至坐标轴变换后在移后就可以。
缩放
通过比例因子K按比例变大或缩小来缩放物体。
假设在各方向应用同比例的缩放。且沿原点“扩张”物体。那么就是均匀缩放。(均匀缩放能够保持物体的角度和比例不变)
假设须要挤压或拉伸物体,在不同方向应用不同的因子就可以,这称作非均匀缩放。(非均匀缩放时,物体角度将发生变化)
ps:假设 |k|<1 ,物体将变短。假设 |k|>1,物体变长。假设 |k|=0,就是正交投影。
最简单的缩放方法是沿着每一个坐标轴应用单独的缩放因子。
2D中有两个缩放因子。和。缩放矩阵为:
缩放实例
对于3D,须要添加第三个缩放因子,3D缩放矩阵:
正交投影(平行投影)(投影意味着降维操作)
有一种投影方法是在某个方向上用零作为缩放因子。这样的情况下,全部点都被拉平至垂直的轴或平面上,这样的投影称作正交投影。
最简单的投影方式是向坐标轴或平面投影。
在2D环境下。向 x 轴投影
在2D环境下,向 y 轴投影
在3D环境下,向 xy 平面投影、向xz平面投影和向yz平面投影的矩阵
正交投影效果图
镜像(反射)
镜像是一种变换。起、其作用是将物体沿直线,或平面翻折。
ps:一个物体仅仅能镜像一次,假设再次镜像物体将翻回正面,这和在原位置旋转物体的效果一样了。
在2D环境下,沿随意轴镜像的矩阵为
当中向量n为随意轴方向的单位向量,比如假设随意轴为x轴,则n=(1,0),所以关于x轴的镜像矩阵为
在3D环境下,沿随意轴镜像的矩阵为
切变
切变是一种坐标系“扭曲”变换,非均匀地拉伸它。这是一种非常少用到的变换,它也被称作扭曲变换。
切变的时候角度会发生变化,可是令人惊奇的是面积和体积却保持不变。
切变的基本实现思想是,某一坐标的乘积加到还有一个坐标上去:x' = x + sy。
在2D环境下。x坐标依据坐标y以參数s控制切变方向和向量的切变矩阵
在2D环境下。y坐标依据坐标x以參数s控制切变方向和向量的切变矩阵
3D坐标中的切变矩阵两个坐标轴别还有一个坐标轴改变的矩阵
-End-
參考文献:(1)《3D Math Primer for Graphics and Game Development》
(2)百度百科
转载于:https://www.cnblogs.com/mfmdaoyou/p/7261669.html
3D数学读书笔记——矩阵基础番外篇之线性变换相关推荐
- 3D数学读书笔记——矩阵进阶
本系列文章由birdlove1987编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25242725 最终要学习矩阵 ...
- 3D数学读书笔记——笛卡尔坐标系统
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...
- 3D数学读书笔记——向量运算及在c++上的实现
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 开始之前:接 ...
- 3D数学读书笔记——3D中的方位与角位移
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25339595 方位和角位移 ...
- 李宏毅学习笔记40.GAN.番外篇
文章目录 简介 Recap Self-attention GAN(SAGAN) Self-attention Spectral normalization (SN) Two-Timescale Upd ...
- Java基础番外篇二(Java修饰符讲解)
来了老弟? 哈哈 开始讲解 类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类. abstract,将一个类声明为抽象类,没有实现的方法,需 ...
- 笔记:计算机视觉与深度学习-简单的实现一个网络-番外篇
写在开头 1.课程来源及所有代码来源,后面不再每一步中标明了:pytorch官方网站的Tutorials.和Docs. 2.笔记目的:个人学习+增强记忆+方便回顾 3.时间:2021年4月19日 4. ...
- Android开发自学笔记—1.1(番外)AndroidStudio常用功能介绍
Android开发自学笔记-1.1(番外)AndroidStudio常用功能介绍 http://www.cnblogs.com/boyliupan/p/4729736.html#_labelTop 回 ...
- 应用统计学与R语言实现笔记(番外篇四)——bookdown使用与OR值计算
本期是之前做的应用统计学与R语言实现笔记的番外篇四,本期主要关注两个问题,一个是重新利用R的bookdown包创建新的电子书,另一个是计算公共卫生当中一个比较常见的指标OR值. 文章目录 1 book ...
最新文章
- rsync常用的三种用法
- Java二叉树的构建与遍历
- Vue.js中的8种组件间的通信方式;3个组件实例是前6种通信的实例,组件直接复制粘贴即可看到运行结果
- 一文入门区块链相关知识
- SQL Server中的身份功能教程
- JavaEE的核心API与组件
- 过滤代码中的html标签
- UCloud可支撑单可用区320,000服务器的数据中心网络系统设计
- python-获取满足条件的索引值np.where
- Redis-槽道原理
- 【SpringBoot_ANNOTATIONS】生命周期 04 BeanPostProcessor 后置处理器
- 械体叶NUNNECH FEWNE OFUEenTM 17.1+教程与算例
- jsonp原理详解——终于搞清楚jsonp是啥了
- python的输入来源包括文件输入_【python】文件的输入和输出
- 测试学习-123-Linux性能测试监控CPU内存脚本(极简清爽)
- 【CLR】程序集查找与GAC
- 谷歌浏览器设置关闭搜索记录
- CSS3各个模块详解
- APISpace 人像比对API
- c语言如何画简单图形,如何用C语言画基本图形
热门文章
- 前端效果积累 | 酷炫、实用3D地球路径飞行效果实现
- ZJOI2018一试游记
- mysql 单表查询 优化_SQL优化 MySQL版 - 单表优化及细节详讲
- 为什么在数字开关电源中采样频率通常设置为开关频率?
- ADC芯片——CS1237的使用
- 根据数据库表结构生成Excel表设计——源码设计说明
- ios wallet开发_Wallet app-想知道钱都花哪去了?试试它吧#iOS #Android
- 新浪云SAE上运行PHP代码,新浪云SAE 上使用Thinkphp5 出现问题
- 6_C# 实现VMS客户端——代码架构设计
- 写一个监控路由器下局域网内所有终端的上网情况的脚本