gpt4 book ai didi

latitude-longitude - 经度/纬度到四元数

转载 作者:行者123 更新时间:2023-12-04 20:22:03 25 4
gpt4 key购买 nike

我有一个经度和纬度,想将其转换为四元数,想知道如何做到这一点?我想使用它,因为我有一个应用程序可以将地球投影到一个球体上,我想从一个位置旋转到另一个位置。

最好的事物!

最佳答案

有一种不使用矩阵或向量的方法,类似于 this numpy implementation .我们可以将经度/纬度视为组合在一起的两个四元数旋转。

让我们使用 Z-up 右手坐标系。我们称经度为 φ 和纬度为 θ,两者所代表的点为 (φ, θ)。对于可视化,红色轴对应 X,绿色对应 Y,蓝色对应 Z。

我们想要找到代表从 (0, 0) 旋转到( a , b )的四元数,绿色:

Sphere with origin and destination points

我们可以将这种旋转表示为首先是纵向旋转,然后是横向旋转的组合,如下所示:

First rotation
Second rotation

首先,我们旋转了 沿 Z 轴,这会变换 X 和 Y 轴。然后,我们旋转了 b 沿着新的局部 Y 轴。因此,我们知道该旋转的两组轴/角度信息。

幸运的是,从轴/角度到四元数的转换是已知的。给定角度 α 和轴向量 ω,得到的四元数为:

(cos(α/2), ω.x*sin(α/2), ω.y*sin(α/2), ω.z*sin(α/2))

所以第一次旋转由 的旋转表示沿世界 (0, 0, 1) 轴的度数,给我们:
q1 = (cos(a/2), 0, 0, sin(a/2))

第二个旋转由 的旋转表示b 沿变换/局部 (0, 1, 0) 轴的度数,给我们:
q2 = (cos(b/2), 0, sin(b/2), 0)

我们可以将这两个四元数相乘得到一个四元数,表示从 (0, 0) 到 ( a , b ) 的复合旋转。四元数乘法的公式有点长,但你可以找到 here .结果:
q2*q1 = (cos(a/2)cos(b/2), -sin(a/2)sin(b/2), cos(a/2)sin(b/2), sin(a/2)cos(b/2))

并不是说它有多大意义,但是我们可以确认这个公式与之前提到的 numpy 实现相同。

JCooper 提到了一个重要的观点,即在本例中沿 X 轴仍保留一个自由度。如果θ保持在±90度以内,我们可以想象Z轴总是向上。这具有约束 X 轴旋转的效果,并且希望是您想要的。

希望这可以帮助!

编辑:请注意,这与使用 2 个欧拉角基本相同。因此,要反转这种转换,您可以使用任何四元数到欧拉角的转换,前提是旋转顺序相同。

关于latitude-longitude - 经度/纬度到四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com