Форум: "Игры";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизПроверка столкновений Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c