Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Проверка столкновений   Найти похожие ветки 

 
VolanD666   (2005-04-01 14:55) [0]

Здрасти, товарсчи! Подскажите, пожалуйста, как решить такой вопрос:
Пусть имеется один четырехугольник (двухмерный) и точка (x,y), как узнать находится ли точка в ЧЕТЫРЕХУГОЛЬНИКЕ?

Можно, конечно, провести из каждой вершины линию до этой точки и проверить пересечение их со сторонами четырехугольника, но тогда как это сделать, если мне даны их координаты?


 
A22 ©   (2005-04-01 16:12) [1]

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


 
NE_Parovoz   (2005-04-01 19:56) [2]

VolanD666
умножить вектор точки((x,y)-(вершина)) на нормали к сторонам
если все числа >0 то внутри
З.Ы. нормали внутрь четыреугольника


 
NE_Parovoz   (2005-04-01 20:11) [3]

http://pics.binary.ru/full/chT.jpg
зелёный -((x,y)-(вершина))
Если точка внутри DotProduct с нормалью >0 (+)


 
VolanD666   (2005-04-02 15:33) [4]

Все, конечно, понятно. Вот только я не могу догадаться, как найти нормали. Первую точку я знаю (сумма координат стороны делить на два), а как найти вторую?


 
XProger ©   (2005-04-02 16:09) [5]


//Положение точки p относительно прямой (p1, p2)
function Side(p, p1, p2: TPoint): boolean;
var
a, b: TPoint;
begin
a.X := p2.X - p1.X;
a.Y := p2.Y - p1.Y;
b.X := p.X - p1.X;
b.Y := p.Y - p1.Y;
Result := (a.X * b.Y - a.Y * b.X) >= 0;
end;


И про "впуклые" четырёхугольники - забудь ;)))


 
VolanD666   (2005-04-07 12:12) [6]

Вах, работает. Спасибо, XProger.



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.078 c
8-1110787652
Klopan
2005-03-14 11:07
2005.07.18
ScreenShot


1-1119609462
JTAG
2005-06-24 14:37
2005.07.18
Вычистить остатки компонента из программы как?


1-1120335665
P.N.P.
2005-07-03 00:21
2005.07.18
Передача строки другой копии приложения


6-1113203547
mc_s
2005-04-11 11:12
2005.07.18
нежно узнать IP Адрес.


14-1119470222
NewWonder
2005-06-22 23:57
2005.07.18
Сколько стоит написать курсовик?