代码之家  ›  专栏  ›  技术社区  ›  Maurice Perry

道格拉斯·派克——球面上从一点到一圆的最短弧

  •  1
  • Maurice Perry  · 技术社区  · 15 年前

    我在各种编程语言中看到过许多例子,它们使用Douglas-Peucker折线简化算法来生成要在Google地图上使用的GPolyline。 当表示为平面上的多段线时,该算法涉及计算点和线(通过另外两个点)之间的距离。

    到目前为止,我看到的所有例子都以一种非常简单的方式应用了这个算法,简单地用纬度和经度代替x和y。这可能会产生可接受的结果,只要多段线是非常局部的,不太接近一个极点,并且不跨越180°子午线,但我想实现一个更通用的算法版本。

    所以,如果我没弄错的话,我需要计算一个球面上最短弧的长度,从一个点到穿过球面上另外两个点的圆,这个点的中心与球面(地球)的中心重合。

    有人知道计算这个长度的公式吗?

    提前谢谢

    1 回复  |  直到 15 年前
        1
  •  2
  •   Stanley F.    6 年前

    我试着用单位向量来表示一切 ,和 ,可以看作单位球体上的点 以原点为中心 . 你可以通过放大地球的半径把它转换成地球上的量。有一些 background material here

    我们要找到大圆距离 d级 到大圈子去 C级 通过 C级 球体呢 , 0 . d级 简单地说就是 . 的法向量 是归一化的叉积 /sinφ,其中φ是

    我们的结局是

    ( )/sinφ)

    就像我说的,这里的一切都是按半径放大的 地球的一部分。所以这三点是 , , ,距离为 θ.

    但是,如果您只想找到距离最短的点/线组合,则可以省略乘以 . 事实上,您可以忽略arcin(),只需查看 ( × )/sinφ。

    推荐文章