是什么
是以行和列形式组织的矩形数字块。向量是标量的数组,矩阵则是向量的数组。表示形式:
四则运算
矩阵和标量的乘法
矩阵和矩阵的乘法
规则:一个r X n的矩阵A和一个n X c的矩阵B才能相乘。
两矩阵相乘如下:
是以行和列形式组织的矩形数字块。向量是标量的数组,矩阵则是向量的数组。表示形式:
规则:一个r X n的矩阵A和一个n X c的矩阵B才能相乘。
两矩阵相乘如下:
向量是一个描述长度和方向的量,也可以叫做矢量。
一般使用a粗体表示。一般写作:
任何一个点都可以写成y = aA + bB + cC
几何意义:
平行四边形法则
https://developer.arm.com/Architectures/Neon
https://github.com/ermig1979/Simd
https://stackoverflow.blog/2020/07/08/improving-performance-with-simd-intrinsics-in-three-use-cases/
之前实现的蒙皮混合插值叫作线性插值,这种线性插值在有体积旋转是会出现一定的问题。如下图 :
为了解决这个问题,我们可以使用对偶四元数来做混合。
对偶数跟虚数很像,对偶数由一个实数部分和对偶部分组成。假设ε是对偶操作符,一个对偶数可以表示为:,其中 并且
它可以代表这两个四元数或者8方位的浮点数
具体的可以参看资料:https://cs.gmu.edu/~jmlien/teaching/cs451/uploads/Main/dual-quaternion.pdf
浮点数计算很慢?
定点数在计算是会更快一些
在计算除法的时候,一般都会比较慢,我们可以使用左移来替换。
https://betterexplained.com/articles/matrix-multiplication/
https://www.cnblogs.com/noluye/p/12262580.html
Understand what a transform is
转移子物体到父物体的空间中
获得一个点在一个transform
空间的位置。
http://gabormakesgames.com/transforms.html
绕轴旋转 θ 可以在球体上表示为任何有向弧,在垂直于旋转轴的平面上长度为 θ/2
。正角产生绕轴逆时针旋转。
为什么是1/2呢?因为一个四元数可以记录2个圆周,也就是720度,但是sin/cos的循环时360度,所以为了适配就除以2。
在内存中的存放,一个列为主的矩阵在内存中的存放其实是一个线性映射,第几行对应着数组元素的第几个组。
对应的求出以列为主的矩阵中某个元素的公式就是column * numberOfCloumns + row
,比如说第2列,第3行的元素在数组中的索引就是7。
实列网站:https://gabormakesgames.com/blog_vectors.html
因为浮点数比较计算会有不精确的时候,我们使用一个 epsilon = 0.000001f
的特定数值来比较。
计算出两个点之间的某一个位置
把两点之间的距离归一化得到一个插值t