当你说“a和b的那些在多边形之外的点”是指所有多边形的外部还是多边形的外部?在
这是:读入多边形点并创建与point_in_poly函数一起使用的适当数据结构的例程。在
检查点是否在任何多边形中的例行程序。在
以下是从文件中读取多边形点的例程:def readPolygons(path):
polygons = []
with open(path) as f:
for line in f: # (1)
words = [ float(y) for y in (line.split())[2:] ] # (2)
poly = zip (words[::2], words[1::2]) # (3)
if len(poly): # (4)
polygons.append(poly)
return polygons
每个多边形都表示为一对浮点数的列表,例程返回一个多边形列表。在
注意事项:迭代文件中的所有行。在
将行拆分为单词,将前两个单词与[2:]放在一起,然后将每个单词转换为一个float。在
创建一个成对列表,将第1、3、5等作为x坐标,将第2、4、6等作为y坐标。在
忽略空白行。在
以下是检查点是否位于任何多边形中的例程:
^{pr2}$
如果条件是“在所有多边形中”,则使用:def inAllPolygons(x,y,polygons):
for p in polygons:
if not point_in_poly(x,y,p):
return False
return True
更新:如果您有一个点列表points,您可以创建另一个列表,其中包含那些不在任何多边形中的点:outliers = []
for p in points:
(x,y) = p
if not inAnyPolygons(x,y,polygons):
outliers.append(p)
return outliers
如果a和b是分别代表100000个点的x和y坐标的数字列表,则以下是查找异常值的代码:outliers = []
for (x,y) in zip(a,b):
if not inAnyPolygons(x,y,polygons):
outliers.append((x,y))
return outliers