Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверить, принадлежит ли точка прямоугольнику [Delphi]


Страницы:   1 2

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]

посчитать знаки векторных произведений векторов сторон и вершина-точка, т.е. определить, лежит ли точка слева от каждой стороны при обходе против часовой стрелки


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо