Андрей
Высший разум
(459726)
7 лет назад
Если прямоугольник параллелен осям координат, то ответы выше верны. Иначе задача усложняется. Самые примитивные способы:
1. Подсчитать сумму площадей 4 треугольников, образованных точкой и смежными вершинами прямоугольника. Если она больше площади прямоугольника, точка вне прямоугольника.
2. Подсчитать сумму углов с вершиной в точке и лучами, проходящими через смежные вершины. Если она меньше 360 градусов, точка вне прямоугольника.
А можно и так:
Запишем уравнение прямой, проходящей через точки (x1, y1) и (x2, y2) в виде;
(x-x1)/(x2-x1) = (y-y1)/(y2-y1) =>
(x-x1)*(y2-y1) - (y-y1)*(x2-x1) = 0
Тогда знак функции q(x, y) = (x-x1)*(y2-y1) - (y-y1)*(x2-x1) будет зависеть от того, с какой стороны прямой лежит точка x. Но если точка внутри квадрата, то она лежит по разные стороны от параллельных сторон прямоугольника.
Если точки перечислены в порядке:
1 2
3 4
(диагонали 1-4 и 2-3, остальное не важно)
То получаем проверку:
(((x - x1) * (y2-y1) - (y - y1) * (x2 - x1)) * ((x - x3) * (y4-y3) - (y - y3) * (x4 - x3)) <= 0) and
(((x - x1) * (y3-y1) - (y - y1) * (x3 - x1)) * ((x - x2) * (y4-y2) - (y - y2) * (x4 - x2)) <= 0)
Globe
Просветленный
(24839)
7 лет назад
стороны квадрата параллельны координатным осям?
если нет, то печаль - придется, например, посчитать сумму расстояний до противоположных сторон и, если они равны длине стороны квадрата, то всё ок.