【计算机图形学】计算点绕任意过原点轴进行旋转的方法
更新中……
配置C++的Eigen库请看这篇文章
几何方法构建旋转矩阵
简化一下:
思路:先施加一个先转矩阵,把旋转轴转到任意一个我们会写旋转矩阵的轴上,也就是任意一个基轴上,施加对应旋转之后乘以逆矩阵再转回来。
众所都周知旋转矩阵是正交矩阵,所以他的逆矩阵就是他的转置,挺好,省的算了。
使用C++和Eigen库进行实现:
1 | Eigen::Matrix4f GetRotation(Eigen::Vector3f axis, float rotAngle) |
使用罗德里格斯旋转公式构建旋转矩阵
罗德里格斯公式的推导:https://www.cnblogs.com/wtyuan/p/12324495.html
思路:首先用罗德里格斯旋转公式计算出3×3旋转矩阵,然后返回其的4×4齐次坐标仿射变换矩阵。
使用C++和Eigen库进行实现:
1 | Eigen::Matrix4f GetRotation(Eigen::Vector3f axis, float rotAngle) |
使用四元数旋转
四元数是用来进行旋转的线性插值的(矩阵不能用来线性插值,基于欧拉角的物理万向轴线性插值可能会出现万向锁情况)。
比如我们需要绕轴v(vx,vy,vz)旋转θ的话,那按照如下公式构建q:
用其进行旋转运算的方法如下(这里因为是单位向量,所以四元数的逆等于四元数的共轭):
用程序实现的话,下次一定更(主要是因为我害没看懂四元数插值是咋插的)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SuzhiのBlog!
评论