Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-1120025152
rooker
2005-06-29 10:05
2005.07.18
главное окно программы


1-1119868243
kot andrei
2005-06-27 14:30
2005.07.18
Надо подумать...


14-1119952514
CatAndCAt
2005-06-28 13:55
2005.07.18
Издатели ПО


14-1119616196
TUser
2005-06-24 16:29
2005.07.18
Windows = DOS ???


14-1119771886
boriskb
2005-06-26 11:44
2005.07.18
Опять юмор. Скучно.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский