标准凸包算法不适用于(经度,纬度)点,因为标准算法假定您需要一组笛卡尔点的 shell 。纬度-经度点不是笛卡尔坐标,因为经度在反子午线(+/- 180度)处“环绕”。即,经度179以东两度为-179。
因此,如果您的点集恰好跨越了反子午线,您将计算出错误地围绕世界延伸的伪造船体。
对我可以使用标准凸包算法进行纠正的技巧的任何建议,还是指向正确的“地球球形”包算法的指针?
现在,我开始思考,有更多有趣的案例要考虑,而不是跨越反美国人。考虑环绕地球的点“带”-它的凸包没有东西边界。甚至更进一步,{(0,0),(0、90),(0,-90),(90、0),(-90、0),(180、0)}的凸包是什么? -它似乎包含地球的整个表面,那么在其周界上有哪些点?
最佳答案
标准凸包算法不会因坐标在地球表面的环绕而失败,而是会遇到更基本的问题。球体的表面(不要忘了地球的非球形性)不是欧几里得空间,因此欧几里得几何学不起作用,而凸包例程则假定基础空间是欧几里得(请向我展示一个不包含欧几里得的空间)。 t,请)将无法正常工作。
球体的表面符合elliptic geometry的概念,其中线是大圆,对映点被视为同一点。您已经开始体验由于尝试将欧几里得凸性概念应用于椭圆空间而引起的问题。
向您开放的一种方法是采用geodesic convexity的定义并实现测地线凸包例程。看起来很毛。而且它可能不会产生符合您(通常是欧几里得)期望的结果。在许多情况下,对于3个任意点,凸包都是球体的整个表面。
导航员和制图师千古以来采用的另一种方法是将球体的一部分表面(包含所有点的部分)投影到欧几里得空间(这是 map 投影的主题,我不会打扰您)并引用其中的大量文献),并找出投影点的凸包。将您感兴趣的区域投影到平面上并调整坐标,以使其不会环绕;例如,如果您对法国感兴趣,可以通过加30度来调整所有经度,以使整个国家都用+ ve数进行协调。
在撰写本文时,@ Li-aung Yip的答案中提出的使用3D凸包算法的想法让我误以为是。一组表面点的3D凸包将包含位于球体内的点,边和面。这些从字面上看并不存在于球的2D曲面上,只会将您的困难从从2D中不太正确的概念进行搏斗转变为3D中完全错误的困难。此外,我从维基百科的文章中了解到,我提到封闭的半球(即包括其“赤道”的半球)在球体表面的几何形状上不是凸的。
关于geometry - 球体表面上(经度,纬度)点的凸包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9678624/