Есть ли в Pygame способ определить, находится ли прямоугольник полностью внутри маски?

Есть ли в Pygame способ определить, находится ли прямоугольник полностью внутри маски?

Я знаю, что есть прямоугольник в прямоугольном столкновении и точка столкновения (точка в прямоугольном столкновении), но есть ли способ определить, находится ли прямоугольник внутри маски?

Спасибо

1 ответ

Решение

Я не верю, что Pygame предоставляет какую-либо функцию для этого. Это определенно было бы сложно, из-за "бесформенных" возможностей маски. Одна из возможностей, которая может работать для вас, заключается в том, чтобы сначала получить список ограничивающих элементов маски (список элементов, которые вместе "содержат" все точки маски) и проверить, находится ли ваш объект внутри какого-либо из этих элементов.:

bounding_rects = mask.get_bounding_rects()
for b_rect in bounding_rects:
    if b_rect.contains(test_rect):
        print "Rect is inside mask"

Конечно, при таком решении, если прямоугольник находится внутри маски, но не внутри какого-либо одного ограничивающего прямоугольника, тест не пройден. Вот идея того, как вы могли бы справиться с этим с компромиссом с небольшой потерей точности:

bounding_rects = mask.get_bounding_rects()
mask_rect = bounding_rects[0].unionall(bounding_rects)
if mask_rect.contains(test_rect):
    print "Rect is inside mask"

Это решение объединяет все ограничивающие стороны маски в один прямоугольник, который имеет возможность покрывать область, которую не покрывал ни один из ограничивающих участков (если два участка имеют промежуток в 10 пикселей между собой и объединены вместе, новый прямоугольник будет содержать этот пробел)

Другие вопросы по тегам