Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Развертка объемного изображения |
Автор: 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-мерное простанство... ![]() |
Автор: Girder 11.11.2004, 17:27 |
для ентого тебе для начала надо сделать триангуляцию поверхности и от нею разбить все тело, после чего и разварачивать |
Автор: val 11.11.2004, 18:25 | ||
А что это значит? |
Автор: maxim1000 11.11.2004, 19:03 | ||
все-таки неплохо было бы знать, что автор понимает под разверткой объекта (хотя бы на примере)
насколько я знаю, приближение поверхности набором треугольников (это - как аппроксимация кривой с помощью ломаной) |
Автор: Girder 11.11.2004, 19:23 | ||||
![]()
![]() ![]() |
Автор: Alexei 12.11.2004, 08:42 |
Глобус, например,если его распороть по шву . Никто не заругает? ![]() |
Автор: maxim1000 12.11.2004, 11:50 |
как я понял, на 3D-объекте есть какой-то рисунок, который и является основной целью всего этого... тогда можно что-нибудь вроде этого: 1. вписываем объекта в цилиндр (как его выбирать - это еще вопрос) 2. каждую точку объекта проектируем вдоль радиуса на поверхность цилиндра |
Автор: Mad 12.11.2004, 12:05 |
Общий алгоритм можно представить так: 1 Выбераем грань. 2 поворачиваем обьект так, чтоб выбраная грань была паралельна плоскости проекции 3 проецируем грань на плоскость. 4 выбераем ребро на спроецированной грани. 5 вращаем обьект, относительно выбранного рера, так чтоб смежная грань стала паралельной плоскости проекции 6 проецирум грань. 7 повторяем 4 пока не будут спроецированны все грани. т.е какбы перекатываем обьект поплоскости ![]() |
Автор: skyboy 25.9.2009, 10:22 | ||||
некрррропостеееер!!! интересно, существуют ли алгоритмы выбора ребра, для, скажем, минимизации площади развертки. так чтоб без реализации полного перебора. кроме того, у алгоритма есть...хм, недостаток: развертка получается последовательностью полигонов, когда каждый полигон соединен с двумя: следующим и предыдущим. к примеру, такая развертка куба не получится:
получится только так:
|
Автор: skyboy 26.9.2009, 01:58 |
думал, как же можно определить целевую функцию построения развертки, которую можно будет минимизировать/максимизировать. вот в голову пришло: минимизировать сумму длин "швов"(максимизировать длину "сгибов"). после чего пришла в голову идея: задача выбора последовательности полигонов может быть сведена к задаче коммивояжера, где узлами графа будет полигоны, ребрами - факт смежности двух полигонов, а весом можно взять разность между максимальной длиной ребра и длиной текущего ребра. в таком случае, минимизация суммы весов при проходе даст максимизацию суммы сгибов(при выборе определенного ребра мы генерируем последовательность полигон 1 + полигон 2, уже соединенных между собой). естевенно, после генерации последовательности надо будет проверить развертку на самопересечение и произвести разделение развертки на непересекающиеся сегменты или произвести поиск другого решения. что скажете? |
Автор: skyboy 26.9.2009, 15:50 |
блин, чем я думал? после триангуляции, каждый узел получаемого графа будет соединен с тремя соседями. следовательно, куча узлов с нечетным количеством ребер - гамильтонов цикл невозможен. это не задача коммивояжера. фактически, необходимо свести имеющийся граф к задаче коммивояжера, удалив часть ребер(на развертке они будут "швами" - не будут соединять две грани) с минимальной суммарной длиной, так чтоб в оставшемся графе можно было построить гамильтонов цикл. |