《3D数学基础:图像与游戏开发》读书笔记(一)
来源:互联网 发布:四物汤处方配比优化 编辑:程序博客网 时间:2024/05/16 18:00
《3D数学基础:图像与游戏开发》读书笔记(一)
一、向量运算
1. 点积
点积又叫内积、点乘,两个向量的点积结果是一个标,等于两个向量对应维度数值乘积之和。
⎡⎣⎢⎢⎢⎢a1a2⋮an⎤⎦⎥⎥⎥⎥⋅⎡⎣⎢⎢⎢⎢b1b2⋮bn⎤⎦⎥⎥⎥⎥=a1∗b1+a2∗b2+…+an∗bn(1)
点积结果描述了两个向量的“相似”程度,点积结果越大,两向量越想近。
点积等于两个向量的模的积再乘上两个向量夹角的
a⋅b=|a|∗|b|∗cosθ(2)
所以如果其中一个向量是单位向量,比如
向量点积优先级高于加法和乘法。
2. 叉积
叉积又叫叉乘,两个向量叉积的结果是一个向量,叉积不满足交换律,但满足反交换律:
⎡⎣⎢a1a2a3⎤⎦⎥×⎡⎣⎢a1a2a3⎤⎦⎥=⎡⎣⎢a2∗b3−b2∗a3a3∗b1−a1∗b3a1∗b2−a2∗b1⎤⎦⎥(3)
两个向量的叉积得到的向量的模等于两个向量的模的积再乘上两个向量夹角的sin值。
|a×b|=|a|∗|b|∗sinθ(4)
叉积的运算优先级和点积一样,不过两个混合运算时优先计算叉积,因为点积运算结果是标量,标量不能叉积。运算
叉积的的结果是一个垂直于
二、矩阵
1. 矩阵与向量
一个3维向量相当于一个1x3的矩阵,1x3的矩阵乘上3x3的矩阵等于1x3的矩阵,也就是说一个三维向量乘上一个3x3的矩阵能得到另一个三维向量,实现了向量的变换。
矩阵每一维都可以解释为转换后的基向量。
[100]⎡⎣⎢m11m21m31m12m22m32m13m23m33⎤⎦⎥=[m11m12m13](5)
向量可以代表一个方向,也可以代表一个点,所以和矩阵相乘可以实现点的变换,即可以实现三维物体的变换(旋转、缩放、镜像)。三维向量平移需要4x4的矩阵
2. 矩阵与线性变换
在数学上,如果满足下式,
F(a+b)=F(a)+F(b)(6)
F(ka)=kF(a)(7)
如果
2.1 仿射变换
仿射变换是指线性变换后接着平移变换。因此仿射变换的集合是线性变换的超集。
v′=vM+b(8)
向量
2.2 可逆变换
向量
所有基本变换除了投影都是可逆的。
2.3 正交变换
正交变换的基本思想是轴保持互相垂直且不进行缩放,正交变换只有平移、旋转和镜像。
正交矩阵很容易求出它的逆,正交矩阵行列式为
3. 矩阵的行列式
用
∣∣∣m11m21m12m22∣∣∣=m11m22−m12m21(9)
∣∣∣∣m11m21m31m12m22m32m13m23m33∣∣∣∣=m11m22m33+m12m23m31+m13m21m32−m13m22m31−m12m21m33−m11m23m32(10)
在2D中,行列式等于以变换后的基向量为两边的平行四边形的有符号面积。
在3D中,行列式等于以变换后的基向量为三边的平行六面体的有符号体积。
如果将3x3矩阵的行为解释为3个向量,那么矩阵的行列式的等于这些向量的“三元组积”
∣∣∣∣∣axbxcxaybycyazbzcz∣∣∣∣∣=axbycz+aybzcx+azbxcy−azbycx−aybxcz−axbzcy=(aybz−azby)cx+(azbx−axbz)cy+(axby−aybx)cz=(a×b)⋅c(11)
用
M=⎡⎣⎢−401−3243−2−1⎤⎦⎥⇒M{12}=[01−2−1](12)
通过余子式可以算出矩阵的代数余子式, 代数余子式是一个标量,等于相应余子式的有符号行列式。
cij=(−1)i+j|M{ij}|(13)
代数余子式可以让我们算出nxn矩阵的行列式。首先在矩阵中选择任意一行或一列,对该行或列中的没一个元素,都乘以对应的代数余子式,这些乘积的和就是矩阵的行列式。
|M|==∑nj=1mijcij=∑nj=1mij(−1)i+j|M{ij}|(14)
行列式有下面一些重要性质:
- 矩阵乘积的行列式等于矩阵的行列式的乘积:
|AB|=|A||B| ; - 可以拓展到多个矩阵:
|M1M2⋯Mn|=|M1||M2|⋯|Mn| ; - 矩阵转置的行列式等于原矩阵的行列式:
|MT|=|M| ; - 如果矩阵某一行或某一列全为0,那么该矩阵的行列式为0;
- 如果交换矩阵的任意两行或两列,行列式的值变为原来的相反数;
- 矩阵任意行或列加到另一行或列上,矩阵行列式的值不变。
4. 矩阵的逆
矩阵的逆乘以原矩阵等于单位阵
M(M−1)=M−1M=I(15)
不是所有的矩阵都有逆。如果一个矩阵有逆矩阵,那么称它为可逆的或非奇异矩阵,反之称为不可逆或奇异矩阵。奇异矩阵的行列式为零,非奇异矩阵行列式不为零,所以可以通过求矩阵行列式值判断矩阵是否可逆。
我们把矩阵
通过用伴随矩阵除以矩阵的行列式就能得到矩阵的逆,所以矩阵的行列式为零则被除数为零,不能算出它的逆
M−1=abjM|M|(16)
矩阵的逆有下面一些重要性质:
- 可逆矩阵的逆的逆等于原矩阵:
(M−1)−1=M ; - 单位阵的逆等于它本身:
I−1=I ; - 矩阵的转置的逆等于它的逆的转置:
(MT)−1=(M−1)T ; - 矩阵乘积的逆等于矩阵逆的相反顺序的乘积:
(AB)−1=B−1A−1 ,可以拓展到多个矩阵的情况。
矩阵的逆可以用于撤销我们的(能撤销的)变换。
5. 正交矩阵
正交矩阵是一个非常特殊的矩阵,它的逆等于他的转置,即
在3D中正交矩阵出现得很频繁,那么我们要求其逆时求其转置矩阵能大大减少计算量。旋转和镜像矩阵都是正交的。
MMT=I
⎡⎣⎢m11m21m31m12m22m32m13m23m33⎤⎦⎥⎡⎣⎢m11m12m13m21m22m23m31m32m33⎤⎦⎥=⎡⎣⎢100010001⎤⎦⎥
m11m11+m12m12+m13m13=1
m11m21+m12m22+m13m23=0
m11m31+m12m32+m13m33=0
m21m11+m22m12+m23m13=0
m21m21+m22m22+m23m23=1
m21m31+m22m32+m23m33=0
m31m11+m32m12+m33m13=0
m31m21+m32m22+m33m23=0
m31m31+m32m32+m33m33=1
设
r1=[m11m12m13]
r2=[m21m22m23]
r3=[m31m32m33]
r1⋅r1=1r2⋅r1=0r3⋅r1=0r1⋅r2=0r2⋅r2=1r3⋅r2=0r1⋅r3=0r2⋅r3=0r3⋅r3=1
根据上面的计算,可以推断:
- 一个向量当且仅当向量为单位向量时,它与自己的点积为1,所以
r1 ,r2 ,r3 都是单位向量; - 当且仅当两个向量垂直时,它们的点积才为0,所以
r1 ,r2 ,r3 两两互相垂直。
所以正交矩阵必须满足一下条件:
- 矩阵的每一行都是单位向量;
- 矩阵的所有行都互相垂直。
6. 4x4齐次矩阵
齐次坐标是指用一个n+1维的向量表示n位的向量。
用四维向量
6.1 平移
前面通过乘以一个矩阵以达到的变换中没有包括平移,如果想平移,要加上一个矩阵,这样如果想平移,又想旋转缩放等,就不能简单得乘以一个3x3矩阵了,为了做到把变换都变成一个矩阵,在数学上做一些小技巧,就是用齐次坐标。
如果我们用
[xyz1]⎡⎣⎢⎢⎢m11m21m310m12m22m320m13m23m3300001⎤⎦⎥⎥⎥
=[xm11+ym21+zm31xm12+ym22+zm32xm13+ym23+zm331]
上面运算结果和3D中的变换是一样的,只是最后多了一维且值是1。
[xyz1]⎡⎣⎢⎢⎢100Δx010Δy001Δz0001⎤⎦⎥⎥⎥=[x+Δxy+Δyz+Δz1]
上面很奇妙得用乘法实现了向量的平移,如果需要变换,只要把4x4的变换矩阵左上角的3x3矩阵变为以前的变换矩阵就可以了。这个是齐次坐标的数学上的一个技巧。
值得注意的是如果一个向量要经历一系列的变换,可以先把这些变换的矩阵先全部乘在一起变成一个变换矩阵,但是要注意乘的顺序,变换的顺序必须和乘法的顺序相同。
当我们把
原本的3x3矩阵只能表示3D中的线性变换,所以没有平移,现在用4维向量来表示3维向量后能实现乘以一个矩阵来达到平移的效果,所以可以和之前的线性变换来一起表示一般的仿射变换了。会发现4x4矩阵的乘上一个平移的矩阵后只能影响第四行,而不会影响前面三排包含变换的部分。
- 《3D数学基础:图像与游戏开发》读书笔记(一)
- 3D数学基础:图形与游戏开发_读书笔记
- 推荐一本3D基础的书----《3D数学基础图形与游戏开发》
- 3D数学基础:图形与游戏开发_读书笔记01
- 3D数学基础:图形与游戏开发_读书笔记02
- 3D数学基础:图形与游戏开发_读书笔记04
- 3D数学基础 图形与游戏开发的学习 (四)[2D笛卡尔数学]
- 3D数学基础及图形与游戏开发的学习 (一)
- 3D数学基础,图形与游戏开发笔记3
- <<3D数学基础:图形与游戏开发>>读后感
- 《3D数学基础:图形与游戏开发》读后感
- 3D数学基础,图形与游戏开发笔记1
- 3D数学基础,图形与游戏开发笔记2
- 3D数学基础图形与游戏开发之 坐标系
- 3D数学基础:图形与游戏开发》阅读感言
- 3D数学基础图形与游戏开发之坐标系
- 《3D数学基础:图形与游戏开发 》
- 3D数学基础 图形与游戏开发的学习 (六)[多坐标系]
- UIToggle修改状态无效的原因及解决办法[NGUI]
- 用OpenNETCF进行文件(数据)同步
- DirectX学习记录
- 写保留位,会导致不可预料的错误 !
- 第九周 项目一--复数类中的运算符重载(续)
- 《3D数学基础:图像与游戏开发》读书笔记(一)
- 程序员在职业生涯中最易犯的7个错误
- 十大编程算法助程序员走上高手之路
- 解放双手——Android自动化测试
- EasyUI tabs update 方法后控件无法渲染问题处理
- https://leetcode.com/problems/search-a-2d-matrix/
- android开发网站
- 最长回文子字符串
- 欢迎使用CSDN-markdown编辑器