2013-03-14 1 views
3

Имея линейную интерполяцию (Lerp) функция выглядит как:Является ли векторная линейная интерполяция такой же, как линейная экстраполяция?

/// Performs a linear interpolation between two vectors. (@p v1 toward @p v2) 
/// @param[out] dest The result vector. [(x, y, x)] 
/// @param[in]  v1  The starting vector. 
/// @param[in]  v2  The destination vector. 
/// @param[in]  t  The interpolation factor. [Limits: 0 <= value <= 1.0] 
inline void dtVlerp(float* dest, const float* v1, const float* v2, const float t) 
{ 
    dest[0] = v1[0]+(v2[0]-v1[0])*t; 
    dest[1] = v1[1]+(v2[1]-v1[1])*t; 
    dest[2] = v1[2]+(v2[2]-v1[2])*t; 
} 

Здесь линейная экстраполяция я имею в виду нахождение позиции на линии (см рисунок) enter image description here

он будет работать на линейной экстраполяции (скажем, предоставление coef > 1 или менее 0)?

+1

Да, единственная разница между линейной интерполяцией и линейной экстраполяцией заключается в том, что при интерполяции вы оцениваете значение между известными точками данных и экстраполяцией за пределами известного диапазона. –

ответ

3

Да, экстраполяция аналогична интерполяции (в этом контексте, по крайней мере).

Если вы помните из средней школы геометрии, любая линия определяется уравнением вида:

y = mx + c 

, где m есть градиент и c является смещением (в частности, ось у перехвата) , Если вы посмотрите на свой код выше, вы увидите, что у каждого измерения есть уравнение формы:

dest = v1 + (v2-v1)*t 

, который является тем же самым! Мы просто замещенные следующим образом:

  • y <-- dest
  • x <-- t
  • m <-- (v2-v1)
  • c <-- v1

Таким образом, вы можете установить t любое значение (не только в диапазоне [0, 1]) и получить уникальную точку где-то на линии.

Смежные вопросы