前置计算,先求与旋转轴垂直的向量的表示
- 元素定义:
- 旋转轴为,注意是单位向量
- 是将要旋转的向量,是旋转后的结果
- θ是旋转角度
- 、 相互垂直,根据右手螺旋定则可得 y轴就是
注意此y轴是叉乘的结果,不是世俗意义的y轴
- 公式: = · + · ;
- 推导过程:
- 因为垂直,所以可以忽略一个坐标轴,我们只要算xy平面
- 分解⟹ 在x,y轴的分量,易得他们是和;就是他们的和。
普遍情况的计算
- 核心思路:把向量分解成平行于旋转轴的,和垂直于旋转轴的
- 结论:=· + (1 – ) · · · + = + ’;
- 先求 ,旋转后他不会改变
- =| | · · ,因为 · =||·||· ;| |==1 ,所以 = · · ;
| | · 是标量,后面的制定了方向
- 再求 = – = – · · ;
- 然后! ’ 的值就用垂直情况的公式: = · + · ( ) ;将 代入公式中的
- ’ = – · · · + · ( )= – · · · + ·( )
- =1 , = 的推导:
= ( + )= + 。 =0
矩阵表示
- = · + (1 – ) · · · + ( )
注意矩阵要用向量的转置
- 求 =R · 的R矩阵
- 观察矩阵,公因数是 ,想办法把它提出来。
- 点乘符合交换律⟹ · · = · ·
- 利用叉乘的性质,叉乘变换成点乘 ( )
- 如果有 =[,,] , =[,] ,三维坐标轴
- = · + · + · ; = · + · + ·
- × = ( – ) · + ( – ) · + ( – ) · 写成矩阵
- 可推出 =R · ,R= 向量a的叉乘矩阵
- 带入 得到 ·
- 总结,把提出来 R= · + (1 – ) · · + ·
CPP函数实现
注意要对axis进行归一化,注意矩阵乘法的维度对应。
学习了B站up机长与茶,感谢感谢
3.矩阵形式_哔哩哔哩_bilibili