【问题标题】:Quaternion rotation to latitude/longitude四元数旋转到纬度/经度
【发布时间】:2015-08-12 07:05:57
【问题描述】:

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

加长版
我正在制作一个基于地球的地图程序 - 与 Google 地球不同,但用于 GE 无法适应的定制目的。

我正在使用带有 GLM 库的 OpenGL 在 C++ 中执行此操作。

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

但是,我想获得球体上某个点的纬度和经度,不仅供用户使用,也供某些内部程序使用。

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

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

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

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

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

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

【问题讨论】:

  • 您能想象如果您发布图片不需要声誉,那么 SO 会收到多少垃圾邮件?
  • @genpfault,我会私下问这个,但显然没有私人消息系统。作为一个新用户,我想对我的帖子的编辑进行解释。删除的内容是否违反了某些规则?如果是这样,您能否直接指出我所说的规则以及我是如何违反它的?当然,对意外发现需要“声誉”来发布图像的批评的单行笑话几乎不值得对所述内容进行摘要删除吗?我看不出我说的有什么害处。请帮助我避免对 Stack Exchange 的使用留下不好的第一印象。
  • @genpfault - 我刚刚注意到我的介绍甚至指出我是这里的新用户已被删除。 “新用户,第一次发帖。”为什么?放在那里是为了让读者(比如你)知道我是新来的,如果我做错了什么,希望他们(比如你)会理解并礼貌地纠正我。但是,如果对帖子和 cmets 的馄饨编辑是这里的常态,那将解释我对我读过的其他帖子和回复的困惑,当我看到没有上下文的回复或者它们是我什至找不到的其他回复时。现在我确实对 Stack Exchange 有不好的印象。
  • 只是general 噪音reduction
  • 说“嗨”是噪音吗?对不起,但这只是愚蠢的。然而,我将努力在未来以一种完全不人道的、没有感情的、干巴巴的瓦肯人的方式来构建我未来的写作。

标签: c++ opengl quaternions glm-math


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 2013-09-04
    • 2015-01-22
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多