![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверить, принадлежит ли точка прямоугольнику [Delphi]
AlexanderMS © (2007-08-10 05:48:00)Известны координаты вершин прямоугольника (на плоскости), угол его поворота (относительно центра), и координаты точки. Как программно узнать, принадлежит ли точка прямоугольнику, или нет?
Нашёл в общем случае для полигона (можно обходить все вершины с суммированием углов между векторами "точка-вершина" (если +-360, то принадлежит)), но здесь как-то проще можно сделать.
Jkot (2007-08-11 04:53:00) [21]Есть такой самый простой но и самый медленнй алгоритм прямоугольник это 2 треугольника -> находим плошадь прямоугольника потом берём точку и от неё строим 4 треуголька (точка вершина и сторона треугольника совпадает с одной из сторон прямоугольника) складываем плошади этих 4 треугольников и сравниваем с погрешностью с плошадью прямоугольника всё...
@!!ex (2007-08-10 15:26:00) [22]> И чем это заруливает предложенное в [1]. Те же яйца, только
> сбоку.
Развернутые яйца. :))
А алгоритм тот же самый, если я правильно понимаю.
MBo (2007-08-10 15:11:00) [23]хм... прочитал subj неверно и отвечал в [1] о принадлежности к треугольнику ;)
Для прямоугольника не нужно все четыре стороны обсчитывать. Достаточно разложить вектор первая вершина - точка по векторам двух смежных сторон, и проверить, что обе параметрические координаты находятся в пределах 0..1. Делений даже не понадобится, если сравнивать не с единицей, а с дискриминантом (учтя его знак)
grouzd)ev (2007-08-10 14:32:00) [24]http://algolist.manual.ru/maths/geom/belong/poly2d.php
---
... we are walking on a thin line and you better avoid the risk ...
Pa5ha (2007-08-10 13:43:00) [25]тупо по формуле поворота поворачиваются все точки прямоугольника для того чтоб сделать прямоугольник горизонтальным, а дальше проверяеца как обычно.
Или ещё можно как было указано в [2] сделать. Ищем высоту от точки до прямой. Если все высоты положительные или отрицательные, то значит внутри (если направление обхода одно и то же). Для того чтоб найти высоту можно построить два прямоугольных треугольника и из них вывести формулу общего катета, который и будет высотой.
Думкин (2007-08-10 13:42:00) [26]> @!!ex © (10.08.07 11:05) [2]
И чем это заруливает предложенное в [1]. Те же яйца, только сбоку.
@!!ex (2007-08-10 11:05:00) [27]Аналитическая геометрия рулит.
Любая прямая(в прямоугольник - это четыер прямых) делят плоскость на две части + и -.
Если подставить координаты точки в уравнение прямой то получиться расстояние от точки до прямой, со знаком обозначающим принадлежность к одной из частей.
Соответственно будет примерно так:
+
-----------
| - |
| |
+|- -|+
| |
| - |
-----------
+
Тупо проверяешь, что результат подствановки всегда меньше или равен 0, значит точка в прямоугольнике.
P.S.
Знак зависит от направления направляющего вектора задающего прямую, это надо учитывать.
MBo (2007-08-10 07:10:00) [28]посчитать знаки векторных произведений векторов сторон и вершина-точка, т.е. определить, лежит ли точка слева от каждой стороны при обходе против часовой стрелки