![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 2
|
Речь о Rectangle Movieclips.
Есть два прямоугольника (на картинке синий и красный). Как можно определить попадает ли третий в область их Идея такая - объединить массивы координат прямоугольников. И проверить принадлежит ли массив координат третьего прямоугольника этому объединенному. [IMG]http://img24.**************/img24/391/rect.gif[/IMG] Наверное, существует более простое и менее ресурсозатратное решение, которое мне не удалось найти? Заранее спасибо за совет. Последний раз редактировалось kris.o; 13.11.2009 в 11:39. |
|
|||||
|
Modus ponens
|
Не уверен, что правильно понимаю... но, если делать так:
- берем верхнюю-левую точку зеленого прямоугольника, проверяем, принадлежит ли она хотя бы одному из синий + красный, если да, проверяем следующую вершину, если нет - не принадлежит.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 2
|
Прошу прощения, ошибся в формулировке - не область пересечения, а область объединения.
В этом случае возможен вариант, когда все четрые точки будут лежать внутри общей области, при этом он сам будет вылезать за эту область. [IMG]http://img208.**************/img208/4584/rect2.gif[/IMG] |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
т.е. if (C c A u B )
дело в том, что множество A u B - не является прямоугольником, соответственно вхождение в него нужно рассчитывать по другим формулам. например численным методом: дискретизировать множества С и AB и проверить условие : каждый dC входит в какой нибудь dAB, либо упрощаем: каждый dC входит или в А или в B. степень дискретизации C зависит от необходимой точности.
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 13.11.2009 в 12:59. |
|
|||||
|
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
может не самый оптимальный вариант, но вариант:
для каждой стороны зеленого прямоугольника ищем точки пересечения с другими. отрезок разбивается на части, добавляем к этим точкам пересечения еще середины отрезков. Добавляем вершины зеленого прямоугольника. После этого проверяем каждую из полученных точек на вхождение в любой из прямоугольников. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
еще вариант: для AB - создаём массив внешних отрезков
тогда С входит в AB если ни один из отрезков C не пересекает ни один из внешних отрезков AB.
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 13.11.2009 в 14:11. |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 400
|
Я бы использовал параметрическое уравнение прямой заданной двумя точками. Каждое ребро - объект. На каждом ребре отмечаю точку пересечения. У точки пересечения должны быть параметры "с кем пересекся" и "при пересечении ушел или вошел". Дальше цикл по контуру зеленого прямоугольника. Если я два раза вышел из прямоугольника при пересечении и ни разу не зашел значит я вне области.
Прелесть параметрическое уравнение прямой в том, что можно любую точку отрезка задать одним числом от 0 до 1. Где 0 это первая точка, а 1 вторая. Можно точки пересечения упорядочивать в направлении по отрезку от начальной к конечной точке. Вообщем удобно. Последний раз редактировалось proxiServer; 13.11.2009 в 14:27. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|