我有一个点列表,我需要查找这些点是否存在于由左上角和右下角定义的矩形中。如果所有点都属于矩形,则结果为True,否则结果为False。
这是我的代码,但是我在某处弄错了。
def Functn1(topLeft=(0,0), bottomRight=(0,0), pointList=[]):
x1 = topLeft[0]
y1 = topLeft[1]
x2 = bottomRight[0]
y2 = bottomRight[1]
xa = pointList[i][0]
ya = pointList[i][0]
xb = pointList[i][1]
yb = pointList[i][1]
lengthofList = len(pointList)
for i in range(lengthofList):
if ((xa > x1 and xb < x2) and (ya > y1 and yb < y2)):
#if ((x[i][0] > x1 and x[i][1] < x2) and (y[i][0] > y1 and y[i][1] < y2)):
#Also tried using this code but keep getting the same error
return True
else:
return False
Functn1((0,0), (5,5), [(1,1), (0,0), (5,6)]) #should get False
我收到此错误:
<ipython-input-153-669eeffdb011> in allIn(topLeft, bottomRight, pointList)
20
21 for i in range(lengthofList):
---> 22 if ((x[i][0] > x1 and x[i][1] < x2) and (y[i][0] > y1 and y[i][1] < y2)):
23 return True
24 else:
TypeError: 'int' object is not subscriptable
答案 0 :(得分:2)
根据我对您问题的理解,以下是您在代码中犯的一些错误:
您在设置或初始化变量之前已使用i
变量,例如:-。
xa = pointList[i][0]
ya = pointList[i][0]
xb = pointList[i][1]
yb = pointList[i][1]
我认为您想在for
循环中将其用作迭代变量,但在循环外使用了它。
您为pointList
变量中的每个点创建了四个变量,我认为这是针对该点的 x,y,宽度,高度的,尽管一个点没有任何宽度或高度。
您的循环无效,因为它在循环遍历列表中的第一项后返回True
或False
,并且不会搜索其他点以知道它们是否在内部或在矩形外部。
因此,我创建了代码副本,并根据您的需要进行了一些更改,并且也易于理解:
def Functn1(topLeft=(0,0), bottomRight=(0,0), pointList=[]):
x = topLeft[0] #Rectangle x
y = topLeft[1] #Rectangle y
w = bottomRight[0] #Rectangle width(which you created with name of x2)
h = bottomRight[1] #Rectangle height(which you created with name of y2)
for i in range(len(pointList)):
p_x = pointList[i][0] #Current point x
p_y = pointList[i][1] #Current point y
if not ((p_x >= x and p_x < w) and (p_y >= y and p_y < h)): #Return False if the point wasn't in the rectangle (because you said theyre all must be inside the rectangle)
return False
return True #If non of them was outside the rectangle (Or it wasn't returned False) so return True
但是,如果您使用或阅读图形,则应该知道示例中的(0, 0)
位于矩形内部,(5, 5)
位于矩形外部,因为如果某物的大小为5像素,则最后一个pixel的值是4而不是5,我编写了这样的代码,如果要更改它,则可以轻松地将<
运算符更改为<=
,也可以将>
更改为{{ 1}},以包含矩形的最后一个点。