Проверьте, является ли список точек частью прямоугольника - PullRequest
0 голосов
/ 02 октября 2018

У меня есть список точек, и мне нужно выяснить, существуют ли точки в прямоугольнике, определенном верхним левым и нижним правым углами.Если все точки принадлежат прямоугольнику, то результат равен 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

1 Ответ

0 голосов
/ 02 октября 2018

Исходя из моего понимания вашего вопроса, вот некоторые из ошибок, которые вы допустили в своем коде:

  1. Вы использовали переменную i перед ее настройкой или инициализацией, например: -.

    xa = pointList[i][0]
    ya = pointList[i][0]
    xb = pointList[i][1]
    yb = pointList[i][1]
    

    Я думаю, что вы хотели использовать его в качестве итерационной переменной в цикле for, но вы использовали его вне цикла.

  2. Вы создали четырепеременные для каждой точки в переменной pointList, которые, я думаю, относятся к точке x, y, width, height , хотя точка не имеет ширины или высоты.

  3. Ваш цикл недопустим, потому что он возвращает 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 пикселей, то значение последнего пикселя равно 4, а не 5, и я написал такой код, и если вы хотите изменить его, вы можете легко изменитьоператор < для <=, а также от > до >= для включения последней точки прямоугольника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...