我正在实现简单的导航,我需要计算路线上的大概位置 (GPS)。路线是一个点列表,所以基本上它看起来像这样:
(latX, longX)
(lat1, long1) o------o---------------o (lat2, long2)
|
|
o
(lat3, long3) - GPS My location
我有两个点 (lat1, long1) 和 (lat2, long2) 以及我的位置 (lat3, long3)。我如何计算 (latX, longX)?
最佳答案
让我试着给你一个草图,说明我如何将问题分解成更小的步骤。
将地球视为半径为
r
的完美 3D 球体.转换
(lat, long)
给出的位置对成 3D 点(x, y, z)
在球体表面,即x^2 + y^2 + z^2 = r^2
.您还需要进行逆变换才能返回(lat, long)
坐标。让我们放(使用上面的 2)
P1 := (x1, y1, z1) <-> (lat1, long1)
P2 := (x2, y2, z2) <-> (lat2, long2)
P3 := (x3, y3, z3) <-> (lat3, long3)
P := (x, y, z) <-> (latX, longX)
让
H
是包含原点(在地球中心)和点P1
的平面和P2
.注意H
在连接P1
的路径中与球体表面相交与P2
如您的插图所示。让
(a, b, c)
垂直于H
.你可以通过求解矩阵方程Mv = 0
来找到它, 其中M
是行为(x1, y1, z1)
的矩阵和(x2, y2, z2)
和v
是坐标为(a, b, c)
的未知列.让
Q = (x3, y3, z3) + u*(a, b, c)
, 其中u
是Q = (q1, q2, q3)
的系数H
中的行.你可以计算出u
通过求解矩阵方程Mv = P3
, 其中M
是3x3
带列的矩阵(x1, y1, z1)
,(x2, y2, z2)
和(-a, -b, -c)
,v
是未知列(s, t, u)
和P3
代表列(x3, y3, z3)
.让
P = w*Q
, 其中w
是P = (x, y, z)
的系数与x^2 + y^2 + z^2 = r^2
.使用上面第 2 步中提到的逆转换来计算
(latX, longX) <-> (x, y, z)
.
关于algorithm - 计算两个位置之间的大概位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387255/