Главная страница
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.043 c
10-1096551187
AntonSh
2004-09-30 17:33
2005.07.18
COM Server


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


9-1112693249
MaxAir
2005-04-05 13:27
2005.07.18
Помогите запустить паровозик по синусоиде :)


1-1120394853
Unknow
2005-07-03 16:47
2005.07.18
Как вписать данные в ListView


1-1120119358
mRodion
2005-06-30 12:15
2005.07.18
Прораммно менять фокусс ввода в форме