2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Вычислительная геометрия: обнаружение дыр
Сообщение11.06.2016, 18:56 
Аватара пользователя


12/03/11
693
Пусть поверхность $F$ задана как конечный набор треугольников в пространстве, при чем пересечение любых двух треугольников есть либо ребро, либо пустое множество.
Интересует вопрос - всегда ли легко определить является поверхность замкнутой или нет?

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

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение11.06.2016, 19:43 
Заслуженный участник


27/04/09
28128
Можно попробовать теорему Эйлера $F-E+V=\chi(\text{многогранник})$, где для замкнутых многогранников $\chi\in\{2,0,-2,\ldots\}$. Если удалить одну грань и сделать многогранник дырявым, получится $1,-1,-3,\ldots$, но если удалить ещё нечётное число граней, мы придём к ситуации, в которой не можем отличить замкнутый от незамкнутого по характеристике.* Пичаль. Но можно уже хотя бы нечётное число дыр отделить от чётного.

* Наглядный пример. Пускай есть две треугольные дыры. Можно вклеить в них треугольную призму без оснований, что добавит столько же рёбер, сколько и граней, так что характеристика останется той же, а поверхность замкнётся.

F, E, V — faces, edges, vertices, если вдруг.

-- Сб июн 11, 2016 21:45:20 --

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

-- Сб июн 11, 2016 21:47:32 --

Плюс, если все замкнутые поверхности предполагаются быть гомеоморфными сфере, вопрос тоже, понятно, решён — даже если характеристика получится 0, она будет вызвана дырками, а не тем, что перед нами что-то гомеоморфное тору.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение11.06.2016, 20:27 
Заслуженный участник
Аватара пользователя


30/01/06
72407
arseniiv
Очень сложно.

Достаточно перебрать все рёбра, и убедиться, что каждое принадлежит двум и только двум треугольникам. (Или чётному числу, если допускается самопересечение по рёбрам.)

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение11.06.2016, 21:28 
Заслуженный участник


08/04/08
8562
Munin в сообщении #1130877 писал(а):
Достаточно перебрать все рёбра, и убедиться, что каждое принадлежит двум и только двум треугольникам. (Или чётному числу, если допускается самопересечение по рёбрам.)
Добавлю, что чтобы это доказать, достаточно индукции по ребрам.
А для обнаружения дыр (краев (края - это окрестности, гомеоморфные $\mathbb{R}\times [0;+\infty)}$ (правильно хоть сказал?))) процесс надо немного модифицировать: найти все ребра, принадлежащие только одному треугольнику и потом уже искать инцидентность у них.
Или Вам нужны не такие дыры? (и вообще написано непонятно: в заголовке слово "дыры" есть, а в тексте - нету)

(Оффтоп)

И замкнутая поверхность - это та, которая не содержит краев, правильно? Ну хотя да, триангуляция же.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение11.06.2016, 21:32 
Заслуженный участник
Аватара пользователя


30/01/06
72407
В общем, "дыры" как у бублика, или как у дырявого мячика?

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение11.06.2016, 22:01 
Заслуженный участник


27/04/09
28128
FTR, я тоже подумал, что под дырами понимаются края.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение14.06.2016, 23:43 
Аватара пользователя


12/03/11
693
Типичный пример дыры. Возьмем поверхность куба.
В соответствии с постановкой она представлена конечным набором треугольников.
Выкинем один из треугольников - получается дыра.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 08:28 
Заслуженный участник
Аватара пользователя


18/05/06
13440
с Территории
Тогда всё просто, и делается так, как сказал Munin. Ну, если поверхность без самопересечений. Если с ними, то вещи становятся волосатыми.

-- менее минуты назад --

Upd. Или не становятся, смотря как Вы определяете, что такое дыра в этом случае.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 11:25 
Аватара пользователя


12/03/11
693
Да, самопересечения могут быть. Например, можно "пристыковать" к кубу кусочек плоскости.
Таким образом, появятся ребра которые принадлежат как 3 треугольникам, так и 1.

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


23/07/08
10910
Crna Gora
DLL в сообщении #1131702 писал(а):
Да, самопересечения могут быть. Например, можно "пристыковать" к кубу кусочек плоскости.
Уточните, пожалуйста. Такое, как на левой картинке, не страшно. А вот нет ли такого, как на правой?
Изображение

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 13:42 
Аватара пользователя


12/03/11
693
Если речь идет о поверхностях , то оба случая возможны.
Если про патчи-треугольники (из которых состоят поверхности), то второй случай не реализиуется, потому что пересечение любых двух треугольников есть либо ребро, либо пустое множество.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 15:06 
Заслуженный участник
Аватара пользователя


09/09/14
6328
DLL в сообщении #1131738 писал(а):
пересечение любых двух треугольников есть либо ребро
И наверняка имеется в виду, что пересечение даёт общее ребро, а не ребро одного из них.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 16:39 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Наверное, поверхность линейно связна? Причем связна даже после удаления вершин треугольников (через рёбра).

Если бы я писал программу. Поверхность делит пространство на $n$ областей, задача — узнать $n$. Каждой из двух сторон каждого треугольника отводится ячейка, в которую алгоритм должен вписать номер области, на которую эта сторона «смотрит». Вначале выбираем произвольный треугольник и одной из сторон присваиваем номер области $1$, а дальше переносим (копируем) этот номер на все стороны треугольников, которые смотрят на ту же область, пользуясь некоторыми правилами переноса (они, вроде, очевидны; нужно ли их пояснять?). Если ещё остались стороны без номера, выбираем одну из них и присваиваем ей номер области $2$, далее распространяем его насколько возможно. И т.д.

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 18:21 
Аватара пользователя


12/03/11
693
Честно скажу, ничего не понял в последней мысли.
Единственное, что когда мы работаем на практике - может оказаться что у нас 10 миллиардов патчей (треугольников).
В этом случае даже сортировка уже может быть проблемой - поскольку std::vector столько элементов иногда не хочет в себя помещать...
P.S: да поверхность можно считать линейно связной - задача практическая, по сути когда она не линейна связная - можем считать что имеем дело с независимыми поверхностями...

 Профиль  
                  
 
 Re: Вычислительная геометрия: обнаружение дыр
Сообщение15.06.2016, 18:29 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

DLL в сообщении #1131812 писал(а):
Единственное, что когда мы работаем на практике - может оказаться что у нас 10 миллиардов патчей (треугольников).
В этом случае даже сортировка уже может быть проблемой - поскольку std::vector столько элементов иногда не хочет в себя помещать...

Изображение Кто вас учил такие объёмы данных пихать в std::vector?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: YandexBot [bot]


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

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