Разложение 3d сетки в 2d сеть - PullRequest
15 голосов
/ 08 июня 2009

Предположим, у вас есть трехмерный объект, представленный в виде трехмерной сетки в некотором распространенном формате файла. Как бы вы разработали алгоритм для разложения меша на одну или несколько двумерных «сетей», то есть двумерное представление, которое можно вырезать и сложить для создания исходного трехмерного объекта.

Помимо прочего, алгоритм должен учитывать:

  • Множество возможных разложений для любого данного объекта
  • Обработка укладки сетки в полотна фиксированного размера (листы бумаги).
  • Распознавание, когда две панели в сети перекрываются (и, таким образом, являются недействительными).
  • Разбиение сетки на несколько сетей, если они не могут быть представлены как одна, из-за перекрытия или ограничений размера страницы.
  • Создание вкладок в соответствующих местах для прикрепления смежных граней.

Очевидный вырожденный случай - это просто создать одну сеть на грани с вкладками на половине краев. Очевидно, это не идеально: идеальный случай - это единая непрерывная сеть. Реальность для сложных форм, вероятно, где-то посередине.

Я понимаю, что поиск оптимальной сети (наименьшее количество сетей / наименьшее количество страниц), вероятно, требует больших вычислительных затрат, но хорошей эвристики для поиска «достаточно хороших» сетей было бы достаточно.

Ответы [ 3 ]

10 голосов
/ 09 июня 2009

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

Создайте граф из исходной сетки, где каждая грань является вершиной графа, и две вершины соединяются, если они имеют общее ребро в сетке. Один из этих графиков представляет неразборчивую сетку тогда и только тогда, когда у нее нет петель, то есть это дерево.

Хорошее дерево представляет наименьшее количество линий сгиба, чтобы добраться до самой дальней грани от начальной точки, поскольку каждый сгиб представляет ошибку, которая будет накапливаться в готовой модели. Алгоритм Дейкстры здесь хорош, но минимальное связующее дерево не работает. При одинаковом весе каждого ребра все деревья являются минимальными связующими деревьями, даже такими, которые разворачивают вашу сетку в одну большую спираль. Когда вы склеиваете модель, ошибки будут накапливаться до тех пор, пока последние несколько граней не уместятся совсем.

Как только у вас будет дерево, начните с начального лица. Затем пройдитесь по дереву и добавьте новые грани, рассчитав новую вершину как пересечение двух окружностей с радиусами, соответствующими длинам ребер в исходной сетке. Местоположения для вкладок соответствуют ребрам, которые были в исходной сетке, но не в дереве сглаживания.

Заданные пользователем срезы могут обрабатываться как удаление ребер до шага дерева.

diagram of unfolding a tetrahedron

Некоторые недостатки этой техники заключаются в том, что она с удовольствием создаст перекрывающиеся части в плоском шаблоне, и это зависит от нахождения хорошего начального лица. Я пытался начать с Флойд-Варшала, чтобы найти лицо минимального диаметра, но его поведение O (n ^ 3) было сделано для чрезмерно долгих перерывов на кофе. С перекрывающимися частями можно бороться, пометив эту ветвь дерева как «неполную», пропустив ее и снова запустив алгоритм на всех неполных гранях.

10 голосов
/ 08 июня 2009

Когда я прочитал ваш вопрос, мне пришли слова «автоматический алгоритм изготовления бумаги». Итак, я нашел его в Google и нашел Модели бумажных промыслов с использованием обобщенных цилиндров (pdf) от Massarwi et al.

Мы предлагаем новый метод производства развернутые бумажные узоры округлые фигурки игрушечных животных из триангулированные сетки с помощью полосовое приближение. Хотя в Принцип триангулированной модели может быть разворачивается просто сохраняя как можно больше насколько это возможно его подключения в то время как проверка на пересекающиеся треугольники в развернутая плоскость, создающая узор с десятками тысяч треугольников нереально. Наш подход заключается в аппроксимировать модель сетки набором непрерывные треугольные полосы без внутренние вершины. Изначально мы разделить нашу сетку на части соответствует особенностям модель. Разбиваем каждую часть на зональные области, группирующие треугольники, которые аналогичные топологические расстояния от часть границы. Генерируем треугольник полоски за счет упрощения сетки в то время как сохраняя границы зонального области и дополнительные линии разреза. шаблон создается просто разворачивая набор полос. Отличительная особенность нашего метода является то, что мы приближаем модель сетки набор непрерывных полос, а не другие управляемые поверхности, такие как части шишки или цилиндры. Таким образом Примерный развернутый рисунок может быть генерируется с использованием только операций с сеткой и простой алгоритм развертывания. Кроме того, набор полосок может быть созданный просто сгибая бумагу (не ломая края) и может представляют гладкие черты оригинальные модели сетки.

Существует также более ранняя статья под названием Модели крафт-бумаги из сеток (9 МБ в формате PDF), автор Shatz et al.

В этой статье представлен алгоритм для сегментирование сетки в развивающиеся приближения. Алгоритм может быть используется в различных приложениях в САПР и компьютерная графика. Эта бумага фокусируется на изготовлении бумаги и демонстрирует, что алгоритм генерирует приближения, которые развивается, легко режется и может быть склеены. Также показано, что ошибка между данной моделью и бумажная модель маленькая.

enter image description here
Источник: http://www.ee.technion.ac.il/~ayellet/images/sel-papers-pic-5.jpg

0 голосов
/ 20 июня 2009

Я знаю, что это не ответ, но это связано. Программа Lamina бывшего сотрудника SGI по графике Пола Хеберли - решение этой проблемы.

...