这更像是一个数学问题而不是编程问题。基本上,我有 P1:(lat1, lon1), P2:(lat2, lon2), P3:(lat3, lon3) 和 D1, D2, D3,以及第四个未知点 Px:(latx, lonx); P1、P2、P3也不在大圆的同一条路径上,D1是P1到Px的距离,D2是P2到Px的距离,以此类推。
如何计算 Px 的坐标?
=根据回复编辑=
非常感谢!
PS。如果您要指向任何 API,我希望它使用 JavaScript。
这更像是一个数学问题而不是编程问题。基本上,我有 P1:(lat1, lon1), P2:(lat2, lon2), P3:(lat3, lon3) 和 D1, D2, D3,以及第四个未知点 Px:(latx, lonx); P1、P2、P3也不在大圆的同一条路径上,D1是P1到Px的距离,D2是P2到Px的距离,以此类推。
如何计算 Px 的坐标?
=根据回复编辑=
非常感谢!
PS。如果您要指向任何 API,我希望它使用 JavaScript。
您必须了解这里会有多个满足数学约束的点。想清楚,如果你在一个球体上有两个点(暂时忽略测地线形式),P1 和 P2,并且你有另一个点 T1,距离 P1 的距离为 x,距离 P2 的距离为 y,那么你将有另一个对称的点(镜像) 点 T1' 将满足相同的距离条件,在另一边,可以这么说。
更糟糕的是:考虑一个直径为 D 的球体的情况。你的 P1 在北极,你的 P2 在南极。你看到赤道上的所有点都满足你的条件了吗?
将此应用于您的示例:考虑北极的 P1。考虑南极点的 P2。考虑到 Px 的距离,即 D1 = D2 = (2.pie.r)/4。看到问题了吗?赤道上的所有点都满足这一点,而不是一个独特的点。事实上,对于这种情况,即使 D1 != D2,您也有更小的同心线(与赤道同心),其点满足这些约束。
在您的情况下,Px 太多,一个也没有。为了得出球面上的奇点,描述约束将更加具体。
最后,确定上下文的正确性很重要。您的算法是否应该支持所有符合条件的点?或者是否应该更改您的标准,以使算法始终评估为奇异点。当心。
一些可以帮助您的链接:
维基百科:http
://en.wikipedia.org/wiki/Spherical_coordinates
SO:在球体边缘绘制一个点
更新,基于您的三点示例:
同样,可以有多个点满足您的标准。如果 P1、P2、P3 位于同一弧上怎么办?见下图。即使有三个点,也不能保证会有一个第四个点满足距离标准。即使有 n 个点,也没有这样的保证。
在数学语言中,对于一组 n 个随机点,以及到这些单独点的一组距离,满足距离标准的结果点集可能有多个元素。
你可能会误以为:哦,这家伙总是假设点位于同一弧线上。好吧,你不是在做一个特殊的算法,是吗?你的算法将是一个通用的解决方案,不是吗?
您需要保证这些点不在同一弧上(在一组 n 个点中,我认为至少有一个点不能在同一弧上)。
为了将源点保持在最低限度:您需要在点之间建立训练关系,因为这样,仅使用两个点,三角形关系将恰好产生一个点。
什么三角形?想象一下:你有两个点,第三个未知点。您提到的所有距离都是球形的,即曲面距离。你看到这些点之间也有平坦的距离吗?你能想象,会有一个平面穿过这些点,切割球体,对吗?我这样说是为了强调您不需要担心表面曲率(因此是 3d 球面角)。你可以看到底层的二维三角形,它的未知顶点也将是球面上的第三个点。
我知道这对您来说可能很难想象,我会尝试为此制作图表。(找不到任何好的在线工具!)。
最后,这将有很大帮助:请仔细阅读。
取自维基百科:http
://en.wikipedia.org/wiki/Great-circle_distance
大圆或正交距离是球体表面上任意两点之间沿球体表面上的路径测量的最短距离(而不是穿过球体的内部)。因为球面几何不同于普通的欧几里得几何,所以距离方程采用不同的形式。欧几里得空间中两点之间的距离是从一点到另一点的直线的长度。然而,在球面上,没有直线。在非欧几里得几何中,直线被测地线代替。球体上的测地线是大圆(球体上的圆,其中心与球体的中心重合)。
更多更新:
经纬度到笛卡尔坐标之间的转换可以通过 Haversine 公式完成。去谷歌上查询。见这里:从经度\纬度转换为笛卡尔坐标 和这里:http ://en.wikipedia.org/wiki/World_Geodetic_System