我想知道确定大量点(O(1百万)是否在多边形的集合(O(10))内部或外部的最有效方法是什么?后者不一定是凸的,但是我们没有洞。目前我通过比较它们的位置和边界框来修剪点数,然后在剩下的点上使用this交叉数法。但是,是否有更快的方法?
答案 0 :(得分:3)
有一个有效的matplotlib函数:matplotlib.nxutils.points_inside_poly()。该算法记录在this page上。
答案 1 :(得分:2)
假设您有轴对齐的边界框,您可以按x坐标对点列表进行排序,通过二分查找找到列表点上的位置进入边界框内部或外部,并可能丢弃大量的点一旦。重复y坐标。然后像以前一样继续剩余的积分。您可以执行多边形三角测量以加速边界框内的测试。
当平面的面积远大于多边形的面积时,表现最佳,并且多边形相当紧凑(即不长和薄,这可能会给你很多误报)。
答案 2 :(得分:1)
我可能会使用Quadtree对“我在多边形内部或外部”进行快速粗略测试,以达到生成四叉树时所确定的某种精度级别。
每次查找都是O(log n),它的速度大约是你能得到的。对于位于四叉树的单元格内的点,标记为“包含边缘”,那么您将不得不进行传统的多边形点测试。