Кривая Безье в 3D: как учитывать линейную скорость, линейное ускорение и угловую скорость? - PullRequest
1 голос
/ 08 февраля 2012

У нас есть корабль, летящий в космосе, идущий из точки A с вектором скорости V a в точку B с вектором скорости V b . Мы рассчитываем точку для кривой Безье как:

P 0 = A
P 1 = A + (V a * k)
P 2 = B - (V b * k)
P 3 = B

Нам все еще нужно найти «правильное» значение для k, но сейчас это не важно (во всяком случае, мы обнаружили, что хорошее значение может быть (4 * (sqrt (2) - 1) / 3) из здесь) ).

До этого все просто: мы вычисляем точки с помощью параметрической формулы, и все работает нормально. Что нам действительно нравится, так это то, что корабль «тормозит» при выполнении поворота, и это реалистично.

Теперь мы хотим дифференцировать корабли, позволяя им иметь максимальную линейную скорость (V max ), максимальное линейное ускорение (a max , абсолютное значение для ускорения и замедления) и максимальная угловая скорость (ω max , где радиус кривизны R = V / ω). Это приносит много проблем:

a) Кривая может быть «неправильной», так как может иметь кривые, которые слишком резкие для ω max или не имеют достаточно места для замедления с max слишком мал или V a слишком много.

Это должно быть исправлено, выбрав P 1 и P 2"мудро", учитывая каким-то образом ω max и max . Я «думаю», что это может быть что-то прямо пропорциональное V a и обратно пропорционально ω max и max , но здесь мои математические и геометрические навыки не достаточно.

б) Здесь я могу ошибаться, но, похоже, в 3D кривая никогда не получает пиков, и это хорошо ™. Проблема заключается в том, что если два вектора (P 1 - P 0 ) и (P 2 + P 3 ) находятся на В той же плоскости могут появиться шипы, и я бы добавил «смещение» над нормальным размером (нормаль к плоскости), чтобы я мог избежать шипов. Но я не могу найти способ сделать это.

...