四元数旋转到纬度/经度

时间:2015-08-12 07:05:58

标签: c++ opengl quaternions glm-math

TL; DR
我有一个四元数,表示球体的方向(地球球体)。从四元数我希望得出纬度/经度。我可以在脑海中想象这个过程,但是对于数学(矩阵/四元数)来说很弱,而且代码也不是很好(仍在学习OpenGL / GLM)。我怎样才能做到这一点?这适用于使用c ++和GLM库的OpenGL。

长版
我正在制作一个基于地球地球的绘图程序 - 与谷歌地球不同,但是出于定制的目的,GE无法适应。

我在C ++中使用OpenGL和GLM库进行此操作。

我已成功编码球体并使用四元数直接表示它的方向。没有涉及欧拉角。我可以使用鼠标移动旋转地球,从而根据当前视点和方向在任意轴上旋转地球。

但是,我想在球体上获得一个点的纬度和经度,不仅对于用户,而且对于一些内部程序的使用。

我可以想象这必须是可能的。想象一下世界空间中没有旋转的球体。假设OpenGL的右手规则,北极指向Y轴,赤道在X / Z平面上平行。因此,Y轴上的纬度/经度为90N,其他为E / W(退化)。本初子午线将位于+ Z轴上。

如果地球/球体任意旋转,地球的北极现在就在其他地方。该点可以在旋转之前映射到原始球体的纬度/经度。想象一下两个重叠的球体,一个是旋转的球体,另一个是固定的参考球。

(实际上,它将是相反的。我寻找的纬度/经度是旋转球体上与未旋转参考球体的北极相关的点)

在我的脑海中,似乎我应该能够从它的四元数中获得地球地球的方向轴的矢量,并将其与未旋转的球体的矢量进行比较。但我似乎无法理解如何做到这一点。 (我想我还是不完全理解垫子和quats,并且到目前为止只是失误了我的成功)

我希望在深度数学中不需要速成课程的情况下实现这一目标。从能够使用GLM库实现我的目标的角度来看,我正在寻找解决方案/理解/指导。理想情况下,代码示例有一些一般性的解释。我从榜样中学到了最好的东西。

仅供参考,在我的代码中,地球/球体的旋转完全独立于相机(使用欧拉角),因此可以独立移动。因此,我无法使用相机中的任何内容来确定这一点。

1 个答案:

答案 0 :(得分:0)

也许您可以尝试从该线程Longitude / Latitude to quaternion关注该链接(即使用boost;)),然后扣除该转换的反转。 或者您也可以通过将四元数转换为欧拉角来添加一步?