Научная статья на тему 'Розв’язання перетину m опуклих многогранників'

Розв’язання перетину m опуклих многогранників Текст научной статьи по специальности «Математика»

CC BY
317
62
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПЕРЕСЕЧЕНИЕ / ПОЛИТОП / МНОГОГРАННИК / РАЗНОСТЬ МИНКОВСКОГО / ОБЛАСТЬ ПЕРЕСЕЧЕНИЯ / ГЕОМЕТРИЧЕСКАЯ ДВОЙСТВЕННОСТЬ / INTERSECTION / POLYTOPE / POLYHEDRON / MINKOWSKI DIFFERENCE / DOMAIN INTERSECTION / GEOMETRIC DUALITY

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

В статье предложена модификация алгоритма GJK для нахождения общей точки двух выпуклых многогранников. Зная эту точку и используя теорему двойственности, можно определить область пересечения двух политопов. Рассматривая политопы попарно, можно найти область пересечения политопов. Разработана параллельная программная реализация решения проблемы, которая эффективно использует ресурсы современных многопроцессорных систем.I

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

n this paper we consider the modified version of GJK algorithm for finding a common point of two convex polyhedrons. Knowing this point and using the duality theorem, we can find the intersection of two polytopes. Considering the polytopes in pairs, we can find an intersection of m polytopes. A parallel software implementation of problem solution which effectively utilizes resources of modern multiprocessor systems was developed.

Текст научной работы на тему «Розв’язання перетину m опуклих многогранників»

УДК 004.519.712+004.92 В.М. ТЕРЕЩЕНКО

РОЗВ’ЯЗАННЯ ЗАДАЧІ ПЕРЕТИНУ m ОПУКЛИХ МНОГОГРАННИКІВ

Анотація. У статті запропоновано модифікацію алгоритму GJK для знаходження спільної точки двох опуклих многогранників. Знаючи цю точку та використовуючи теорему двоїстості, можна знаходити область перетину двох політопів. Розглядаючи політопи попарно, можна знайти область перетину m політопів. Розроблена паралельна програмна реалізація розв ’язку проблеми, яка ефективно використовує ресурси сучасних багатопроцесорних систем.

Ключові слова: перетин, політоп, многогранник, різниця Мінковського, область перетину, геометрична двоїстість.

Аннотация. В статье предложена модификация алгоритма GJK для нахождения общей точки двух выпуклых многогранников. Зная эту точку и используя теорему двойственности, можно определить область пересечения двух политопов. Рассматривая политопы попарно, можно найти область пересечения m политопов. Разработана параллельная программная реализация решения проблемы, которая эффективно использует ресурсы современных многопроцессорных систем. Ключевые слова: пересечение, политоп, многогранник, разность Минковского, область пересечения, геометрическая двойственность.

Abstract. In this paper we consider the modified version of GJK algorithm for finding a common point of two convex polyhedrons. Knowing this point and using the duality theorem, we can find the intersection of two polytopes. Considering the polytopes in pairs, we can find an intersection of m polytopes. A parallel software implementation ofproblem solution which effectively utilizes resources of modern multiprocessor systems was developed.

Keywords: intersection, polytope, polyhedron, Minkowski difference, domain intersection, geometric duality.

1. Вступ

Постановка проблеми. В роботі розглядається один із підходів до розв’язання задачі знаходження області перетину m опуклих політопів. Ця задача пов’язана з відомою і дуже популярною проблемою ’’Collision detection” [1], яка широко використовується у моделюванні фізичних процесів та в комп’ютерних іграх [1-4]. Процедура визначення перетину є одна з основних геометричних операцій, яка виникає у багатьох застосуваннях комп'ютерної графіки та робототехніки [5, 6]. Вона стала важливою з появою нових застосувань у віртуальній реальності, моделюванні та фізично-орієнтованій анімації як один із основних кроків алгоритмів. Окрім того, ця процедура має своє застосування в задачах лінійного програмування для багатовимірних просторів або ж у знаходженні спільних ознак об’єктів, які можуть бути подані у вигляді многогранників. Більшість доступних сьогодні бібліотек вимагають, щоб об'єкти були представлені у вигляді опуклих многогранників через наявність ефективних алгоритмів визначення їх перетину. Також вона є базовою під час розв’язання більш складних проблем, наприклад, знаходження області перетину m неопуклих многогранників. У цьому випадку задачу можна звести до перетину опуклих многогранників, використовуючи декомпозицію або спеціальні структури даних, наприклад, BSP-дерева [1] . Першим недоліком цього підходу є те, що декомпозиція вводить багато фіктивних ребер і граней, які повинні бути перевірені на наявність перешкод. Але другим, більш фундаментальним, недоліком є те, що алгоритми, засновані на таких розкладах, не завжди працюють належним чином на об'єктах, отриманих у результаті проективного перетворення. Так, зокрема, в результаті такого перетворення ми можемо одержати многогранник, який не є опуклим.

© Терещенко В.М., 2013

ISSN 1028-9763. Математичні машини і системи, 2013, № 1

Альтернативне представлення об'єкта з використанням інших бібліотек полягає в описі границі об'єкта як сукупності граней, які специфікуються координатами своїх вершин, упорядкованих за (або проти) годинниковою стрілкою, якщо дивитися з зовнішнього боку. Перевірка на перетин повинна проходити зазвичай в реальному часі і працювати з дуже детальними об’єктами, а тому надто важливою є складність алгоритмів та об’єм пам’яті, яка при цьому використовується.

Аналіз останніх досліджень. На сьогоднішній день існують три основних підходи до розв’язання цієї задачі: відсікання частин одного політопа гранями іншого [1], метод plane-sweep [7] та використання теореми двоїстості [8]. Перший метод є інтуїтивним, простим, але не дуже ефективним. Більш ефективними є другий та третій методи, порівняно з першим. Другий метод є узагальненням методу плоского замітання для тривимірних випадків і детально описаний у [7]. В той самий час перший та останній методи є більш прості у реалізації. Зокрема, третій підхід детально описаний у роботах [8, 9]. Так, у роботі [8] представлено алгоритм з часом O(nlogn). А в роботі Б. Чазеле [9] запропоновано алгоритм з лінійним часом. Б. Чазеле показав, як можна застосувати до розв’язання задачі побудови перетину двох многогранників ієрархічне представлення многогранників Добкіна-Кіркпатрика [10]. Особливо цікавим в алгоритмі є використання простої ієрархії для представлення внутрішньої області кожного многогранника та подвійної ієрархії для представлення зовнішньої частини кожного многогранника. Таким чином, останній підхід є найоп-тимальнішим з точки зору швидкості та простоти реалізації. Цей підхід детально описаний у роботах [1, 8, 9].

У ряді робіт, присвячених цій тематиці, пропонується підхід до вирішення задачі шляхом розділення її на підзадачі. Тут варто відзначити роботи [5, 10, 11]. Однією із основних підзадач є задача визначення перетину відрізків, а найефективнішим алгоритмом її вирішення на сьогодні є алгоритм Балабана [12].

Для задач пошуку перетинів в умовах наявності когерентності дуже часто використовується GJK-алгоритм [2, 6], який базується на тому факті, що два опуклих об’єкти (многогранники) перетинаються тільки у тому випадку, якщо початок координат належить їх різниці Мінковського (РМ). Насправді, GJK-алгоритм також дає можливість визначити мінімальну відстань між РМ та початком координат. Так як пошук РМ на кожній ітерації алгоритму потребує дуже багато часу, в GJK використовується функція support mapping. Це функція, яка за заданим напрямом повертає екстремальну точку для опуклого об’єкта. Екстремальні вершини можуть бути знайдені за O (n) часу. Якщо зберігати інформацію

про сусідні вершини, то екстремальну вершину можна знайти звичайним Hill Climbing алгоритмом. Для великих многогранників можна пришвидшити цей алгоритм, зберігаючи окрім сусідніх вершин ще одну або декілька віддалених вершин. Перевагою цього методу є можливість його використання для будь-якого опуклого об'єкта [3, 4]. Також для розв’язку такого роду задач використовуються діаграми Вороного (V-Clip algorithm) [13], BSP (Binary Space Partitioning)-дерева. Ідея, запропонована у даній роботі, базується на алгоритмі GJK [6, 8].

Метою статті є спроба розробити узагальнений і в той же час ефективний метод побудови області перетину m опуклих політопів, удосконаливши існуючі методи і підходи.

Новизна та ідея. В роботі запропоновано модифікований алгоритм GJK, який дозволяє за лінійний час визначити спільну точку двох політопів, що робить можливим знаходження їх області перетину за час O (n log n). Алгоритм узагальнений для m політопів і

дуже добре розпаралелюється. Окрім того, у роботі представлено новий підхід, який узагальнює існуючі алгоритми, покращуючи їх ефективність. Підхід передбачає випадок використання передобробки, що полягає у створенні для многогранника його представлення у вигляді ієрархії Добкіна-Кіркпатрика.

2. Постановка та побудова розв’язку задачі

Сформулюємо геометричну постановку задачі побудови області перетину т полі топів.

Постановка задачі побудови області перетину політопів. Нехай задано т опуклих поліедрів з N вершинами кожний. Необхідно побудувати їх перетин.

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

2.1. Побудова розв’язку задачі перетину політопів

Для розв’язання задачі перетину двох політопів скористаємось методом, запропонованим у роботі [8]. Центральна ідея методу полягає у визначенні першої точки перетину р, що далі дозволяє побудувати перетин за допомогою техніки двоїстості. Згідно з цією технікою задається перетворення просторів, яке переводить точку р в заданому просторі у площину

8( р) двоїстого простору і навпаки, площину 5(р) двоїстого простору у двоїсту до п точку заданого простору. Згідно з [8], мають місце такі твердження.

Твердження 1. Нехай Р - опуклий політоп, що містить початок координат, а £ -множина точок, двоїстих до площин, що несуть грані Р. Тоді будь-яка точка р, що лежить в середині Р, відображується у таку площину 8( р), яка не перетинається з поліедром сот (£).

Твердження 2. Якщо Р - опуклий поліедр, що містить початок координат, то та-

0(8)

ким самим є і двоїстий до нього поліедр Р ’.

Наведені твердження демонструють той факт, що якщо Р містить початок координат, то будь-яка зовнішня до Р площина відображується в точку в середині Р^ і навпаки.

Отже, для того щоб знайти перетин двох опуклих політопів, скористаємось таким алгоритмом.

1) Знаходимо точку, що лежить в середині обох політопів, за допомогою модифікованого алгоритму ОЖ.

визначення перетину двох політопів

2.2. Побудова розв’язку задачі знаходження точки в середині обох політопів Означення 1. Різниця Мінковського двох множин точок визначається за формулою

2) Переміщуємо початок координат у знайдену точку. Нормуємо всі рівняння площин, до яких належать грані політопів, і знаходимо множину точок £, двоїстих до граней політопів.

3) Будуємо опуклу оболонку СН (£) і зна-

ходимо множину точок £ , двоїстих до граней

СН (£).

4) Будуємо опуклу оболонку СН

Отриманий політоп є шуканим перетином.

Рис. 1. Приклад роботи алгоритму

На рис. 1 показано реалізацію алгоритму для знаходження перетину двох політопів.

AQB = {a - b: a є A, b є B} .

Важливою властивістю різниці Мінковського є те, що дві множини точок перетинаються (мають одну або більше спільних точок) тоді і тільки тоді, коли різниця Мінковського C (C = AQB) містить у собі початок координат.

Лема 1 [6]. Визначення мінімальної відстані між множинами точок A і B еквівалентне визначенню мінімальної відстані між їх різницею Мінковського C та початком координат.

distance (A, B) = min{||a - b||: a є A, b є B} = min {||c||: c є AQB}.

Цією лемою ми будемо користуватися в подальшому для знаходження спільної точки двох політопів.

Алгоритм GJK [6]

1. Ініціюємо симплексну множину Q однією або більшою кількістю точок (не більше ніж d +1, де d - розмірність простору) з різниці Мінковського множини вершин політопів A і B.

2. Визначаємо точку P мінімальної норми в опуклій оболонці Pє CH(Q').

3. Якщо P - початок координат, то початок координат міститься в середині AQB . Отже A і B перетинаються.

4. Зменшуємо Q до найменшої підмножини Q з Q такої, що Pє CH(Q'). Робимо це видаленням усіх точок з Q, які не визначають підсимплекс Q, до якого P належить.

5. Нехай V = SAQB (-P) = SA (-P) - sB (P) є опорною точкою у напрямку -P .

6. Якщо V не більш екстремальна у напрямку - P , ніж сама P , то зупиняємось і повертаємо, що A та B не перетинаються.

7. Додаємо V до Q та повертаємось до кроку 2.

Опишемо процедуру знаходження точки P мінімальної норми в опуклій оболонці CH(Q) для симплексної множини Q = {Q1,Q2,...,Qk}, 1 < k < 4. Для цього переглядаємо

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

Розглянемо випадок, коли Q = {QX, Q2, Q3, Q4} . Довільна точка P (в тому числі початок координат) лежить в середині регіону Вороного до, наприклад, вершини Qx тоді і тільки тоді, коли задовольняються такі нерівності:

(P - Qi )*( Q2 - Qi)< 0,

(P - Qi )*( Q3 - Qi)< 0,

(P - Qi )*( Q4 - Qi)< 0.

P лежить в середині регіону Вороного, асоційованого з ребром QQ2 тоді і тільки тоді, коли виконуються такі нерівності:

(P - Qi )*( Q2 - Qi) а о,

(P - Q2 )*( Qi-Q2 )а о.

(Р-01 )*((а -01 М(а -01М03 -й)))а 0,

(Р-01 )*(((а -01 )*(02 -01 ))х(02 -01 )}а0.

Якщо Р не лежить в середині регіонів Вороного для вершин або ребер, перевіряються регіони для граней шляхом перевірки того, чи лежать Р та точка з 0, що залишилась, на протилежних сторонах від площини, сформованої трьома іншими точками з 0. Наприклад, Р лежить в регіоні Вороного для 0Х0203 тоді і тільки тоді, коли виконується нерівність:

(( Р - 01 )*(( 02 - 01 М03 - 01)))((04 - 01 И( 02 - 01 М 03 - 01 )))< 0 Аналогічно перевіряються й інші вершини, ребра та грані.

Модифікація алгоритму ОЖ

Таким чином, алгоритм ОЖ вказує на наявність перетину фігур. Проте він не дає нам точку перетину або точку в середині обох політопів. Цей недолік можна легко виправити. Для цього на кожному кроці нам необхідно зберігати не лише симплекс, відносно якого ми робимо перевірку, а й точки з А та В, які формують цей симплекс. Тоді точку перетину (або точку в середині обох політопів) можна знайти таким чином:

V = І0А0 + Ї4А1 + І2А2 + Ї3А3 = І0В0 + І1В1 + 12В2 + Ї3В3 ,

де А0, А1, А2, А3 - вершини симплексу А;

В0, В1, В2, В3 - вершини симплексу В ;

10,11,12,13 - невідомі коефіцієнти > 0, такі, що 10 +11 +12 +13 = 1.

Віднімемо від одного рівняння інше і зазначимо, що Аі - Ві = Ті, де Ті - вершини

результуючого симплексу, отриманого на виході алгоритму ОІК. Після цього розкладемо отримане рівняння за координатами. Отримаємо таку систему рівнянь:

10Т0 X + КТ1х + 12Т2 X + 13Т3х = 0 10Т0 ^ + \Т1 у + 12Т2 у + 13Т3 у = 0

<

10Т0 2 + КТІ2 + 12Т2 г + 13Т3 2 = 0

І0 + І1 + 12 + І3 = 1

Розв’язуючи подану систему рівнянь, отримаємо коефіцієнти 1 , за допомогою яких

можемо знайти точку V. Ця точка буде належати обом симплексам А та В, а отже буде

належати перетину політопів. Можливий випадок, коли в результаті роботи даного алгоритму отримана точка буде точкою перетину політопів. У такому випадку для того, щоб знайти точку, що лежить строго в середині обох політопів, нам потрібно змістити знайдену точку на мінімальне А в одному з 26 напрямків у просторі. Таким чином, ми гарантовано знайдемо точку, що належить обом політопам одночасно.

2.3. Побудова розв’язку задачі знаходження опуклої оболонки

Нехай у нас на вході множина точок £ .

1) Будуємо тетраедр шляхом з’єднання перших чотирьох точок з £, що не лежать в одній площині.

2) Для кожної точки р , що залишились.

• Уявімо, що p - це точка видимості. Визначимо множину граней, видимих з p. Назвемо цю множину граней гранями, що видимі з p .

• Визначимо множину ребер горизонту для точки p. Ребро горизонту - ребро, що

належить до видимої і невидимої граней одночасно. Ребра горизонту формують замкнений цикл навколо видимих граней.

• Для кожного ребра горизонту створюємо нову трикутну грань, з’єднуючи ребро з точкою p. Точкаp тепер є частиною опуклої оболонки.

• Нарешті, видаляємо усі грані, що були видимі з p .

Цей алгоритм має складність O (п2). Проте його можна пришвидшити до O (п log (п)), зберігаючи для кожної точки множину граней, які з неї видимі, та навпаки.

Маємо дводольний граф. Назвемо його графом конфліктів.

Ініціюємо граф конфліктів після першого кроку, тестуючи кожну точку відносно чотирьох граней початкового тетраедра (якщо точка розташована перед гранню, то грань видима з точки). Для цього використовуємо вектори нормалі граней. Після додання кожної нової точки до опуклої оболонки на кроці 2с нові грані, що були створені, мають бути додані до графу конфліктів. У цьому випадку розглянемо ребро горизонту. До того, як ми додали грань f, були дві грані, які ділили це ребро. Назвемо їх g та h. Якщо з точки було

видиме ребро горизонту, то з неї також були видимі або g, або h. Таким чином, щоб

знайти множину точок, видимих з f, треба лише розглянути множину точок, видимих з g

або h .

3. Обґрунтування складності

Твердження 1. Задачу перетину двох опуклих n- вершинних політопів можна розв’язати за час O (п log (п)).

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

Доведення. Для знаходження перетину двох політопів потрібно знати точку, що буде лежати в середині обох політопів. Це можна зробити за O (п), використовуючи алгоритм GJK. Після цього переміщення центра координат в цю точку та знаходження двоїстих точок до граней потребують O (п) операцій. Найбільше часу витрачається операцією побудови опуклої оболонки (O (п log (п))). Побудова області перетину, яка є двоїстою фігурою до опуклої оболонки, потребує O (п) часу. Таким чином, побудова області перетину двох опуклих політопів потребує 0{}іlog(и)j часу. ■

Твердження 2. Задачу перетину т опуклих п -вершинних політопів можна розв’язати за час O (тп log (п)) та O (п log (п) log (m)) з використанням розпаралелення.

Доведення. Складність без використання розпаралелення очевидна. Якщо ми використовуємо паралельні обчислення, то можемо розбити усю множину політопів на пари і робити їх попарний перетин. Після цього в нас буде т /2 перетинів. На наступному кроці

- т /4 і т.д. Усього потрібно буде зробити log (т) таких кроків, на кожному з яких кожен

процесор буде виконувати 0(n\og(n)'} операцій. ■

4. Практична частина

Робота виконана на мові програмування C# з використанням технології WPF для наочного представлення результатів роботи алгоритму. Задання багатокутників для алгоритму мож-

ливе двома шляхами: читання вершин політопів з бази даних (використовується ЬШО Ш БОЬ) та генерація політопів випадковим чином (кожен політоп генерується на випадково заданій множині точок). Користувачеві також доступні деякі маніпуляції зі зміною відображення отриманих політопів та їхнього перетину, а саме: вибір того, як має відображатися політоп (тільки вершини, тільки ребра, тільки грані); вибір прозорості та кольору

передніх та бокових граней. Перетин політопів відбувається попарно, з використанням паралельних обчислень та пулу потоків, що дозволяє істотно підвищити швидкодію алгоритму за рахунок повного використання ресурсів комп’ютера.

Результат роботи програми та вікно налаштувань представлені на рис. 2.

5. Висновки

У роботі запропоновано відносно простий для реалізації метод для побудови перетину опуклих політопів, що базується на модифікованому алгоритмі ОЖ та властивостях двоїстості фігур. Цей алгоритм дозволяє отримати перетин двох опуклих політопів за час О (пївщп), що є досить непоганим результатом порівняно з прямим методом відтинання

одного політопа гранями іншого, який має складність О (п3).

Якщо ж політопів більше ніж 2, то їх перетин повинен виконуватись попарно. Взагалі, уся складність алгоритму полягає у знаходженні точки, що лежить в середині перетину усіх політопів. Якщо ця точка відома, то, скориставшись властивістю двоїстості, ми зможемо знайти перетин т політопів лише за допомогою побудови опуклої оболонки. Але приросту швидкості це не дасть, бо нам потрібно буде будувати опуклу оболонку для т ■ п точок, що дасть ту саму оцінку складності, але алгоритм буде в той же час погано розпара-лелюватись.

СПИСОК ЛІТЕРАТУРИ

1. Mount D.M. Geometric Intersection / D.M. Mount // Handbook of Discrete and Computational Geometry / eds. J.E. Goodman, J. O'Rourke. - [2nd ed.]. - Chapman & Hall: CRC, Boca Raton, 2004. -P. 857 - 876.

2. Ericson C. Real time collision detection / Ericson C. - New York: Taylor & Francis Group, 2005. -593 p.

3. Berden Van den G. Collision Detection in Interactive 3D Environments / Van den G. Berden. - Amsterdam; Boston: Morgan Kaufmann Publishers, 2004. - 277 p.

4. Berden Van den G. A Fast and Robust GJK Implementation for Collision Detection of Convex Objects / Van den G. Berden // Journal of Graphics Tools. - 1999. - Vol. 4 (2). - P. 7 - 25.

5. A new linear algorithm for intersecting convex polygons / J. O'Rourke, C.-B. Chien, T. Olson [et al.] // Comput. Graph. Image Process. - 1982. - N 19. - P. 384 - 391.

6. Gilbert E.G. A fast procedure for computing the distance between complex objects in three-dimensional space / E.G. Gilbert, D.W. Johnson, S.S. Keerthi // Robotics and Automation, IEEE Journal. - 1988. -Vol. 4 (2). - P. 193 - 203.

7. Space sweep solves intersection of two convex polyhedra elegantly / S. Hertel, K. Mehlhorn, M. Mäntylä [et al.] // Acta Informatica. - 1984. - N 21. - P. 501 - 519.

8. Препарата Ф. Вычислительная геометрия: Введение / Ф. Препарата, Г. Шеймос. - М.: Мир, 1989.

- 478 с.

9. Chazelle B. An optimal algorithm for intersecting three-dimensional convex polyhedral / B. Chazelle // SIAM Journal on Computing. - 1992. - N 4 (21). - P. 671 - 696.

10. Dobkin D.P. Fast detection of polyhedral intersection / D.P. Dobkin, D.G. Kirkpatrick // Theoret. Comput. Sci. - 1983. - N 27. - P. 241 - 253.

11. O'Rourke J. Computation Geometry in C / O'Rourke J. - Cambridge University Press, Cambridge, 1994. - 1497 p.

12. An Optimal Algorithm for Finding Segment Intersections / I.J. Balaban // Proc. of the 11th ACM Symposium on Computational Geometry, 1995. - P. 211 - 219.

13. V-Clip: Fast and robust polyhedral collision detection / B. Mirtich // ACM Transactions on Graphics (TOG). - 1998. - N 17 (3). - P. 177 - 208.

Стаття надійшла до редакції 01.02.2013

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