Если х, у внутри координатного поля - PullRequest
0 голосов
/ 29 января 2019

Я пытался найти эффективное решение этой проблемы:

def hit(pos,box):
    if pos[0] > box[0]:
        if pos[0] < box[0]+box[2]:
            if pos[1] > box[1]:
                if pos[1] < box[1]+box[3]:
                    return True
    return False
pos = (50,132); box = (20,50,60,150)
hit(pos,box)

Я использую Pygame и хочу вычислить, находятся ли координаты x, y внутри поля x, y, x +, y +.Пиксельное совершенство не проблема.Я попытался поместить все проверки if в большую и-и-и-операцию, но, похоже, она имеет одинаковую скорость.

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы можете сделать свои коды намерением намного яснее:

def isInside(pos,box):
    p_x, p_y = pos

    min_x = box[0]
    max_x = min_x + box[2]
    min_y = box[1]
    max_y = min_y + box[3]

    return min_x <= p_x <= max_x and min_y <= p_y <= max_y

Это на 5 (7) строк больше, чем строго необходимо - но если вы проснетесь в 2 часа ночи и получите этот кодинтерпретировать, что он делает ... вы можете увидеть , что он делает.

однострочник в Филипп Млынарски ответ.

0 голосов
/ 29 января 2019

Если вы используете pygame, тогда box должно быть Rect, и тогда вы можете использовать collidepoint:

pos = (50,132)
box = pygame.Rect((20,50,60,150))

hit = box.collidepoint(pos)
0 голосов
/ 29 января 2019

Ваше решение является эффективным, однако вы можете сделать его более элегантным и лаконичным, например:

def hit(pos,box):
    return box[0]+box[2] > pos[0] > box[0] and box[1]+box[3] > pos[1] > box[1]

Поскольку мы возвращаем boolean значения, мы можем просто объединить наши условия.

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