我有一个由8分定义的方框.从这些点开始,我计算轴并创建旋转矩阵,如下所示:
axis[0], axis[1], axis[2]
mat =
{
axis[0].x axis[1].x axis[2].x 0
axis[0].y axis[1].y axis[2].y 0
axis[0].z axis[1].z axis[2].z 0
0 0 0 1
}
Run Code Online (Sandbox Code Playgroud)
我有特定的旋转矩阵:
{
-1 0 0 0
0 0 1 0
0 -1 0 0
0 0 0 1
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是一个有效的旋转矩阵.它的反演等于它的转置.
现在我想将此矩阵存储为四元数.但是后来,我需要从这个四元数中重新创建旋转矩阵.我相信从矩阵到四元数并返回到矩阵的转换应该是一个恒等变换,我应该得到我在开始时所拥有的相同矩阵(可能具有非常小的数值误差).
但事实似乎并非如此.SlimDX(C#)和我的属性数学库(C++)都返回无效矩阵.
首先,我收到的四元数:
C#: 0, 0, 0.70710676908493, 0
C++: 0, -0.707107, 0, 0
Run Code Online (Sandbox Code Playgroud)
从这个四元数创建的矩阵:
C#:
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1
Run Code Online (Sandbox Code Playgroud)
C++:
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 1
Run Code Online (Sandbox Code Playgroud)
为什么这是错的?
我也试过这个:http://cache-www.intel.com/cd/00/00/29/37/293748_293748.pdf,但它也给了我不好的结果.