2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему
 
 Области вороного
Сообщение24.07.2009, 12:37 


08/02/09
37
Мне нужно найти какая вершина четырёхугольника ближайшая к центру окружности.
Чтобы не делать лишних подщётов для этого, слышал, используются области Вороного(тоесть зная, в какой области находиться центр окружности, мы знаем какой из фрагментов прямоугольника является ближе к окружности и следовательно знаем ближайшую вершину четырёхугольника)

Вопрос: Как узнать в какой области Вороного находится центр окружности ?
Изображение

 Профиль  
                  
 
 Re: Области вороного
Сообщение24.07.2009, 12:41 
Заслуженный участник
Аватара пользователя


23/08/07
5494
Нов-ск
NaOH в сообщении #230915 писал(а):
Чтобы не делать лишних подщётов для этого, слышал, используются области Вороного
Чтобы найти области Вороного, придется делать подсчеты.
Так что ничего не сэкономите, находите обычным способом.

 Профиль  
                  
 
 Re: Области вороного
Сообщение24.07.2009, 18:26 


08/02/09
37
TOTAL в сообщении #230917 писал(а):
NaOH в сообщении #230915 писал(а):
Чтобы не делать лишних подщётов для этого, слышал, используются области Вороного
Чтобы найти области Вороного, придется делать подсчеты.
Так что ничего не сэкономите, находите обычным способом.


Вообще мне надо найти столкновение круга с четырёхугольником.
Схема рисунка из первого поста:
1 2 3
4 | 5
6 7 8
Проблема в том, что надо проверять столкновение круга с вершинами четырёхугольника, но проверять их надо только тогда, когда центр окружности находиться в области 1,3,6 или 8, иначе проверяем только условие накладываются проекции фигур на обоих осях или нет.

Вопрос: Как узнать, находиться ли центр окружности в области 1,3,6 или8 ?

 Профиль  
                  
 
 Re: Области вороного
Сообщение27.07.2009, 07:38 
Заслуженный участник
Аватара пользователя


23/08/07
5494
Нов-ск
NaOH в сообщении #230984 писал(а):
Вопрос: Как узнать, находиться ли центр окружности в области 1,3,6 или8 ?

Не можете узнать совсем или хотите сэкономить?

Вот так, например:

Код:
if (x_0 < x < x_1) then
не находится
elseif (y_0 < y < y_1) then
не находится
else
находится
endif

 Профиль  
                  
 
 Re: Области вороного
Сообщение31.07.2009, 05:04 
Заслуженный участник


26/07/09
1559
Алматы
2NaOH
Цитата:
Проблема в том, что надо проверять столкновение круга с вершинами четырёхугольника, но проверять их надо только тогда, когда центр окружности находиться в области 1,3,6 или 8, иначе проверяем только условие накладываются проекции фигур на обоих осях или нет
...
Вопрос: Как узнать в какой области Вороного находится центр окружности ?

Кажется, вы не совсем понимаете смысл использования областей Вороного.

Определение того, в какой области Вороного находится центр подвижного объекта (окружности) как раз и осуществляют проверяя наложение линейных оболочек объектов в "базисе" на сторонах стационарного объекта.

То есть в вашем случае, если все проекции на продолжения сторон прямоугольника перекрываются, то значит объекты пересекаются.

Если же перекрывается только одна проекция (или по вертикали или по горизонтали), то значит столкновения нет.

Если же перекрытий проекций нет вовсе, то значит нужно проверить пересечение объектов более подробно. Однако и тут возможна оптимизация, ведь достаточно проверить расстояние от центра окружности до одной вершины многоугольника, прилегающей к той области Вороного, в которую "заплыла" окружность. Конкретная область Вороного однозначно определяется знаками компонентов векторной разности центров объектов (в вашем конкретном случае).

Так, например, если у окружности центр суть вектор $\vec{a}$, а в прямоугольнике центр $\vec{b}$, то пары вида $(sgn(a_x-b_x),sgn(a_y-b_y))$, то есть, например, $(-,-)$, или $(+,-)$, и сопоставляются областям Вороного.

По вашей иллюстрации, e.g. для случая $(+,+)$ ближайшей к центру окружности является верхняя правая вершина прямоугольника (только одна). И в худшем случае (если проекции на координатные оси не перекрываются вообще) вам придется определить комбинацию знаков и проверить пересечение окружности с соответствующей вершиной (просто вычислив расстояние и сравнив его с радиусом окружности).

Понятно, что необязательно брать именно центры, нужно просто иметь возможность оценить взаимное расположение объектов.

Как видите, вопреки мнению TOTAL'а, набор областей Вороного (т.н. диаграмма Вороного) является "виртуальной" концепцией и почти не требует предварительных расчетов (оптимальные реализации подразумевают явное построение диаграмм, для этого существуют вкусные $O(n)$-алгоритмы). Но вам все равно стоит взвесить все pro et contra и выбрать наилучшее решение (может быть стоит обратить внимание на BSP или OBB-деревья, благо публикаций с ключевыми словами collision detection существует огромное количество)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group