Проверяете, пересекает ли точка повернутый прямоугольник?

Если у меня есть 2D-прямоугольник типа Microsoft.XNA.Framework.Rectangle, и я хочу увидеть, проходит ли точка на экране (определенная как (x, y)) через него после того, как она также была повернута на определенную величину?


person meds    schedule 06.02.2011    source источник
comment
Аналогичный вопрос размещен здесь: stackoverflow.com/questions/1240660/ Она находится в формах Windows, но также применима к XNA.   -  person Marking    schedule 07.02.2011


Ответы (2)


Поверните вокруг начала координат так, чтобы прямоугольник был выровнен по осям X и Y, тогда тест станет простым:

is rect.left <= point.x <= rect.right, is rect.bottom <= point.y <= rect.top

Если вы не знаете, как вращается прямоугольник, вы можете выяснить это с помощью тригонометрии.

person Matt Curtis    schedule 06.02.2011
comment
Дайте мне знать, если вам нужна дополнительная помощь с триггером. - person Matt Curtis; 06.02.2011
comment
Поправьте меня, если я ошибаюсь, но если я поверну прямоугольник так, как вы предлагаете, я буду проверять пересечения в новом прямоугольнике, который охватывает повернутый прямоугольник. Что я хочу сделать, так это проверить пересечения только на повернутом прямоугольнике. - person meds; 07.02.2011
comment
Если вы повернете и прямоугольник, и точку, новый прямоугольник будет фактически тем же прямоугольником, только аккуратно выровненным, чтобы вы могли легко проверить его границы. Чтобы увидеть, как это работает, нарисуйте (на бумаге) прямоугольник под углом 45 градусов вместе с некоторой точкой. Теперь наклоните голову на 45 градусов, и прямоугольник будет выглядеть так, как будто он больше не вращается. - person Matt Curtis; 07.02.2011

Можете ли вы повернуть и прямоугольник, и точку, а затем посмотреть, находится ли точка внутри, с простой проверкой границ?

Под неповоротом я подразумеваю, что один из краев прямоугольника выровнен по оси x.

person Daniel Mošmondor    schedule 06.02.2011