Повторяющиеся точки вдоль NURBS-кривой

в моем текущем проекте я реализовал кривые NURBS, и в начале кривой у меня есть несколько трехмерных точек, которые все расположены в нормальной плоскости точки (u = 0,0). Теперь я хочу скопировать эти точки в другие места кривой (например, u = 0,5), чтобы создать какой-то механизм вытягивания/развертки. Мой теоретический подход заключается в создании локальной системы координат в точке 0.0 и вычислении координат каждой точки по отношению к этой системе. Затем я могу создать локальные системы координат в нужных точках и разместить точки там. Моя проблема в том, что с первым выводом кривой NURBS я могу получить касательную и, следовательно, нормальную плоскость точки/системы (локальное направление X), но я не знаю, как ориентировать систему. Моя первая идея заключалась в том, чтобы взять вторую производную кривой NURBS и использовать ее для вычисления локальных осей Y и Z системы, но результаты вторых производных не подходят для этого подхода.

Есть ли общий подход к решению этой проблемы?

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


person mini    schedule 09.07.2018    source источник


Ответы (2)


Мы решили ту же проблему, используя этот подход:

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/Computation-of-rotation-minimizing-frames.pdf

person abenci    schedule 11.07.2018

Похоже, вы хотите найти локальную систему координат в любой заданной точке кривой NURBS. В этом случае типичным выбором является рамка Frenet. Подробнее см. по этой ссылке.

Что касается вопроса о «касательном векторе заданной контрольной точки», то, поскольку контрольные точки вообще не лежат на NURBS-кривой, у нее нет касательного вектора. Если он вам действительно нужен по какой-то особой причине, вы можете использовать касательный вектор в точке кривой, ближайшей к контрольной точке.

person fang    schedule 10.07.2018
comment
Спасибо за ответ. Проблема с кадром Френе заключается в том, что если у меня есть, например, S-образная кривая NURBS, то векторы нормалей в начале указывают вверх, а векторы нормалей в конце указывают вниз. Поскольку я хочу скопировать свои точки от начала до конца, я хочу, чтобы они не поворачивались на 180 градусов. Но определение векторов нормалей в одном глобальном направлении также не является решением, которое я хочу реализовать, поскольку они должны следовать форме кривой. Надеюсь, понятно, какого поведения я хочу. - person mini; 11.07.2018