Научная статья на тему 'Структура данных для кэширования границ выпуклого многоугольника'

Структура данных для кэширования границ выпуклого многоугольника Текст научной статьи по специальности «Математика»

CC BY
95
26
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Семенякин В. С., Заболотняя Т. Н.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Структура данных для кэширования границ выпуклого многоугольника»

Структура данных для кэширования границ выпуклого многоугольника

Семенякин В. С., Заболотняя Т.Н. кафедра программного обеспечения компьютерных систем, Национальный технический

университет Украины «Киевский политехнический институт» г. Киев, Украина semenyakinvs@rambler.ru, tatiana104@yandex.ru

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

Одним из наиболее ресурсоёмких в плане нагрузки на процессор является алгоритм поиска пересечений между выпуклыми многоугольниками виртуальной сцены (поиска коллизий) [1]. Для оптимизации данного алгоритма используют ограничивающие структуры данных: ограничивающие сферы (bounds sphere), ограничивающие прямоугольники (axis-aligned bounding rectangle, дальше - AABR), минимальные ограничивающие прямоугольники (MBB, Minimum Bounds Rectangle), ограничивающие капсулы (bound capsule) и т.д. [1]. Их использование позволяет произвести грубый поиск пересечений между выпуклыми многоугольниками и для некоторых из них установить минимальный набор геометрических примитивов, которые могут пересекаться. Также некоторые ограничивающие структуры данных дают возможность получить дополнительные сведения о состоянии геометрических элементов виртуальной сцены, например, о расстояниях между ближайшими элементами многоугольников. Данный доклад касается оптимизации этого типа структур данных, а именно - модификации AABR, а также создания принципиально новой структуры данных, построенной на идее кэширования AABR.

AABR - структура данных, описывающая максимальные и минимальные координаты выпуклого многоугольника по координатам X и Y [1]. Используются они, например, для широкой фазы просчёта коллизий [2]: установив отсутствие факта

minY

maxY

Рис. 1. AABR

Рис.2. Изменение граничной точки

пересечения между AABR двух многоугольников можно гарантированно утверждать, что пересечения между многоугольниками нет. Далее максимальные координаты по X и У будем называть соответственно тахХ, тахУ, а минимальные - ттХ, ттУ. Граничными будем называть такие точки, хотя бы одна из координат которых равна тахХ, шахУ, ттХ или штУ.

Преимуществами AABR является интуитивность их понимания, высокое быстродействие и простота реализации алгоритма их построения. Недостаток AABR - малая информативность полей структуры данных. Из всех ограничивающих структур данных AABR описывает самую большую область потенциального нахождения описываемого ею объекта и является, таким образом, самым грубым приближением его реальных геометрических границ. Из указанного выше следует, что исследование возможности оптимизации AABR является актуальным.

Рассмотрим рис. 2. На нём изображены две соседние вершины многоугольника. Жирной чёрной линией обозначен перпендикуляр к стороне между этими вершинами. Пунктиром обозначен приблизительный вид этой стороны при углах поворота меньше и больше текущего, а серыми линиями - перпендикуляры к стороне при таких углах.

Введём понятие

граничного угла. Граничным будем называть угол, при котором меняется текущая граничная точка. Легко доказать, что граничным будет угол, отсекаемый

перпендикуляром к стороне. Это хорошо видно на рис. 2. Выделенные двойными

линиями точки соответствуют граничным точкам (в данном случаи, тахХ) для двух углов поворота.

Руководствуясь данным наблюдением, можно Рис.3. Диапазоны углов для тахХ

получить набор граничных

точек тахХ для многоугольника в виде кольцевого списка пар значений «угол -граничная точка». Двигаясь по этому списку, можно находить граничную точку при текущем угле поворота объекта. На рис.3 значение текущего угла находится в диапазоне 1 (а до этого диапазона находится диапазон 7, т. к список кольцевой). Если значение текущего угла поворота многоугольника оказывается в каком-либо диапазоне между двумя соседними перпендикулярами (обозначены пунктиром), то граничная точка тахХ меняется на граничную точку, сопоставленную с данным диапазоном. На рис. 3 текущая граничная точка тахХ - №1, так как угол поворота многоугольника (00) соответствует первому промежутку. На рис. 4 - список всех

Рис.4. Кольцевой список диапазонов для тахХ

- 28 -

возможных точек maxX (в списке указаны индексы точек). Сверху полоски обозначены углы, при которых та или иная точка будет являться граничной, как maxX.

Если найти четыре таких списка для всех граничных точек (maxX, maxY, minX и minY) и объединить их в один, можно получить кэш всех возможных для многоугольника AABR. Кэш будет представлять из себя список, в котором каждый элемент является массивом из пяти значений: угла, которому соответствует данный AABR, и четырех указателей на граничные точки maxX, maxY, minX и minY. Полученную структуру данных предлагается называть структурой кэшированных границ (Bounds Cashing Structure или BCS, далее - BCS).

\У / minX 1 F^ f / H minY majcX 'M

A \

maxY ) \ / \ \

Рис.5. Построение структуры кэшированных границ

Рассмотрим более эффективный по времени выполнения способ получения BCS. Для начала необходимо обнаружить промежутки, в которые попадают взаимно перпендикулярные лучи, расположенные параллельно осям координат и исходящие из центра многоугольника (см. рис 5(а), жирные чёрные линии, исходящие из центра многоугольника). Далее будем называть эти лучи отсекающими. Таким образом, получается первая запись BCS - для О0 - включающая в себя указатели на точки, сопоставленные с обнаруженными промежутками. После этого выполняется цикл, на каждой итерации которого производится поиск ближайшего по часовой стрелке перпендикуляра для каждого из отсекающих лучей, см. рис 5(Ь). После этого производится поворот всех четырёх отсекающих лучей на полученный минимальный угол (на рисунке угол выделен серым цветом). Данная операция позволяет с одной стороны получить следующую граничную точку, а с другой - гарантировать, что при повороте отсекающих лучей ни одна другая точка не изменится.

После поворота в BCS добавляется новый элемент, содержащий указатели на те же точки, что и верхний в списке, за исключением точки, для которой был найден минимальный угол - вместо неё берётся следующая по часовой стрелке точка, см. рис 5(Ь) (точка, обведённая кругом).

Цикл выполняется до тех пор, пока отсекающий луч, обозначенный на рис 5(а) стрелкой, не совершит оборот в 3600. Описанный алгоритм достаточно выполнить один раз во время инициализации программы. Если использовать вместо указателей индексы массива точек многоугольника, можно не копировать BCS в объекты-

экземпляры многоугольника, а хранить только ссылки на существующий в единственном экземпляре кэш. Таким образом, мы получаем BCS-структуру, в которой возможно найти полный AABR для текущего угла поворота одним циклом.

Помимо получения AABR BCS-структура обладает рядом других удобных свойств. Так, например, с её помощью можно находить ближайшую к прямой точку многоугольника. На рис.6 можно видеть, как это реализуется. Рассчитывается угол, под которым расположена прямая. К этому значению прибавляется угол, на который повёрнут многоугольник (на рисунке - 00), и значение нормируется по 3600. Далее в BCS находится AABR, который соответствует полученному углу. Точка maxX будет искомой ближайшей к прямой точкой многоугольника. Следует заметить, что решение описанной задачи средствами обычной аналитической геометрии потребовало бы больших вычислительных затрат - прохождение в цикле по всем точкам с расчётом векторного произведения.

Таким образом, в докладе предложена новая структура данных для поиска граничных точек выпуклого многоугольника. В ходе исследований было найдено существующее похожее решение - алгоритм «вращающихся циркулей» [3]. Однако указанное решение не рассматривает возможности кэширования граничных точек. Анализ количества действий, выполняемых обоими алгоритмами, показал, что предложенный в данном докладе вариант имеет лучшие показатели по быстродействию (за счёт кэширования), а алгоритм «вращающихся циркулей» более экономичен по использованию ресурсов памяти, собственно, по той же причине.

Список литературы

1. Collision Detection [Электронный ресурс/ http://www.gamedev.ru/code/terms/Collision_Detection], дата визита 13.11.2011

2. Широкая фаза [Электронный ресурс/ http://www.gamedev.ru/code/terms/Broadphase], дата визита 13.11.2011

3. Rotating callipers [Электронный ресурс / http://cgm.cs.mcgill.ca/~orm/rotcal.html], дата визита 13.11.2011

Рис.6. Применение BCS для поиска ближайшей точки

i Надоели баннеры? Вы всегда можете отключить рекламу.