首页 > 代码库 > 样条之EHMT插值函数

样条之EHMT插值函数

 核心代码:

 1 ////////////////////////////////////////////////////////////////////// 2 // 埃特金插值 3 ////////////////////////////////////////////////////////////////////// 4 static float GetValueEhmt(const void* valuesPtr, int stride, int n, float t, float dc) 5 {  6     int i,j; 7     float z,s,p,q,v,d; 8  9     // 初值10     z = 0.0f;11 12     // 特例处理13     if (n < 1) 14     {15         return(z);16     }17     if (n == 1) 18     { 19         z = YfGetFloatValue(valuesPtr, stride, 0);  20         return(z);21     }22 23     float h = 1.0f/(n - 1);24 25     for (i = 1; i <= n; i++)26     { 27         s = 1.0; 28         q = (i-1)*h;29         for (j = 1; j <= n; j++)30         { 31             p = (j-1)*h;32             if (j != i) 33             {34                 s = s*(t-p)/(q-p);35             }36         }37 38         s = s*s;39         p = 0.0f;40         for (j = 1; j <= n; j++)41         {42             if (j != i) 43             {44                 p = p+1.0f/(q-(j-1)*h);45             }46         }47 48         v = YfGetFloatValue(valuesPtr, stride, i - 1);  49         if (i < n)50         {51             d = YfGetFloatValue(valuesPtr, stride, i) - v;52         }53         else54         {55             d = v - YfGetFloatValue(valuesPtr, stride, i - 2); 56         }57 58         q = v + (t-q)*(d*dc-2.0f*v*p);59         z = z + q*s;60     }61 62     return(z);63 }

切图:

 

相关软件的下载地址为:http://files.cnblogs.com/WhyEngine/TestSpline.zip

样条之EHMT插值函数