Главная страница
    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.45 MB
Время: 0.044 c
3-1118291495
_oleg
2005-06-09 08:31
2005.07.18
Добавление столбца в таблицу InterBase


14-1118818636
nik90210
2005-06-15 10:57
2005.07.18
Кто нибудь посещает вап-сайты?


4-1116429235
AlexaB
2005-05-18 19:13
2005.07.18
Как программно изменить текущий пароль


3-1117977775
xroot
2005-06-05 17:22
2005.07.18
Сравнение дат


4-1116951389
ДГ
2005-05-24 20:16
2005.07.18
Формы, контролы и т.д. на Winapi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский