Есть много вещей, которые выглядят не совсем правильно.
Делая это таким образом, ваша интерполяция будет проходить точно через первую и последнюю контрольные точки, но не черездругие.Это то, что вы хотите?
Если у вас много ключевых кадров, вы используете для интерполяции многочлен очень высокой степени.Полиномы высокой степени общеизвестно плохо себя ведут, вы можете заставить свою позицию дико колебаться между ключевыми позициями кадра.(Это одна из причин, по которой ответ на вопрос 1, вероятно, должен быть отрицательным.)
Если предположить, что вы действительно делаете хотите сделать это,ваше значение t
должно перейти от 0 в начале до 1 в конце.У вас случайно есть 1001 из этих ключевых кадров?Если нет, то вы будете поступать неправильно.
Оценка этих многочленов с большим количеством обращений к fact
и pow
может оказаться неэффективной, особенно если n
большой.
Я не хочу вдаваться в подробности о том, что вы должны делать, не зная больше о масштабах вашего задания - это не поможетодин хороший товар для Stack Overflow, который сделает вашу домашнюю работу за вас!Что вы уже сказали о кривых Безье?Что именно ваше задание просит вас сделать?
ИЗМЕНЕНО, чтобы добавить:
Простейший способ выполнить интерполяцию с использованием кривых Безье, вероятно, таков.Иметь одну (кубическую) кривую Безье между каждой парой ключевых точек.Конечные точки (первая и последняя контрольные точки) каждой кривой Безье являются этими ключевыми точками.Вам нужно еще две контрольные точки.Чтобы движение было плавным при перемещении через заданную ключевую точку, вам необходимо (ключевая точка минус предыдущая контрольная точка) = (следующая контрольная точка минус ключевая точка).Таким образом, вы выбираете один вектор в каждой ключевой точке, который будет определять, куда идут предыдущие и последующие контрольные точки.При перемещении через каждую ключевую точку вы будете двигаться в направлении этого вектора, и чем длиннее вектор, тем быстрее вы будете двигаться.(Если вектор равен нулю, то ваш кубический Безье вырождается в простой прямолинейный путь.)
Выбор этого вектора так, чтобы все выглядело хорошо, очень нетривиален, но вас, вероятно, на самом деле не просят сделать этона данном этапе.Так что что-то довольно простое, вероятно, будет достаточно хорошо.Например, вы можете считать вектор пропорциональным (следующая ключевая точка минус предыдущая ключевая точка).Вам нужно будет сделать что-то немного другое в начале и в конце пути, если вы это сделаете.