3D数学基础——矩阵的介绍与使用
矩阵
矩阵就是一个矩形的数字、符号或表达式数组。矩阵中每一项叫做矩阵的元素(Element)。下面是一个2×3矩阵的例子:
矩阵可以通过(i, j)进行索引,i是行,j是列,这就是上面的矩阵叫做2×3矩阵的原因(3列2行,也叫做矩阵的维度(Dimension))。这与你在索引2D图像时的(x, y)相反,获取4的索引是(2, 1)(第二行,第一列)(译注:如果是图像索引应该是(1, 2),先算列,再算行)。
矩阵与标量的加减
矩阵与标量的加减定义如下:
矩阵与矩阵的加减
矩阵与矩阵之间的加减就是两个矩阵对应元素的加减运算,所以总体的规则和与标量运算是差不多的,只不过在相同索引下的元素才能进行运算。这也就是说加法和减法只对同维度的矩阵才是有定义的。
矩阵的数乘
和矩阵与标量的加减一样,矩阵与标量之间的乘法也是矩阵的每一个元素分别乘以该标量。
矩阵相乘
矩阵之间的乘法不见得有多复杂,但的确很难让人适应。矩阵乘法基本上意味着遵照规定好的法则进行相乘。当然,相乘还有一些限制:
- 只有当左侧矩阵的列数与右侧矩阵的行数相等,两个矩阵才能相乘。
- 矩阵相乘不遵守交换律(Commutative),也就是说A⋅B≠B⋅A。
2x2矩阵相乘:
3x3矩阵相乘:
矩阵的转置
对于任意矩阵M,将其转置之后,再转置一次,便会得到原矩阵;
对于任意的对角矩阵,都转置矩阵等于本身。
矩阵与向量相乘
关于矩阵和向量相乘的注意事项:
- 结果向量中的每个元素都是原向量与矩阵中单独行或者列的点积;
- 矩阵中的元素决定了输入向量中特定元素在输出向量中占的比重
- 矩阵——向量乘法满足对向量加法的分配律
单位矩阵
单位矩阵是一个除了对角线以外都是0的矩阵:
矩阵变换
1. 旋转
在3D空间中旋转需要定义一个角和一个旋转轴;物体会沿着给定的旋转轴旋转特定的角度;在3D空间中每个单位轴都有不同的定义:
沿 x 轴旋转:
沿 y 轴 旋转:
沿 z 轴 旋转:
沿任意轴旋转:
2. 缩放
对一个向量进行缩放就是对i向量的长度进行缩放,而保持它的方向不变;缩放向量v¯=(3,2)v¯=(3,2)。我们可以把向量沿着x轴缩放0.5,使它的宽度缩小为原来的二分之一;我们将沿着y轴把向量的高度缩放为原来的两倍。我们看看把向量缩放(0.5, 2)倍所获得的s¯s¯是什么样的:
3D空间中定义缩放矩阵:
3. 位移
位移是在原始向量的基础上加上另一个向量从而获得一个不同位置的新向量的过程,从而在位移向量基础上移动了原始向量;位移矩阵定义:
4. 正交投影
正交投影的2D矩阵:
正交投影的3D矩阵:
向任意直线投影的2D矩阵:(投影由垂直于直线的单位向量n定义)
向垂直于n的平面投影的3D矩阵:
5. 镜像
沿通过原点且垂直于n的反射轴进行镜像变换的2D矩阵:
沿通过原点且垂直于n的平面进行镜像变换的3D矩阵:
6. 切变
3D中的切变方法是取出一个坐标,乘以不同的因子再加到其他两个坐标上:
7. 透视投影
1. 中心对称的视图截锥,z轴位于锥体的中央位置
2. 不对称的视图截锥
矩阵的组合
矩阵的乘法,可以把多个变换组合到一个矩阵中;顶点(x,y,z)将其缩放2倍,然后位移(1,2,3)个单位:
用最终的变换矩阵左乘向量得到的结果:
当矩阵相乘时,在最右边的矩阵是第一个与向量相乘,所以应该从右向左读矩阵的乘法;
在组合矩阵时,建议先进行缩放、然后是旋转,最后位移;否则他们会相互影响。
矩阵的行列式
方阵M的行列式记为|M| 或者 “det M”,非方阵矩阵的行列式是未定义的。
余子式:
是一个矩阵,对于有r列,c行的M矩阵,记法M(ij)表示从M中除去第i行和第j列后剩下的矩阵,该矩阵称为M矩阵的余子式
代数余子式:
代数余子式是一个标量,对于M矩阵,给定行列元数的代数余子式等于相应余子式的有符号行列式。
用代数余子式计算nXn阶矩阵的行列式:
从矩阵中任意选择一行或一列,对该行或列中的每一个元素,都乘以对应的代数余子式;这些乘积的和就是矩阵的行列式:
1. 行列式的性质
- 矩阵积的行列式等于矩阵行列式的积:|AB| =|A||B|
- 矩阵转置的行列式等于原矩阵的行列式:|M__T| = |M|
- 如果矩阵的任意行或列全为0,那么它的行列式等于0
- 交换矩阵的任意两行或两列,行列式变为负
- 任意行或列的非零积加到另一行或列上不会改变行列式的值
2. 行列式的几何解释
- 2D中,行列式等于以基向量为了两边的平行四边形的有符号面积;
- 3D中,行列式等于以变换后的基向量为三边的平行六面体的有符号体积;
- 行列式的绝对值和面积(2D)、体积(3D)的改变有关;
- 行列式的符号说明了变换是否包含镜像和投影;矩阵行列式为0包含投影,行列式为负包含镜像。
3. 矩阵行列式计算
2x2 阶矩阵行列式的定义:
3x3阶矩阵的行列式:
4x4矩阵行列式的计算:
矩阵的逆
方阵M的逆记作M(-1),两矩阵相乘时结果是单位矩阵:(并非所有的矩阵都有逆,如矩阵某一行或某一列都为0)
利用伴随矩阵求矩阵的逆:
M的“标准伴随矩阵”记作“adj M”:定义为M的代数余子式矩阵的转置矩阵:
M的标准伴随矩阵是代数余子式矩阵的转置:
矩阵的逆:
上述M逆的:
矩阵逆的重要性质:
1. 如果M是非奇异矩阵(可逆),则该矩阵的逆的逆等于原矩阵;
2. 单位矩阵的逆是它本身;
3. 矩阵的转置的逆 等于 它的逆的转置;
4. 矩阵乘积的你等于矩阵的逆的相反顺序的乘积:
5. 奇异矩阵的行列式为 0 ,非奇异矩阵的行列式不等于 0
几何意义
如果向量v用矩阵M来进行变换,用M的逆矩阵再进行变换,将会得到原向量:
正交矩阵
若方阵M是正交,则当且仅当M与它转置M_t 的乘积等于单位矩阵:
如果一个矩阵是正交,那么它的转置等于它的逆:
正交矩阵对我们非常有用,因为很容易计算它的逆矩阵;
矩阵的正交必须下列条件:
1. 矩阵的每一行都是单位向量
2. 矩阵的所有行互相垂直
3D数学基础——矩阵的介绍与使用相关推荐
- 3D数学基础——矩阵、欧拉角和四元数的相互转换与比较
矩阵.欧拉角和四元数的相互转换与比较 相互转换 这里只展示最终的转换结果,推导过程请参考<3D数学基础:图形与游戏开发> 欧拉角转换到矩阵 欧拉角描述了一个旋转序列,分别计算出给每个旋转的 ...
- 学习 3D数学基础 (矩阵1)
矩阵 一个4x3矩阵(4行,3列) 方阵 行数和列数相同的矩阵 对角矩阵 所有非对角元素为0 单位矩阵 向量作为矩阵 一个n维向量能被当做1xN矩阵或Nx1矩阵. 矩阵的转置 沿着矩阵的对角线翻转 向 ...
- 3d数学基础学习总结
3d数学基础目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 ...
- 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)...
3D Math Primer for Graphics and Game Development //z 2014-04-28 13:18:20 L.247'38500 BG57IV3@XCL T20 ...
- 3d数学基础:图形和游戏开发(第2版)_游戏引擎编程需要哪些基本数学知识?
现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...
- 《3D数学基础》实践1 向量类代码分析
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 3D数学基础——Rotator类的C++实现
Rotator类的C++实现 FRotator类用来以欧拉角形式保存方位,使用pitch-yaw-roll进行约定,类的定义如下: #pragma once #include "FVecto ...
- 3D图形:矩阵的相关知识
矩阵的基本概念 矩阵其实就是向量的数组.向量算的上是特殊的一维矩阵.下面说一下几种特殊的方阵(行数和列数都相同的矩阵). 对角矩阵 如果所有的飞对角线元素都为0,那么这样的矩阵称之为***对角矩阵** ...
- 3D数学基础:Matrix4*3类代码清单
Matrix4×3矩阵和RotationMatrix矩阵是<3D数学基础>中的两大矩阵.相比于只能运用于旋转功能的RotationMatrix矩阵,Matrix 4×3矩阵更加一般化,能够 ...
最新文章
- windows 平台使用 VS2017 编译 libevent 源码
- mysql数据库隐式表_详解MySQL数据库常见的索引问题:无索引,隐式转换,附实例说明...
- 【转载】SQL中使用update inner join和delete inner join
- (0090)iOS开发之本地文件预览的三种方法(1)
- SecureCRT内让npm进程后台执行不受关闭终端影响
- html设置页面编码gbk,GBK及UTF-8网页编码定义与应用
- 初中数学抽象教学的案例_初中数学课堂片段教学案例分析
- 库克用iPhone12 Pro Max发中秋祝福 网友调侃:库克也没抢到iPhone13?
- ActionContext介绍(在Struts2中)
- CSS:字体设置~笔记
- 计算机组成与系统结构
- 用了这个工具,我设计的PCB再也没出过问题
- “外行”带你看国标38900-2020(一)
- input type=file标签图片上传路径fakepath问题
- HTML 网页特殊符号代码大全
- java qlv转mp4 代码_如何将QLV视频格式转换成MP4视频
- 联想g400从u盘启动计算机,联想g400怎么从u盘启动-联想g400设置u盘启动方法
- 读了100多本书只向你推荐这6本(豆瓣评分8.0以上)
- 使用Future取消超时任务
- 【已解决】vagrant up下载box速度太慢的解决方法
热门文章
- SSM在线电影平台 在线观看电影平台 电影推荐平台系统Java Vue MySQL数据库 远程调试 代码讲解
- SLC NAND FLASH的物理结构
- 华为内部实施微服务架构
- 个人家用nas_希捷个人云评测:家用NAS中的佼佼者
- Solidworks快速装配——带配合装配与阵列装配(带例子解释)
- IE 获取 本地 Mac地址
- Object.assign与vue $set
- python中如何清空_python中如何清空数组(列表)元素
- 干货 | 应用打包还是测试团队老大难问题?
- 2019.8.7 金华正睿集训总结Day11(ACM)