Я пытаюсь создать класс, который принимает любое количество точек (положение и контроль) и создает сплайн-кошелек на основе предоставленной информации.
То, что я делаю - и я действительно не уверен, является ли это правильным способом - хранит каждую отдельную точку в классе следующим образом:
class Point
{
public:
Vector3 position;
Vector3 control;
}
Где очевидно, что позиция - это позиция точки, а контроль - контрольная точка.
Моя проблема заключается в соединении сплайнов - очевидно, учитывая, что вышеупомянутый класс, содержащий точку в массиве сплайнов, указывает, что любая заданная позиция может иметь только одну контрольную точку. Таким образом, при наличии трех или более точек в сплайне кошачьего рома различные отдельные соединяемые сплайны кошачьего рома разделяют одну позицию и один элемент управления с другим таким сплайном.
Теперь с тем же положением требуется то же самое, поскольку я хочу создать сплайны, которые являются непрерывными между собой. Однако мне действительно интересно, должны ли контрольные точки быть одинаковыми между двумя сплайнами? Немного повозившись с контрольными точками, я могу сделать так, чтобы они плавно переходили от одного сплайна к другому, однако я должен подчеркнуть, что я не уверен, что способ, которым они переходят, согласуется с тем, как сплайны Catmull-rom формируют свою форму , Я бы предпочел сделать это правильно, чем сидеть сложа руки и рационализировать, что это достаточно хорошо.
Очевидно, что вторая часть моего вопроса не требует пояснений: как получить две контрольные точки и точки положения, как рассчитать длину сплайна в виде романа?