首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Douglas-Peucker -球面上从一点到圆的最短弧

Douglas-Peucker -球面上从一点到圆的最短弧
EN

Stack Overflow用户
提问于 2010-09-21 23:23:22
回答 1查看 1.2K关注 0票数 1

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

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

因此,如果我没有记错的话,我需要计算球体表面上最短圆弧的长度,即从一点到通过球体表面另外两个点的圆,圆心与球体(地球)的中心重合。

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

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-22 11:59:49

我将尝试用单位向量pqr来表示所有内容,这些单位向量可以被认为是以原点<>e29>为中心的单位球体Σ代码上的点。您可以通过按地球半径放大来将其转换为地面量。有一些background material here

我们想要找出从p到大圆C的大圆距离d,通过q和r。C是平面P和球体的交集,其中P是通过Q<Σ>E228,r和原点的平面。D是p和P之间的角度θ(以弧度表示)。P的法向量是归一化的叉积q×r/sinφ,,其中φ是q和r之间的角度。

我们最终会得到

θ= arcsin(p⋅(q×r)/sinφ)

就像我说的,这里的一切都被地球半径R放大了。所以这三个点是Rp,Rq,Rr,距离是Rθ。

但是,如果您只想找到一个距离最短的点/线组合,则可以省略乘以R。实际上,您可以省略p⋅(q×r)/sinφ. (),只查看arcsin的相对大小

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3761786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档