我有一个定义多边形的坐标列表(纬度,经度)。它的边缘是通过将两个点与弧相连接而创建的,弧是这些点之间的最短路径。
我的问题是确定是否有另一个点(让我们称之为 U )放入或放出多边形。我已经在网上搜索了几个小时,寻找一个完整且没有任何缺陷的算法。这就是我希望我的算法支持和接受什么(就可能的弱点而言):
我决定实施以下方法(作为适用于2D场景的光线投射算法的修改)。
我知道如何从第2点到第5点实施计算,但我不知道如何选择起点 S 。它在2D平面上并不那么明显,因为我不能只选择最左边一点的点。
关于如何选择这一点的任何想法( S )以及我的方法是否合理且最佳?
感谢您的任何意见!
答案 0 :(得分:0)
如果多边形是局部的,则只需在点 B 上取与地球球体相切的平面,然后计算多边形顶点在该平面上的投影,这样问题就变成了缩小为二维。
当您用投影中的直线近似球形弧时,此方法会引入一个小的误差。如果多边形较小,则可能微不足道,否则,可以在进行投影时沿圆弧添加中间点。
您还应该考虑 B 对映体上的多边形,但是考虑到多边形的方向或检查 B 与一些多边形顶点。
最后,如果必须为此查询太多点,则可能希望选择一些固定的投影平面(例如,形成包裹球体的八面体的那些投影平面),然后预先计算多边形的投影。您甚至可以为每个树创建一些2d索引结构作为四叉树,以加快查找速度。
答案 1 :(得分:0)
最大的问题是定义“在多边形内部”的含义。
在球体上,每个多边形(只要直线不相交)都定义了球体的两个区域。两个区域都有资格被称为多边形的内部。
考虑在南极周围的一个简单的1米长的黄色方形正方形。
您可以将黄色区域视为正方形的内部,也可以将正方形包围在每条线以北(地球其余部分)以北的所有区域。
因此,从技术上讲,球面上的任何点都“有效地”位于多边形内部。
唯一的消除歧义的方法是选择所需多边形的哪一侧。例如,将内部始终定义为每个边缘右侧的区域。