C中四元数到欧拉角和欧拉角到四元数
我一直在编写这段代码来检查euler角度和四元数,但它没有正确运行(或者可能我不理解旋转): 或例如x 90ºy 90ºz 90ºC中四元数到欧拉角和欧拉角到四元数,c,3d,rotation,quaternions,euler-angles,C,3d,Rotation,Quaternions,Euler Angles,我一直在编写这段代码来检查euler角度和四元数,但它没有正确运行(或者可能我不理解旋转): 或例如x 90ºy 90ºz 90º x=3.141593 y=1.570796 z=1.570796 sx = 1.000000 sy = 0.707107 sz = 0.707107 cx = -0.000000 cy = 0.707107 cz = 0.707107 Quaternion -> (0.500000, 0.500000, -0.500000, -0.500000) reconv
x=3.141593 y=1.570796 z=1.570796
sx = 1.000000 sy = 0.707107 sz = 0.707107 cx = -0.000000 cy = 0.707107 cz = 0.707107
Quaternion -> (0.500000, 0.500000, -0.500000, -0.500000)
reconversion euler x=270.00 y=90.00 z=0.00
x=1.570796 y=1.570796 z=1.570796
sx = 0.707107 sy = 0.707107 sz = 0.707107 cx = 0.707107 cy = 0.707107 cz = 0.707107
Quaternion -> (0.707107, 0.707107, 0.000000, 0.000000)
recover euler x=180.00 y=90.00 z=0.00
您使用的算法有一个域,该域仅位于区间[0,pi/2]的第一象限。或者,因为您希望输入以度为单位,介于0(零)之间包容性和90度互斥性。那么,调试器告诉你什么呢?旁注:在可以使用函数的地方不要使用宏。奇怪的是,为什么要使用
double
函数,比如cos()
,sin()
和float
而不是sinf()
,cosf()
?或者可能在整个过程中使用double
?使用经验证的源
x=1.570796 y=1.570796 z=1.570796
sx = 0.707107 sy = 0.707107 sz = 0.707107 cx = 0.707107 cy = 0.707107 cz = 0.707107
Quaternion -> (0.707107, 0.707107, 0.000000, 0.000000)
recover euler x=180.00 y=90.00 z=0.00