2010-12-17

Hermite Curve (Hermite Spline)

參考 這個連結 ,Hermite Curve 可以寫成一個 2D Hermite Curve Function 如下:

void hermiteCurve(
 const float t, 
 const float* vPt, 
 const float* vTangent, 
 float* pOutPt)
{
    float tt = t * t;
    float ttt = tt * t;
 
 for (int i=0;i<2;++i)
 {
    pOutPt[i] =(2.0f * ttt - 3.0f * tt + 1.0f) * vPt[0*2+i] + 
       (ttt - 2.0f * tt + t) * vTangent[0*2+i] + 
       (-2.0f * ttt + 3.0f * tt) * vPt[1*2+i] + 
       (ttt - tt) * vTangent[1*2+i];
 }
 
}

其中 t 表示欲內插的點在曲線上的比例值(區間從 0~1)。vPt 表示曲線的起點跟終點位置,是一個 float[4] 的變數,其中起點是(vPt[0], vPt[1]),終點是(vPt[2], vPt[3])。vTangent 表示曲線起點跟終點的切線向量,其中起點的切線向量是(vTangent[0], vTangent[1]),終點的切線向量是(vTangent[2], vTangent[3])。pOutPt 是比例值 t 內插出來的位置,是一個 float[2] 的變數。

0 意見 :

張貼留言