Graphics 四元数和球面旋转坐标之间的正确转换?

Graphics 四元数和球面旋转坐标之间的正确转换?,graphics,3d,rotation,quaternions,spherical-coordinate,Graphics,3d,Rotation,Quaternions,Spherical Coordinate,我正在学习更多的四元数转换,我有一个关于四元数到球面旋转转换代码的问题,请访问本网站的以下部分: 这个代码中的角度和sinu角应该是什么?角度从来没有用过,所以我猜是旋转角度。sinu角应该是sinu角吗 如果这是一个返回带有球形旋转数据的浮点数组的函数,[角度、纬度、经度]是转换后的四元数的适当表示吗 cos_a = W; sin_a = sqrt( 1.0 - cos_a * cos_a ); angle = acos( cos_a ) * 2; if ( fabs( sin_ang

我正在学习更多的四元数转换,我有一个关于四元数到球面旋转转换代码的问题,请访问本网站的以下部分:

这个代码中的角度和sinu角应该是什么?角度从来没有用过,所以我猜是旋转角度。sinu角应该是sinu角吗

如果这是一个返回带有球形旋转数据的浮点数组的函数,[角度、纬度、经度]是转换后的四元数的适当表示吗

cos_a  = W;
sin_a  = sqrt( 1.0 - cos_a * cos_a );
angle  = acos( cos_a ) * 2;
if ( fabs( sin_angle ) < 0.0005 ) sin_a = 1;
tx = X / sin_a;
ty = Y / sin_a;
tz = Z / sin_a;
latitude = -asin( ty );
if ( tx * tx + tz * tz < 0.0005 )
   longitude   = 0;
else
   longitude  = atan2( tx, tz );
if ( longitude < 0 )
   longitude += 360.0;
cos_a=W;
sin_a=sqrt(1.0-cos_a*cos_a);
角度=acos(cos_a)*2;
如果(fabs(sin_角)<0.0005)sin_a=1;
tx=X/sinu a;
ty=Y/sin_a;
tz=Z/sin_a;
纬度=-asin(ty);
如果(tx*tx+tz*tz<0.0005)
经度=0;
其他的
经度=atan2(tx,tz);
如果(经度<0)
经度+=360.0;

四元数是四个数字,它们编码旋转方向和角度。代码提取此信息并将旋转轴转换为纬度和经度

  • 从旋转轴
    [tx,ty,tz]
    和角度
    θ构建四元数
    
    • X=tx*SIN(θ/2)
    • Y=ty*SIN(θ/2)
    • Z=tz*SIN(θ/2)
    • W=COS(θ/2)

由于
angle=2*ACOS(W)=2*(θ/2)=θ,因此此代码的作用正好相反。因此变量
angle
存储旋转角度

有证据证明这一点吗?因为我以前从未见过这两种形式之间的转换。是否有一个3d库需要四元数的球坐标的例子?您要问的是如何将方向向量的笛卡尔坐标
[tx,ty,tz]
转换为球坐标。网上有很多关于这类事情的参考资料。嗯,这是哪个方向向量?我见过四元数转换为上/右/前向量。正如我所说,四元数表示旋转轴和角度。方向向量是旋转轴的方向向量。不要和旋转矩阵的方向向量混淆。谢谢。我在看轴角到四分之一公式,现在这些步骤更有意义了。对于经度,这个公式应该加360还是2*PI?我想要以弧度为单位的初始值。