Получение согласованных нормалей из трехмерного кубического пути Безье

Я пишу класс BezierPath, который содержит список BezierPoints. У каждого BezierPoint есть позиция, inTangent и outTangent:

BezierPath содержит функции для получения линейных позиций и касательных из пути. Мой следующий шаг - предоставить функциональность для получения нормалей с пути.

Я знаю, что любая заданная линия в 3D будет иметь неограниченное количество перпендикулярных линий, поэтому не будет заданного ответа.

Моя цель - чтобы пользователь мог задавать нормали (или угол крена?) В каждой точке BezierPoint, между которыми я буду интерполировать, чтобы получить нормали вдоль пути. Моя проблема в том, что я не знаю, как выбрать начальную касательную (какой должна быть касательная по умолчанию?).

Моя первая попытка получить начальные касательные с использованием метода Unity3DQuaternion.LookRotation:

Quaternion lookAt = Quaternion.LookRotation(tangent);
Vector3 normal = lookAt * Vector3.up;
Handles.DrawLine(position, position + normal * 10.0f);

Это приводит к следующему (зеленые линии касательные, синие нормали):

По большей части это похоже на хороший базовый результат, но похоже, что в определенных ориентациях происходят внезапные изменения:

Итак, мой вопрос: Есть ли хороший способ для получения последовательных нормалей по умолчанию для линий в 3D?

Спасибо, Весь

Ответы на вопрос(1)

Ваш ответ на вопрос