跟紧工作需求学习,于是抽了点时间看了看用于2D3D转换的矩阵内容。

  矩阵在3D数学中,可以用来描述两个坐标系间 的关系,通过定义的运算能够把一个坐标系中的向量转换到另一个坐标系中。在线性代数中,矩阵就是以行和列形式组织的,向量是标量的数组,矩阵是向量的数组。

  一般来说,方阵能够描述任意线性变换。线性变换保留了直线和平行线,但是原点没有移动。线性变换保留直线的同时,其他的几何性质如长度、角度、面积和体积可能在变换中发生了改变。线性变换可能“拉伸”,但不会“弯折”、”卷折“坐标系。

  任意向量的一种扩写形式

  

  右边的单位向量就是x、y、z轴。向量的每个坐标都表明了平行于相应坐标轴的有向位移。一个坐标系能用任意3个线性无关的基向量定义,我们以笛卡尔坐标轴为例子,指定p q r为x y z轴正方向的单位向量,构建一个3 x 3矩阵M。

  

  

  此时如果用一个向量乘以该矩阵,就相当于一次坐标转换。(我们可以把”转换“和”乘法“等价)

  而在使用矩阵运算时,矩阵的乘积不能表示平移变换。因此引入了第四个分量w,w称为比例因子,一般为1。当w不为0时,表示一个坐标当w为0时,在数学上代表无穷远点,即并非一个具体的坐标位置,而是一个具有大小和方向的向量。从而,通过w我们就可以用同一系统表示两种不同的量。

  在OPENGL中,作为坐标点时,w参数为1,否则为0,如此一来,所有的几何变换和向量运算都可以用相同的矩阵乘积进行运算和变换,当一个向量和一个矩阵相乘时所得的结果也是向量。

  

  下图显示了应用到点 (2,1) 的多个线性转换。

                                 

  某些其他转换(如转换)不是线性的,并且不能表示为2×2矩阵的乘法。 假设要从点开始 (2,1) ,将其旋转90度,将其在 x 方向上转换为3个单位,并在 y 方向转换为4个单位。 可以通过使用矩阵乘法后跟矩阵加法实现此目的。

                                                      

  线性转换 (按 2 x 2 矩阵相乘) 后接 (添加1×2矩阵) 称为仿射转换。 将仿射转换存储在一对矩阵中的替代方法 (一个用于线性部分,另一个用于平移) ,用于在3×3矩阵中存储整个转换。 若要执行此操作,平面中的点必须存储在具有虚第三坐标的1×3矩阵中。 常见的方法是使所有第三个坐标等于1。 例如,点 (2,1) 由矩阵 [2 1 1] 表示。 下图显示了一个仿射转换 (旋转90度;在 x 方向上转换3个单位,在 y 方向上4个单位的) 表示为按单一3×3矩阵的乘法。

  点 (2,1) 映射到点 (2,6) 。 请注意,3 x 3 矩阵的第三列包含数字0,0,1。 这对于仿射转换的 3 x 3 矩阵总是如此。 重要数字是第1列和第2列中的六个数字。 矩阵的左上2×2部分表示转换的线性部分,第三行中的前两个条目表示平移。

                    

                    

  复合转换是一系列转换,一个后跟另一个。 对矩阵[2 1 1]表示的点(2,1)先后进行转换A B C。

    [2 1 1]ABC = [-2 5 1]

  不是将复合转换的三个部分存储在三个单独的矩阵中,而是可以将 A、B 和 C 相乘,以获取存储整个复合转换的单个3×3矩阵。

    [2 1 1]D = [-2 5 1]

  

  复合转换的顺序很重要。 通常,旋转,然后缩放,然后平移与缩放、旋转和平移不同。 同样,矩阵相乘的顺序也非常重要。

  参考链接:https://docs.microsoft.com/zh-cn/dotnet/desktop/winforms/advanced/matrix-representation-of-transformations?view=netframeworkdesktop-4.8

数学:3D和矩阵的更多相关文章

  1. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  2. 浅谈数学上的矩阵——矩阵的乘法运算的概念及C++上的实现模板

    首先让我们来谈一谈数学意义上的矩阵(在座各位也可以简单地将它理解为一个二维数组) 这样可以帮助我们理解矩阵加速及其运用的原理(矩阵加速是一个及其玄学的东西,所以请重点理解矩阵乘法)  这里给出一段严格 ...

  3. 3D数学读书笔记——矩阵基础

     本系列文章由birdlove1987编写,转载请注明出处.    文章链接:http://blog.csdn.net/zhurui_idea/article/details/24975031   矩 ...

  4. 3D数学读书笔记——矩阵进阶

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25242725 最终要学习矩阵 ...

  5. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  6. P3216 [HNOI2011]数学作业 (矩阵快速幂)

    P3216 [HNOI2011]数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 NN 和 MM ,要求计算 Concatenate (1 .. N ...

  7. 机器学习中的数学-强大的矩阵奇异值分解(SVD)及其应用

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  8. BZOJ 2326 数学作业(矩阵)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2326 题意:定义Concatenate(1,N)=1234567……n.比如Concat ...

  9. [BZOJ 2326] [HNOI2011] 数学作业 【矩阵乘法】

    题目链接:BZOJ - 2326 题目分析 数据范围达到了 10^18 ,显然需要矩阵乘法了! 可以发现,向数字尾部添加一个数字 x 的过程就是 Num = Num * 10^k + x .其中 k ...

随机推荐

  1. Git安装教程最新版本(国内gitee国外github)

    Git安装教程最新版本(国内gitee国外github) 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 获取大师使用的typora主题: http://w ...

  2. python实现UDP通讯

    Environment Client:Windows Server:KaLi Linux(VM_virtul) Network:Same LAN Client UDPClient.py #-*- co ...

  3. CGI开发-(转自 jemofh159)

    随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...

  4. Linux Socket编程-(转自吴秦(Tyler))

    "一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...

  5. Docker五分钟搭建Wordpress

    当你看到这篇文章的时候,表明你已经有docker的基础知识了,或者可以看上一篇文章 Docker 入门教程. 传统的使用wordpress搭建网站,意味着你需要搭建以下四个环境: php: apach ...

  6. xss-代码角度理解与绕过filter

    0x00 原理   xss全称为cross site scripting,中文为跨站脚本攻击.它允许web用户将恶意代码植入到提供给用户使用的页面.代码包括HTML代码和客户端脚本. 0x01 危害 ...

  7. 安装spark 报错:java.io.IOException: Could not locate executable E:\hadoop-2.7.7\bin\winutils.exe

    打开 cmd 输入 spark-shell 虽然可以正常出现 spark 的标志符,但是报错:java.io.IOException: Could not locate executable E:\h ...

  8. GPU自动调度卷积层

    GPU自动调度卷积层 本文对GPU使用自动调度程序. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,无需任何调度命令或模板.自动调度程序 ...

  9. Ascend昇腾计算

    Ascend昇腾计算 Ascend昇腾计算,是基于昇腾系列处理器构建的全栈AI计算基础设施及应用,包括昇腾系列芯片.系列硬件.芯片使能.AI框架.应用使能等.华为Atlas人工智能计算解决方案,基于昇 ...

  10. MindSpore网络模型类

    MindSpore网络模型类 Q:使用MindSpore进行模型训练时,CTCLoss的输入参数有四个:inputs, labels_indices, labels_values, sequence_ ...