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