Линейная интерполяция более линейно

#c #linear-interpolation

#c #линейная интерполяция

Вопрос:

Мне любопытно, есть ли способ сделать эту функцию:

 float linearInterpolation(float startPoint, float endPoint, float time)
{
    return startPoint   ((endPoint - startPoint) * time);
}
  

Более линейно, так как прямо сейчас, когда начальная точка приближается к своей конечной точке, она идет медленнее, я просто хочу, чтобы она шла с одинаковой скоростью на всем пути без замедления / ускорения. Если мне нужно реализовать другую переменную или что-то, что можно сделать. Другая функция, которая будет принимать те же переменные и выводить следующее значение, также будет приемлемой.

Комментарии:

1. Вы делаете скорость пропорциональной расстоянию, поэтому для завершения поездки всегда требуется ровно одна единица времени. Если вам нужна фиксированная скорость, так и скажите: startPoint velocity*time

Ответ №1:

Для меня это выглядит как правильная реализация lerp. Не видя кода, с которым вы его вызываете, я предполагаю, что причина его замедления заключается в том, что вы вызываете его с другой начальной точкой (вызов с предыдущим результатом вызова linearInterpolation приведет к этому) каждый раз (кадр?) что приведет к его замедлению, поскольку расстояние до интерполяции уменьшается при каждом вызове.

Убедитесь, что переменные начальной точки и конечной точки одинаковы для каждого вызова в течение срока службы интерполяции, и увеличивается только переменная времени.

Комментарии:

1. Вы поняли! Большое вам спасибо!!