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,如需转载请自行联系原作者

相关文章
|
6月前
Eigen::Matrix4f 是先旋转还是先平移的顺序
Eigen::Matrix4f 是先旋转还是先平移的顺序
240 0
|
9月前
|
存储 定位技术 计算机视觉
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
109 1
|
JSON Java Android开发
Matrix 之 ApkChecker 的使用
Matrix 之 ApkChecker 的使用
290 0
Matrix 之 ApkChecker 的使用
Circles Inside a Square(几何题)
题目描述 You have 8 circles of equal size and you want to pack them inside a square. You want to minimize the size of the square. The following figure illustrates the minimum way of packing 8 circles inside a square:
141 0
Circles Inside a Square(几何题)
|
存储 数据可视化 索引
Halcon数据类型转换系列(2)遍历xld;Region、XLD、Polygon之间的互相转换
Halcon数据类型转换系列(2)遍历xld;Region、XLD、Polygon之间的互相转换
1167 0
旋转矩阵(Rotation Matrix)的推导及其应用
向量的平移,比较简单。   缩放也较为简单   矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了。     稍微复杂一点的是旋转,如果只是二维也很简单(因为很直观),但因为是三维的,有xyz三个轴,先推导二维的再延伸到三维。
5033 0