Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Развертка объемного изображения


Автор: Alexei 11.11.2004, 08:41
Есть изображение 3д, в каком-нибудь 3д Максе, как получить его развертку?

Автор: Tatarin 11.11.2004, 10:11
что значит развертку? проекции знаю, развертка - не знаю...

Автор: val 11.11.2004, 10:37
Цитата
что значит развертку? проекции знаю, развертка - не знаю...

Развёртку я понимаю, как проецирование трёхмерного объекта на горизонтальные и вертикальные плоскости. В начерталке это называется тройным сечением или что-то типа этого...
Добавлено @ 10:43
А вообще, отталкиваться надо от простого - проецирования отрезка в 2-ух мерной плости в декартовой системе координат, например, на ось Х.
Тобишь спроецированная длина будет X*cos(alpha), где alpha- угол наклона прямой к оси Х...
Ну дальшее обобщаем на N-мерное простанство... smile

Автор: Girder 11.11.2004, 17:27
для ентого тебе для начала надо сделать триангуляцию поверхности и от нею разбить все тело, после чего и разварачивать

Автор: val 11.11.2004, 18:25
Цитата
триангуляцию


А что это значит?

Автор: maxim1000 11.11.2004, 19:03
все-таки неплохо было бы знать, что автор понимает под разверткой объекта (хотя бы на примере)
Цитата(val @ 11.11.2004, 17:25)
А что это значит?

насколько я знаю, приближение поверхности набором треугольников (это - как аппроксимация кривой с помощью ломаной)

Автор: Girder 11.11.2004, 19:23
Цитата(val @ 11.11.2004, 18:25)
А что это значит?
Понимаеш... для начала ему надо разьбить граничную поверхность на полигоны. Самым простой полигон - енто трейгольник. Т.в. => Процесс разбиения в набор треугольников называется триангуляцией... smile

Цитата(maxim1000 @ 11.11.2004, 19:03)
все-таки неплохо было бы знать, что автор понимает под разверткой объекта
Автор уже писал... но только данный топик удалили... хотя сказано было абсолютно верно... smile Попробую не так грубо: Возьми какую нить бумажную упаковку - т.в. енто 3D тело, а теперь разверни её в лист - т.в. енто называется разверткой... smile

Автор: Alexei 12.11.2004, 08:42
Глобус, например,если его распороть по шву .
Никто не заругает? smile

Автор: maxim1000 12.11.2004, 11:50
как я понял, на 3D-объекте есть какой-то рисунок, который и является основной целью всего этого...
тогда можно что-нибудь вроде этого:
1. вписываем объекта в цилиндр (как его выбирать - это еще вопрос)
2. каждую точку объекта проектируем вдоль радиуса на поверхность цилиндра

Автор: Mad 12.11.2004, 12:05
Общий алгоритм можно представить так:

1 Выбераем грань.
2 поворачиваем обьект так, чтоб выбраная грань была паралельна плоскости проекции
3 проецируем грань на плоскость.
4 выбераем ребро на спроецированной грани.
5 вращаем обьект, относительно выбранного рера, так чтоб смежная грань стала паралельной плоскости проекции
6 проецирум грань.
7 повторяем 4 пока не будут спроецированны все грани.

т.е какбы перекатываем обьект поплоскости smile

Автор: skyboy 25.9.2009, 10:22
некрррропостеееер!!!
Цитата(Mad @  12.11.2004,  11:05 Найти цитируемый пост)
4 выбераем ребро на спроецированной грани.

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

       ___
      |      |
       -----
      |      |
 ---- ----- ----
|     |      |     |
 ---- ----- ----
      |      |
       -----

получится только так:
Цитата

                  ---
                 |    |
 ---  ---  ---  ---
|    |    |     |    |
 ---  ---  ---  ---
|    |
 ---

Автор: skyboy 26.9.2009, 01:58
думал, как же можно определить целевую функцию построения развертки, которую можно будет минимизировать/максимизировать. вот в голову пришло: минимизировать сумму длин "швов"(максимизировать длину "сгибов"). 
после чего пришла в голову идея: задача выбора последовательности полигонов может быть сведена к задаче коммивояжера, где узлами графа будет полигоны, ребрами - факт смежности двух полигонов, а весом можно взять разность между максимальной длиной ребра и длиной текущего ребра. в таком случае, минимизация суммы весов при проходе даст максимизацию суммы сгибов(при выборе определенного ребра мы генерируем последовательность полигон 1 + полигон 2, уже соединенных между собой).
естевенно, после генерации последовательности надо будет проверить развертку на самопересечение и произвести разделение развертки на непересекающиеся сегменты или произвести поиск другого решения.
что скажете?

Автор: skyboy 26.9.2009, 15:50
блин, чем я думал?
после триангуляции, каждый узел получаемого графа будет соединен с тремя соседями.
следовательно, куча узлов с нечетным количеством ребер - гамильтонов цикл невозможен. это не задача коммивояжера.
фактически, необходимо свести имеющийся граф к задаче коммивояжера, удалив часть ребер(на развертке они будут "швами" - не будут соединять две грани) с минимальной суммарной длиной, так чтоб в оставшемся графе можно было построить гамильтонов цикл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)