2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение13.06.2017, 21:34 
Заслуженный участник
Аватара пользователя


28/09/06
8617
В продолжение этой темы докладываю о полученных мной отрицательных результатах в области разработки универсального механизма гладкой склейки кусков 3D-поверхности (сплайнов).

Напоминаю постановку задачи. Есть рисовалка Asymptote, с помощью которой Вы можете создавать красивую 3D-графику для использования в своих книгах и статьях. Asymptote составляет поверхность 3D-объекта из кусочков (т.н. "патчей"), каждый из которых представляет собой четырёхугольный сплайн, точки которого определяются уравнением: $\vec{P}=\vec{f}(u,v)$, где $u,v \in [0,1]$, а $\vec{f}$ - полином 3-ей степени по каждой из этих двух переменных. Для определения сплайна достаточно определить 16 точек: 4 - углы сплайна, по 2 точки на каждую из 4 сторон определяют геометрию этих сторон и ещё 4 внутренние точки определяют "внутреннюю" геометрию сплайна. Во многих типичных случаях для более или менее простых геометрических фигур можно подобрать патчи таким образом, чтобы они стыковались гладко. В упомянутой выше теме приведен пример гладкой склейки сферы из 8 кусочков. Но хотелось бы иметь возможность строить сложные поверхности через произвольно расставленные точки, чтобы натянутые на эти точки патчи стыковались друг с другом гладко.

Разработчики Asymptote предложили для этого пакет smoothcontour3.asy, в котором есть функция patchwithnormals, назначение которой вроде бы и заключается в том, чтобы построить "правильный" патч. Функция принимает на вход замкнутую 4-сегментную линию, которая должна стать границей патча, и 4 массива по 3 вектора каждый, которые определяют нормали к поверхности в 3-х точках каждой из 4-х его сторон. Логика авторов была такова: 12 определяющих сплайн точек из 16-ти однозначно определены его границей. Оставшиеся 4 внутренние точки - это 12 независимых переменных, которые мы можем варьировать, чтобы подобрать направления нормалей к поверхности в 12 точках на её границе (понятно, что в 4-х углах направления нормалей уже определены формой границы). Осталось, вроде бы, придумать алгоритм для определения "правильных" направлений этих нормалей. Очевидно, что если для двух соседних патчей на границе между ними направления нормалей к поверхностям совпадут в трёх точках (плюс в двух углах, которые у них общие), то стыковка получится довольно гладкой.

Я написал программулину (на той же Asymptote), которая определённым образом расставляет векторы нормалей в трёх точках линии в зависимости от того, как они расставлены на её концах. На рисунке эти векторы изображены красным цветом. Тем не менее, при попытке применить функцию patchwithnormals я получил какую-то ерунду. Помимо того, что реальные векторы нормалей сильно не совпали с заданными, поверхность вообще получилась крайне безобразной (хотя граница не слишком корявая). Выяснив таким образом, что предложенная разработчиками Asymptote процедура не работает (за исключением, может быть, каких-то идеальных случаев), я решил поискать собственное решение.

Я определил функцию ощибки как сумму квадратов расстояний между концами заданных и реальных векторов нормалей (разумеется, все векторы нормалей - единичной длины). Далее, я попытался найти минимум этой функции 12-ти переменных (коими являются координаты 4-х внутренних точек сплайна). Применялись методы Нелдера-Мида, Хука-Дживса и градиентного спуска (с некоторыми модификациями, в том числе, в целях борьбы с оврагами). Лучший результат, которого мне удалось достичь на пробной поверхности, показан на рисунке синими векторами, изображающими реальные нормали. Как видно, расхождения с заданными (красными) векторами довольно велики.

Изображение

Я предположил, что результаты могут быть лучше, если выбирать границу поверхности каким-либо специальным образом. Например, можно ограничится плоскими кривыми. На рисунке как раз изображён такой случай - границ, которые являются плоскими кривыми. Увы, результат всё ещё далёк от идеала. Отсюда я осмеливаюсь предположить, что в классе сплайнов 3-его порядка не существует приемлемого по качеству решения для гладкой склейки (за исключением частных случаев).
:-(

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение13.06.2017, 23:21 
Заслуженный участник
Аватара пользователя


31/01/14
9681
Hogtown
epros в сообщении #1225128 писал(а):
тсюда я осмеливаюсь предположить, что в классе сплайнов 3-его порядка не существует приемлемого по качеству решения для гладкой склейки (за исключением частных случаев).
Вообще или в асимптоте?

Попробуйте bug–report https://sourceforge.net/projects/asymptote/support

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 00:00 
Заслуженный участник
Аватара пользователя


28/09/06
8617
Red_Herring в сообщении #1225180 писал(а):
Вообще или в асимптоте?

Вообще. В этом-то вся и печаль. Asymptote я здесь использовал только как язык программирования и рисовалку результатов. А исследовался сугубо обще-теоретический вопрос о гладкой склейке бикубических поверхностей Безье. То, что Asymptote использует оные для своих целей, не более чем несчастливое (для неё) обстоятельство, из коего следует, что создать на её основе продвинутую 3D-рисовалку вряд ли получится.

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 02:24 
Заслуженный участник
Аватара пользователя


31/01/14
9681
Hogtown
epros в сообщении #1225202 писал(а):
что создать на её основе продвинутую 3D-рисовалку вряд ли получится.
Если говорить о 3D рисовалке, то, очевидно, рисоваться должны 3D объекты (например, в формате prc),а не их плоские изображения. А как Ваша картинка выглядит в prc (вложенном в pdf)?

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 07:15 
Аватара пользователя


31/10/08
1244
Какая новость. Сейчас умру со смеха Безье не гладкий! :mrgreen:

Вообще-то это давно известный факт. Достаточно его продиференцировать пару раз. Или построить стыковочные функции. А что-бы было гладко применяют сплайны Cathmull-Rom.

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 11:13 
Заслуженный участник
Аватара пользователя


28/09/06
8617
Red_Herring в сообщении #1225244 писал(а):
Если говорить о 3D рисовалке, то, очевидно, рисоваться должны 3D объекты (например, в формате prc),а не их плоские изображения. А как Ваша картинка выглядит в prc (вложенном в pdf)?

Не вижу разницы, смотреть ведь всё равно на бумаге, голографического проектора у меня нет. Asymptote как средство построения проекций 3D-объектов на плоскость меня устраивает. Да и то, как выглядит сам сплайн, не так уж важно (получился более-менее гладкий - и ладно). Важно, что его невозможно подогнать под заданные условия на производную на границе. Это значит, что при попытке стыковки граница будет видна, наша построенная из кусочков поверхность будет выглядеть сетчатой.

Pavia в сообщении #1225274 писал(а):
Вообще-то это давно известный факт. Достаточно его продиференцировать пару раз. Или построить стыковочные функции. А что-бы было гладко применяют сплайны Cathmull-Rom.

Вы сейчас сказали что-то, видать, настолько умное, что я не осилил. Вы ведь про кубические сплайны Эрмита, правильно? И какая разница, если это те же самые полиномы третьей степени, только в другом представлении? Никто не сомневается в возможности состыковать одномерные сплайны третьей степени гладко на концах. Для кривых Безье это делается элементарно. Вопрос в другом: гладко состыковать куски поверхностей, то бишь двумерные сплайны третьей степени (бикубические).

Кстати, если пару раз продифференцировать кривую Безье, то получится линейная функция. Да, если производная проходит через нуль, то в этой точке кривая Безье получится негладкой. Вы про это что-ли?

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 13:04 
Заслуженный участник
Аватара пользователя


31/01/14
9681
Hogtown
epros в сообщении #1225322 писал(а):
Не вижу разницы, смотреть ведь всё равно на бумаге, голографического проектора у меня нет.
А зачем Вам проектор если есть Акробат или /АРидер?

Посмотрите документацию (но только в А или АР) к media9) или https://www.math.ualberta.ca/~bowman/m100/m100.pdf

Ну а для разных моделей есть Meshlab, Blender и много чего ещё, free and non-free

Да и насколько я знаю, всякий софт для CAD сейчас 3D

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 13:32 
Заслуженный участник
Аватара пользователя


28/09/06
8617
Red_Herring в сообщении #1225353 писал(а):
А зачем Вам проектор если есть Акробат или /АРидер?

Посмотрите документацию (но только в А или АР) к media9) или https://www.math.ualberta.ca/~bowman/m100/m100.pdf

Во-первых, у меня нет акробата, я использую Okular for Linux. :wink:
Во-вторых, я не ставлю целью создание интерактивных или анимированных pdf-ов, по-моему, это баловство. Меня устраивают плоские изображения 3D объектов, которые можно напечатать на бумаге.

Локальная задача, которую я сейчас решал, проведение красивой (т.е. без швов) поверхности через множество достаточно произвольно расставленных точек. Т.е., например, берём вот этот чайник, удаляем из его кода лишнюю информацию, оставляя только координаты точек, через которые непосредственно должна проводиться поверхность, и пытаемся по оставшейся информации восстановить чайник.

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 15:46 
Заслуженный участник
Аватара пользователя


31/01/14
9681
Hogtown
epros в сообщении #1225359 писал(а):
Во-первых, у меня нет акробата,
Безусловно, Adobe, решила что разработка Акробата вне Виндоус/Мак коммерчески невыгодна, и никогда не выпустила Акробат для Linux. Хуже того, даже АР для Linux остановился на версии 9 (но самой последней 9.5.5), которой достаточно для 3D моделей
epros в сообщении #1225359 писал(а):
Во-вторых, я не ставлю целью создание интерактивных или анимированных pdf-ов, по-моему, это баловство
Зря. Студентам, лишенным пространственного воображения начисто, это помогает.

В американо-канадском образовании геометрия в пренебрежении. Но даже самые крутые олимпиадники, которые великолепно владеют плоской геометрией, плавают в стереометрии

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 16:19 
Заслуженный участник
Аватара пользователя


28/09/06
8617
Red_Herring в сообщении #1225401 писал(а):
Зря. Студентам, лишенным пространственного воображения начисто, это помогает.

Просто я не считаю, что это нужно делать в pdf. По моим понятиям pdf нужен для книг, которые в первую очередь будут печатать и читать на бумаге, а во вторую очередь - читать на экране, воображая, что это та же самая бумажная книга, которую поленились напечатать. Причем некоторые из тех, которые читают на экране, будут использовать для этого инструменты типа Okular, которые всю эту интерактивность и анимацию не поддерживают.

А если кому-то нужно покрутить 3D объект, поподсвечивать его с разных сторон и поразбирать его на части, то для этого, по-моему, лучше использовать специализированные инструменты. Я вижу, что pdf сейчас развивается по принципу удава - "заглоти всё" - и, наверное, скоро его научат передавать запахи и тактильные ощущения от прикосновения к изображаемым предметам. Эдакое "777D", как в парке аттракционов. Но с моей точки зрения в этом есть какая-то неправильность.

К тому же, все эти штуки реализуются посредством встраивания в pdf скриптов, кои являются отличным способом засадить на компьютер пользователя трояна. И для пользователя лучший способ этого избежать - использовать инструменты, которые всё это активное содержимое игнорируют.

 Профиль  
                  
 
 Re: Разочарование в 3D-сплайнах: невозможно гладко склеить
Сообщение14.06.2017, 16:52 
Заслуженный участник
Аватара пользователя


31/01/14
9681
Hogtown
Что касается скриптов и угроз в связи с этим--Вы правы. Адобе постоянно латает дырки.

Но с этим согласиться трудно
epros в сообщении #1225410 писал(а):
По моим понятиям pdf нужен для книг, которые в первую очередь будут печатать и читать на бумаге, а во вторую очередь - читать на экране, воображая, что это та же самая бумажная книга, которую поленились напечатать.

Когда напечатанная книга начнет поддерживать clickable links ... А пока для математических работ я лично предпочитаю электронные версии

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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



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

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


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

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