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 意見 :
張貼留言