Проверка нахождения точки в прямоугольнике
Дано: Прямоугольник, заданный 4 точками. (дополнительный параметр - угол на кот повернут прямоугольник относительно оси координат Y)
Точка заданная координатами Нужно написать функцию, возращающую Труе\Фалсе на нахождение точки внутри прямоугольника. Я решил эту задачу довольно извращенным способом, хотелось бы увидеть правильную математику :@ |
Re: Проверка нахождения точки в прямоугольнике
2 Tormoz- а ты давай нам вариан как ты сделал, мы тебе его отимизируем;)
|
Re: Проверка нахождения точки в прямоугольнике
У меня не математика :)
я поставил пивот на место точки, припарентил его к прямоугольнику, повернул прямоугольник на ноль, просчитал попадание простыми вычитаниями, потом повернул прямоугольник как было. Все средствами Блитц3д Но это через анус. Нужно формулами решить, ибо некрасиво. (говорила мне мама - учись сынок. а я пиво, пиво... ) |
Re: Проверка нахождения точки в прямоугольнике
Цитата:
а вообще, проще всего найти вхождение точек в образующие его треугольники. Хотя я знаю что есть способ проще, но Цитата:
|
Re: Проверка нахождения точки в прямоугольнике
Ну например через расстояния от точки до каждого отрезка. Если расстояние от точки до отрезка отрицательно, значит она находится с одной стороны, если положительно - с другой.
Код:
dx = x2 - x1 если d1, d2, d3, d4 отрицательны - точка внутри четырехугольника Еще можно трансформировать проверяемую точку, т.е. повернуть ее на угол поворота прямоугольника и потом проверить пересечение как обычно - без учета поворота. Поворот точки на угол альфа, через центр cx, cy, можно осуществить так Код:
dx = ox - cx :) |
Re: Проверка нахождения точки в прямоугольнике
алгоритм для н-угольника (вершины все сперва ручками трансформируем... ну или в функции как вариант =)
Код:
// point - искомая точка |
Re: Проверка нахождения точки в прямоугольнике
|
Re: Проверка нахождения точки в прямоугольнике
|
Re: Проверка нахождения точки в прямоугольнике
Вот кстати ещё один способ. Но работает при одном условии, точки должны идти вподряд.
If ( ((mouse_x-pr\px[0])*(pr\py[1]-pr\py[0])-(mouse_y-pr\py[0])*(pr\px[1]-pr\px[0]))>0) And (((mouse_x-pr\px[2])*(pr\py[1]-pr\py[2])-(mouse_y-pr\py[2])*(pr\px[1]-pr\px[2]))<0) And (((mouse_x-pr\px[3])*(pr\py[2]-pr\py[3])-(mouse_y-pr\py[3])*(pr\px[2]-pr\px[3]))<0) And (((mouse_x-pr\px[3])*(pr\py[0]-pr\py[3])-(mouse_y-pr\py[3])*(pr\px[0]-pr\px[3]))>0) Then Return 1 EndIf |
Часовой пояс GMT +4, время: 20:40. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot