Algorithm 给定一组多边形和一系列点,找出点所在的多边形

Algorithm 给定一组多边形和一系列点,找出点所在的多边形,algorithm,search,computational-geometry,Algorithm,Search,Computational Geometry,这是一个类似于的问题,但我认为,如果我能用更一般的术语重新表述它,这将是有帮助的 我有一组多边形,这些多边形可以相互接触,重叠,可以呈现任何形状。我的问题是,给定一个点列表,如何设计一个高效的算法来找到点所在的多边形 点位置的一个有趣限制是,如果有帮助,所有点都位于多边形的边缘 我理解r-树,但是考虑到我在做一系列的点,有没有更有效的算法来代替逐点计算呢?我想你遇到了关于这个问题的直觉(这是一种准模拟感知),而不是一种必然的O(n)计算方法 给定一个平面、一条退化多边形(一条线)和平面上的任意一

这是一个类似于的问题,但我认为,如果我能用更一般的术语重新表述它,这将是有帮助的

我有一组多边形,这些多边形可以相互接触,重叠,可以呈现任何形状。我的问题是,给定一个点列表,如何设计一个高效的算法来找到点所在的多边形

点位置的一个有趣限制是,如果有帮助,所有点都位于多边形的边缘


我理解r-树,但是考虑到我在做一系列的点,有没有更有效的算法来代替逐点计算呢?

我想你遇到了关于这个问题的直觉(这是一种准模拟感知),而不是一种必然的O(n)计算方法

给定一个平面、一条退化多边形(一条线)和平面上的任意一组点,这些点是与该线相交还是落在该线的“上方”或“下方”?我想不出一个比O(n)小的方法,即使对于这个退化的情况

或者,必须检查每个点与直线的关系,或者必须将点划分为一些树状结构,这至少需要O(n)个操作,但很可能需要更多操作


如果我在计算几何方面做得更好,我可能会有权威地说,你刚刚重申了,但事实上,我只能提出建议。

如果点只能落在边上,那么你只需检查边就可以找到O(n)中的多边形

如果不是这样,则必须对O(n logn)中的多边形进行三角剖分,以对O(n)中的三角形进行测试

也可以将空间除以从每个线段延伸的直线,注意哪一侧位于相应多边形的内侧/外侧。如果一个点落在一条边上或位于多边形每条边的内部,则该点位于多边形内部。在最坏的情况下,边的数量是O(n),但在平均情况下,多边形的数量趋于O(m)


R-树在这两种情况下都会有所帮助,但前提是您有几个点需要测试。否则,构建R-树将比搜索三角形列表更昂贵。

这里的关键搜索词是点位置。在这个名称下,计算几何文献中有许多算法用于各种情况,从特殊到一般。例如,列出了各种软件包,包括我自己的。(现在的列表有些过时了。)

在速度和程序复杂性(以及实现工作)之间有一个重要的权衡。最容易编程的方法是使用多边形代码中的标准点,对照每个多边形检查每个点。但这可能会很慢,这取决于你有多少多边形。 更困难的是通过扫描平面来构建点位置数据结构 找到所有的边交点。请参阅以查看您的一些选项