样条之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         else
54         {
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 }

切图:

 

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

posted on 2014-10-18 13:43  叶飞影  阅读(967)  评论(0编辑  收藏  举报