Quaternion和Rotation Matrix的相互转换

简介:

设有Quaternion q(x, y, z, w), rotation axis(x, y, z), rotation angle (theta),则Quaternion和Axis-Angle有如下对应关系,

q.x = sin(theta / 2) * axis.x
q.y = sin(theta / 2) * axis.y
q.z = sin(theta / 2) * axis.z
q.w = cos(theta / 2)

 

由Rotation Matrix求Quaternion

如何由给定的rotation matrix提取出旋转轴和旋转角度?

使用函数D3DXQuaternionRotationMatrix可以直接由Rotation matrix求出对应的Quaternion

 

由Quaternion求Rotation Matrix

可以利用上面的公式先求出旋转轴和旋转角度

axis.x = q.x / sin(theta / 2)

axis.y = q.y / sin(theta / 2)

axis.z = q.z / sin(theta / 2)

theta = 2 * arccos(q.w)

或者D3DX函数D3DXQuaternionToAxisAngle求出旋转轴和旋转角度

得到了旋转轴axis和旋转角度angle以后就可以利用D3DXMatrixRotationAxis来求取旋转矩阵,也可以手动求解,看这篇博文。也可以一步到位,用D3DXMatrixRotationQuaternion函数直接求得旋转矩阵

 

本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2009/11/06/1597189.html,如需转载请自行联系原作者

相关文章
|
7月前
Eigen::Matrix4f 是先旋转还是先平移的顺序
Eigen::Matrix4f 是先旋转还是先平移的顺序
274 0
|
10月前
|
存储 定位技术 计算机视觉
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
113 1
shader中判断浮点型数值相等:round、floor
shader中判断浮点型数值相等:round、floor
386 0
|
API Android开发
“千变万化”——神奇的Android图片规格调整器(坐标Matrix篇)
我们前面介绍了一些图片的信息获取方式,现在我们看看对图片是如何进行变化处理的,这其中有很多方法,我们先说明一下Matrix类的处理方式,也就是对图片坐标的变化以达到最终期望效果。
162 0
|
JSON Java Android开发
Matrix 之 ApkChecker 的使用
Matrix 之 ApkChecker 的使用
324 0
Matrix 之 ApkChecker 的使用
|
存储 数据可视化 索引
Halcon数据类型转换系列(2)遍历xld;Region、XLD、Polygon之间的互相转换
Halcon数据类型转换系列(2)遍历xld;Region、XLD、Polygon之间的互相转换
1194 0
旋转矩阵(Rotation Matrix)的推导及其应用
向量的平移,比较简单。   缩放也较为简单   矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了。     稍微复杂一点的是旋转,如果只是二维也很简单(因为很直观),但因为是三维的,有xyz三个轴,先推导二维的再延伸到三维。
5060 0