NURBS Curve: сохранить длину при редактировании - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь написать инструмент разработки для Maya, где один из критериев, которым я должен соответствовать, - это поддерживать длину кривой NURBS.Инструмент разработки предоставляет пользователю элемент управления для редактирования кривой NURBS, но он должен быть таким, чтобы длина кривой всегда поддерживалась.Когда я говорю длина, я имею в виду длину дуги кривой.Есть ли прямая связь между кривой NURBS и ее длиной дуги?

Так что в идеале именно так я и представляю свою систему для работы. Если какие-либо резюме кривой изменяются, другие резюме изменяются так, что дугадлина кривой сохраняется.Любые идеи для реализации этого были бы чрезвычайно полезны.

Кроме того, как вы думаете, как Maya вычисляет arcLength?Я использую узел curveInfo для вычисления arcLength кривой.Это просто суммирует отрезки полиномиальной линии, которые составляют кривую для ее длины?

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

С математической точки зрения точная длина кривой NURBS является "уродливым монстром".Действительно, даже длина кривой Безье уже является монстром (длина общей кубики Безье является эллиптическим интегралом).

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

Вам было бы недостаточно просто заставить пользователя переместить одну вершину или изменить один вес, а затем показать точку вдоль кривой, котораянаходится на определенной длине дуги?Это хорошо определено, пользователю легко предвидеть (никаких «сюрпризов» в отношении других вершин, которые пользователь хотел бы оставить фиксированными) и намного проще реализовать.

0 голосов
/ 16 сентября 2012

Эта функция встроена в майя с незапамятных времен. Просто нарисуйте кривую, затем, пока она выбрана, выберите Редактировать кривые -> Изменить кривые -> Длина блокировки .

...