Как представлен прямоугольник? Три очка? Четыре очка? Точка, стороны и угол? Две точки и сторона? Что-то другое? Не зная об этом, любые попытки ответить на ваш вопрос будут иметь чисто академическое значение.
В любом случае для любого выпуклого многоугольника (включая прямоугольник) тест очень прост: проверьте каждый край многоугольника, предполагая, что каждый край ориентирован против часовой стрелки, и проверьте, находится ли точка слева от края (в левой полуплоскости). Если все ребра проходят тест - точка находится внутри. Если хотя бы один сбой - точка находится вне.
Чтобы проверить, лежит ли точка (xp, yp)
с левой стороны от края (x1, y1) - (x2, y2)
, вам просто нужно вычислить
D = (x2 - x1) * (yp - y1) - (xp - x1) * (y2 - y1)
Если D > 0
, точка находится с левой стороны. Если D < 0
, точка находится справа. Если D = 0
, точка находится на прямой.
Предыдущая версия этого ответа описывала, казалось бы, другую версию левого теста (см. Ниже). Но легко показать, что он вычисляет одно и то же значение.
... Чтобы проверить, лежит ли точка (xp, yp)
с левой стороны ребра (x1, y1) - (x2, y2)
, вам необходимо построить уравнение для линии, содержащей ребро. Уравнение выглядит следующим образом
A * x + B * y + C = 0
, где
A = -(y2 - y1)
B = x2 - x1
C = -(A * x1 + B * y1)
Теперь все, что вам нужно сделать, это вычислить
D = A * xp + B * yp + C
Если D > 0
, точка находится с левой стороны. Если D < 0
, точка находится на правой стороне. Если D = 0
, точка находится на прямой.
Однако этот тест снова работает для любого выпуклого многоугольника, что означает, что он может быть слишком общим для прямоугольника. Прямоугольник может позволить более простой тест ... Например, в прямоугольнике (или в любом другом параллелограмме) значения A
и B
имеют одинаковую величину, но разные знаки для противоположных (то есть параллельных) ребер, которые могут использовать для упрощения теста.