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

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

Принадлежит ли точка прямоугольнику ...


Страницы:   1 2

Lexa11_2002 ©   (2006-03-22 21:52:00) 

Народ подскажите функцию, как определить принадлежит ли точка прямоугольнику заданному координатами, координаты точки заданы


Deka   (2006-03-25 11:26:00) [1]

Что касается "игороков", то можно сложить углы между векторами проведенными из заданной точки к вершинам прямоугольника (многоугольника). Если сумма всех углов равно 360 градусов - точка в  прямоугольнике (многоугольнике).


Palladin   (2006-03-24 21:12:00) [2]


>  (пересечение с вершиной считать за "адын")


извинияюсь, просчет... такую ситуацию нужно рассматривать отдельно...


Palladin   (2006-03-24 21:10:00) [3]

определяется окаймляющий прямоугольник со сторонами параллельними осям, и считается количество пересечений сторон исходного прямоугольника (N-угольника) с отрезком построенным от заданной точки до любой стороны окаймляющего прямоугольника (пересечение с вершиной считать за "адын"). если количество пересечений четное, значит точка не попадает, нечетное - попадает. исходники приводилось года три четыре назад...  может в архивах есть :) писать снова... лень


Джо   (2006-03-24 17:37:00) [4]

> [21] Leonid Troyanovsky ©   (24.03.06 16:25)

Да, только если координаты floating point, то привести к целым (простым умножением), ну, и вычесть минимальную координату, для подстраховки, ибо: "Region coordinates are represented as 27-bit signed integers". Сам так делал, для различных полигонов.


Jeer   (2006-03-24 17:30:00) [5]

Расположение в одной полуплоскости веера прямых, исходящих из точки к вершинам.


isasa   (2006-03-24 16:51:00) [6]

А интересно, как "игроки" решают проблему :)


Defunct   (2006-03-24 16:30:00) [7]

isasa ©   (24.03.06 16:09) [20]

сории, да там одно слово "требуется" лишнее ;>
осталось там при редактировании так что это моя вина, что вы не заметили все сразу..

> Тогда "выгоднее" поместить начало координат в одну из вершин ....
Я бы сказал не "выгоднее", а нагляднее... Еще нагляднее поместить начало координат в точку (x1, y1). Хотя вычислительная сложность при этом незначительно [u]увеличится[/u].


Leonid Troyanovsky   (2006-03-24 16:25:00) [8]


> Джо ©   (24.03.06 14:01) [17]
> Ага, тут с этими афинными преобразованиями функция выйдет
> совсем монструозной :) Ей-


Если сделать из него регион, то функция выйдет совсем простой
PtInRegion.

--
Regards, LVT.


isasa   (2006-03-24 16:09:00) [9]

Defunct ©   (24.03.06 15:54) [18]
... и для точки принадлежность которой требуется к прямоугольнику требуется найти.


Сорри, недочитал. Тогда "выгоднее" поместить начало координат в одну из вершин ....


isasa   (2006-03-24 16:06:00) [10]

Defunct ©   (24.03.06 15:54) [18]
А координаты самой точки не надо пересчитывать?

Джо ©   (24.03.06 14:01) [17]
Ей-богу, быстрее будет [10] grisme.

Очень изящно. Запомнил. Но действительно для тех фигур где легко посчитать площадь, а [8] для всех "полностью выпуклых".
:)
Универсального способа не знаю


Defunct   (2006-03-24 15:54:00) [11]

> А теперь - функцию пересчета координат вершин прямоугольника(TRect)?

Хм.. ну собсно там формула простейшая (один cos и 1 sin):
поворот относительно точки (x1, y1) для точки (x4, y4) и для точки принадлежность которой требуется к прямоугольнику требуется найти.

Находим вектор поворота для точки (x4, y4) - складываем его с точкой (x4, y4) - TRect готов, дальше домножаем этот вектор на вектор образуемый точками (x4, y4) и искомой точкой, складываем полученный вектор с координатами точки.


Джо   (2006-03-24 14:01:00) [12]

Ага, тут с этими афинными преобразованиями функция выйдет совсем монструозной :) Ей-богу, быстрее будет [10] grisme.


isasa   (2006-03-24 12:11:00) [13]

Defunct ©   (24.03.06 02:58) [15]
Безусловно.
А теперь - функцию пересчета координат вершин прямоугольника(TRect)?
X(x1,y1...) -> TRect(...) ?


Defunct   (2006-03-24 02:58:00) [14]

> isasa ©   (23.03.06 12:11) [9]
е-мае.. У прямоугольникауглы прямые! Проще всего повернуть оси так, чтобы прямоугольник представить в виде TRect и сместить точку относительно прямоугольника, ну а дальше просто:

function PtInRect(Pt: Point; R: Rect):boolean;
begin
  Result :=  (Pt.X >= R.Left ) and
                (Pt.X <= R.Right) and
                (Pt.Y >=R.Top) and
                (Pt.Y <= R.Bottom)
end;


Cash   (2006-03-23 22:50:00) [15]

Lexa11_2002   (22.03.06 21:52):
Гы! :)
Придумал!
Заведи себе для помощи запись из 4-х точек (TPoint).
А потом определяй, стоит ли требуемая точка между левой, правой, верхней
и нижней ограничивающими прямыми.

Функция ограничивающей прямой:

Function f(x: integer; P1,P2: TPoint): integer;
var
  pr: single;
begin
  if (P2.Y-P1.Y) <> 0 then pr:=(p2.X-P1.X)/(P2.Y-P1.Y) else pr:=0;
  Result:=Trunc((p1.Y-pr)+(pr*x));
end;


Прямая же проходит через две точки, вот они и нужны для выбора
именно той нужной прямой из всего пространства. А дальше идет
расчет коорднинат точки X на этой прямой. Если, к примеру, у нас
есть левые верхняя и нижняя точки прямоугольника, то мы можем
проверить не находится ли искомая точка справа от образованной
теми двумя точками прямой.


Cash   (2006-03-23 22:14:00) [16]

Удалено модератором
Примечание: Модераторы, они, знаете-ли тоже люди :)


Jeer   (2006-03-23 19:14:00) [17]

А не использовать ли тут общую теорию относительности ?
Самое место.


  (2006-03-23 17:50:00) [18]

Удалено модератором


grisme   (2006-03-23 17:37:00) [19]

я уже отвечал как-то..)
найди площади треугольников, образованных каждой парой вершин и точкой, потом сложи. Если сумма равна площади прямоугольника-она внутри, иначе-снаружи. Все просто..)


isasa   (2006-03-23 12:11:00) [20]

Туманно :)
Пример. Точка лежит внутри четырехугольника, если при обходе его по сторонам против часовой стрелки, она слева от прямых(бесконечных векторов), образующих четырехугольник.
:)
Главное не терять направление движения.


Страницы:   1 2

Наверх

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