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