GEA 4.1234 矩阵 矢量 点 四元数

第四章讲解一些数学知识,很多非常简单和基础,只挑难点做一些笔记。四元数没有接触过会全部笔记。

点和矢量

坐标系选择

根据实际问题选择合适的坐标系
常见坐标系有

  • 笛卡尔坐标(右手坐标系)
  • 圆柱坐标(例子是制作一个旋转的物体绕着角色转动)
  • 球坐标

赝矢量pseuvector

百度百科:轴矢量是指在镜面对称变换下法分量不变而切分量改变的矢量(宇称为正的矢量),它是相对于极矢量而言的概念。矢量作为有方向的量,在坐标转动时,分量随坐标作相应变化。极矢量在宇称变换(空间完全反演)下,大小不变,方向变得相反。轴矢量在宇称变换下方向不改变。最常见的轴矢量,是角速度、角动量和磁感应强度
简而言之就是不随着坐标轴变反而变反的量

代码中一些矢量是赝矢量

外代数 格拉斯曼代数

A ^ B表示两个矢量形成的平行四边形的带符号面积
A ^ B ^ C 赝纯量三重矢量 表示三个矢量形成的平行六面体的带符号体积
我的理解基本等价于叉积吧

矩阵

需要记忆一些基本变换矩阵
这里不写了已经记在脑子里了
包含旋转缩放移动 还有坐标轴的转换

4X3矩阵

可以省略掉最后一列节省内存因为仿射矩阵最后一列永远是个0001

变换法矢量

通过该矩阵的逆转置矩阵来变换法矢量

在内存中存储

二维数组,两种方法

  • 每行含一个矢量ijkt
  • 把矢量在内存中分散对齐,每列含一个矢量
    方法2用于SIMID中比较好,但是在游戏引擎中通常采用方法1

四元数

相较于用矩阵旋转需要9个浮点数内存空间更优并且容易计算插值函数
q x 2 + q y 2 + q z 2 + q w 2 = 1 q_{x}^{2} +q_{y}^{2} +q_{z}^{2} +q_{w}^{2} =1 qx2+qy2+qz2+qw2=1
四元数作为一个四维的复数,具有一个实数轴和三个虚数轴

用单位四元数表示三维旋转

单位四元数可以视觉化为三维矢量加上第四维的标量坐标。矢量部分qv是旋转的单位轴乘以旋转半角的正弦值,而标量部分qs是旋转半角的余弦值。

四元数乘法

四元数的乘法有好几种 这里讨论的是和旋转有关的德拉斯曼积
v表示矢量部分而s表示实数部分
格拉斯曼积:pq=[(psqv+qspv+pv × qv)(psqs-pv·qv)]
叉加点减

四元数的共轭

求四元数的共轭:将四元数的矢量部分取反
q逆=q共轭除以q模的平方对于旋转而言四元数的模都为1所以共轭等于旋转

积的共轭与转置

和矩阵一样需要转换到相反的顺序

以四元数旋转矢量

先把矢量写作四元数形式 就是w是0
用矢量前乘四元数再后乘四元数的逆

等价的四元数和矩阵

可以通过一定方法直接转换四元数和矩阵

旋转性的线性插值

普通的lerp是两个四元数的加权平均,并且需要进行归一处理
但存在问题就是四元数是四维超球上面的点,是在超球的弦上进行插值而不是在超球的面上进行插值会导致旋转动画在两端较慢在动画中间较快。
解决方法是采用Slerp就是把其中的β换为了一个夹角的正弦w进行插值,应该测试自己的Slerp实现效能如果优化完毕之后可以近似lerp的效能

猜你喜欢

转载自blog.csdn.net/TongOuO/article/details/122733006
今日推荐