2014 dxdy logo

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

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




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


12/03/11
688
Пусть поверхность $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
8556
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
688
Типичный пример дыры. Возьмем поверхность куба.
В соответствии с постановкой она представлена конечным набором треугольников.
Выкинем один из треугольников - получается дыра.

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


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

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

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

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


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

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


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

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


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

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


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

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


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

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

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


12/03/11
688
Честно скажу, ничего не понял в последней мысли.
Единственное, что когда мы работаем на практике - может оказаться что у нас 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, Супермодераторы



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

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


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

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