реклама на сайте
подробности

 
 
> Обьект внутри четырех угольника
gsm_starter
сообщение Jun 30 2010, 15:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 14-01-10
Пользователь №: 54 809



Здравствуйте. Нужно сделать следующее. Есть 4 точки (x и y-координаты) которые формируют четырехугольник. Так же есть точка с координатами. Нужно определить является ли точка внутри четырех угольника.
Сейчас делаю так. Разбиваю четырехугольник на два треугольника. Если точка в одном их треугольников, то она и в 4-угольнике в целом.
Далее как я определяю внутри мы треугольника или нет. Я имея три координаты могу посчитать площадь треугольника. Точка внутри треугольника делит его три три треугольника. Так вот если сумма трех треугольников равна площади большого треугольника то точка лежит внутри. Вот.

Но на AVR этот алгоритм работает очень долго, много времени тратится. Подскажите как сделать оптимальнее? Если поделитесь кусками кода вообще будет супер.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mluk
сообщение Jun 30 2010, 16:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 3-06-10
Пользователь №: 57 721



Если деление на треугольники прошло успешно (с невыпуклами четырехугольниками все сложнее), проверим лежит ли точка внутри одного из треугольников. Пусть треугольник ABC и точка M. проверяем лежит ли точка M в одной полуплоскости, скажем, с вершиной A относительно стороны ВС.
Для этого находим точку пересечения O диагоналей четырехугольника МАВС (решаем систему из двух линейных уравнений). И сравниваем длины AO и АМ. Проверка успешна, если AO >= AM.
Все тоже самое для точек B и C. Если все три проверки удачные, то точка внутри треугольника.
Операций тут явно меньше, но надо проверить пару крайних случаев, в которых система линейных уравнений не решается

Цитата(aaarrr @ Jun 30 2010, 20:18) *
Ужас какой! Четырехугольник можно рассматривать как пересечение полуплоскостей, образованных его сторонами. То есть всего-то надо определить, принадлежит ли точка каждой из этих полуплоскостей.


как же это быстро сделать?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 16:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mluk @ Jun 30 2010, 20:32) *
как же это быстро сделать?

Определить принадлежность точки полуплоскости просто. Для этого находим знак выражения:
(x2 - x1) * (y - y1) - (y2 - y1) * (x - x1), где
x1, y1 и x2, y2 - координаты точек прямой
x, y - координаты определяемой точки

Для выпуклого четырехугольника нужно выполнить четыре таких операции.
Go to the top of the page
 
+Quote Post
mluk
сообщение Jul 1 2010, 05:15
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 3-06-10
Пользователь №: 57 721



Цитата(aaarrr @ Jun 30 2010, 20:50) *
Определить принадлежность точки полуплоскости просто. Для этого находим знак выражения:
(x2 - x1) * (y - y1) - (y2 - y1) * (x - x1), где
x1, y1 и x2, y2 - координаты точек прямой
x, y - координаты определяемой точки

Для выпуклого четырехугольника нужно выполнить четыре таких операции.


И какой же знак должен быть, плюс или минус???

Ясно, что по разные стороны от прямой это выражение принимает разные по знаку значения, а для того чтобы определить какие, нужно крепко подумать. Заметьте, что если вы поменяете местами x1,y1 и x2,y2 знак изменится.

Сообщение отредактировал mluk - Jul 1 2010, 05:22
Go to the top of the page
 
+Quote Post
mluk
сообщение Jul 1 2010, 05:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 3-06-10
Пользователь №: 57 721



Здесь надо знак выбирать такой же как при подстановке в выражение оставшейся из двух вершин четырехугольника. И это работает только для выпуклах четырехугольников.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 1 2010, 06:28
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(mluk @ Jul 1 2010, 09:28) *
И это работает только для выпуклах четырехугольников.

А что, ещё вогнутые бывают?
Прошу не пинать, в школе давно не был, а ребёнок в 1 классе, пока ещё не дошли...

Понял, что за выпуклые.
Для вогнутых тоже сработает.
Проверьте на бумажке.


Понял, не сработает...
Тогда да, на 2 треугольника.
Причём так: внешний, образованный 3-мя внешними вершинами, и внутренний, который как бы вырезан из 1-го.
И проверять вхождение в 1-й и невхождение во 2-й.

А бывают неправильные 4-угольники?
Которые сами себя пересекают?
Или это уже по-другому называется?
Вот где ж...

Цитата(mluk @ Jul 1 2010, 09:15) *
Заметьте, что если вы поменяете местами x1,y1 и x2,y2 знак изменится.

А если x1,y1 и x2,y2 воспринимать как координаты вектора, то знак однозначно определяет, с какой стороны ваша точка по отношению к этому вектору


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- gsm_starter   Обьект внутри четырех угольника   Jun 30 2010, 15:35
- - aaarrr   Ужас какой! Четырехугольник можно рассматриват...   Jun 30 2010, 16:18
|- - ig_z   Пару месяцев назад на собеседовании в одну модную ...   Jul 1 2010, 08:15
|- - fontp   QUOTE (ig_z @ Jul 1 2010, 12:15) Я когда ...   Jul 1 2010, 08:44
|- - Tanya   Цитата(fontp @ Jul 1 2010, 12:44) Именно ...   Jul 1 2010, 08:57
|- - fontp   QUOTE (Tanya @ Jul 1 2010, 12:57) Все это...   Jul 1 2010, 09:04
|- - Tanya   Цитата(fontp @ Jul 1 2010, 13:04) Не совс...   Jul 1 2010, 09:21
- - MrYuran   У вас что там, графический ускоритель на АВР? М...   Jul 1 2010, 05:24
- - aaarrr   Цитата(mluk @ Jul 1 2010, 09:15) Ясно, чт...   Jul 1 2010, 05:43
|- - gsm_starter   Цитата(aaarrr @ Jul 1 2010, 08:43) Всего-...   Jul 12 2010, 18:07
|- - scifi   Цитата(gsm_starter @ Jul 12 2010, 22:07) ...   Jul 12 2010, 19:44
- - Oldring   Цитата(gsm_starter @ Jun 30 2010, 19:35) ...   Jul 1 2010, 09:31
- - gsm_starter   Нет, впуклые исключены.   Jul 13 2010, 07:27
|- - Oldring   Цитата(gsm_starter @ Jul 13 2010, 11:27) ...   Jul 13 2010, 07:38
|- - mluk   Проще сравнивать знак варажеия проверяемой точки с...   Jul 13 2010, 03:02
- - scifi   Цитата(gsm_starter @ Jul 13 2010, 11:27) ...   Jul 13 2010, 05:19
|- - mluk   Цитата(scifi @ Jul 13 2010, 09:19) Тогда ...   Jul 13 2010, 05:34
- - Muscat   А можно я влезу тут и спрошу? Почему нельзя опреде...   Jul 13 2010, 05:44
- - mluk   Цитата(Muscat @ Jul 13 2010, 09:44) А мож...   Jul 13 2010, 05:54


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016