- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
长话短说
我有一个代表球体(地球球体)方向的四元数。我希望从四元数中得出纬度/经度。我可以在脑海中想象这个过程,但数学(矩阵/四元数)很弱,代码也好不了多少(仍在学习 OpenGL/GLM)。我怎样才能做到这一点?这是为了在使用 C++ 和 GLM 库的 OpenGL 中使用。
长版
我正在制作一个基于地球的 map 程序 - 与 Google 地球不同,但出于定制目的,GE 无法适应。
我在 C++ 中将 OpenGL 与 GLM 库一起使用。
我已经成功地对球体进行了编码,并直接使用四元数来表示它的方向。不涉及欧拉角。我可以使用鼠标移动来旋转地球仪,从而根据当前视点和方向在任意轴上旋转地球仪。
但是,我想获得球体上某个点的纬度和经度,不仅供用户使用,也供某些内部程序使用。
我可以想象这一定是可能的。想象一下世界空间中没有应用旋转的球体。假设 OpenGL 的右手法则,北极指向 Y 轴,赤道平行于 X/Z 平面。因此,Y 轴上的纬度/经度为 90N 和其他东西 E/W(退化)。本初子午线将位于 +Z 轴上。
如果任意旋转地球仪/球体,地球仪的北极现在位于其他地方。该点可以映射到旋转前原始球体的纬度/经度。想象一下两个重叠的球体,一个是旋转的地球,另一个是固定引用。
(实际上,它会反过来。我寻找的纬度/经度是旋转球体上与未旋转引用球体北极相关的点)
在我看来,似乎我应该能够以某种方式从四元数中获取地球地球方向轴的 vector ,并将其与未旋转球体的 vector 进行比较。但我似乎无法理解如何做到这一点。 (我想我仍然没有完全理解垫子和四肢训练,到目前为止只是失误导致了我的成功)
我希望在不需要深度数学速成类(class)的情况下实现这一目标。我正在从能够使用 GLM 库实现我的目标的角度寻找解决方案/理解/指导。理想情况下是带有一些一般性解释的代码示例。我从例子中学得最好。
仅供引用,在我的代码中,地球/球体的旋转完全独立于相机(使用欧拉角),因此它可以独立移动。所以我无法使用相机中的任何东西来确定这一点。
最佳答案
也许您可以尝试从该线程 Longitude / Latitude to quaternion 中访问该链接(即使用 boost ;))然后减去该转换的倒数。或者您也可以通过将四元数转换为欧拉角来添加一个步骤?
关于c++ - 四元数旋转到纬度/经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31958219/
我是一名优秀的程序员,十分优秀!