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

相关文章
|
4月前
|
存储 定位技术 计算机视觉
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
shader中判断浮点型数值相等:round、floor
shader中判断浮点型数值相等:round、floor
234 0
|
图形学
【Transform3D】转换详解(看完就会)
【Transform3D】转换详解(看完就会)
88673 1
【Transform3D】转换详解(看完就会)
|
JSON Java Android开发
Matrix 之 ApkChecker 的使用
Matrix 之 ApkChecker 的使用
202 0
Matrix 之 ApkChecker 的使用
|
安全 容器
Matrix Transformation(模拟)
题目描述 You have an integer matrix A, with R rows and C columns. That means it has R rows with each row containing C integers. Two integers are adjacent if their container cells share an edge.
90 0
Matrix Transformation(模拟)
旋转矩阵(Rotation Matrix)的推导及其应用
向量的平移,比较简单。   缩放也较为简单   矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了。     稍微复杂一点的是旋转,如果只是二维也很简单(因为很直观),但因为是三维的,有xyz三个轴,先推导二维的再延伸到三维。
4766 0
|
Web App开发 异构计算