拉格朗日插值曲线
2013-06-24 13:37
197 查看
void Lugrange(CPoint *aa, int k, int l_section,CDC *pDC) { float blend[4][100],f_blend[4][100],l_blend[4][100]; float u,v,w; CPoint sm[4]; int x,y; for(int i=0;i<l_section;i++) { u=float(i)/float (l_section); blend[0][i]=u*(u-1)*(u-2)/(-6); blend[1][i]=(u+1)*(u-1)*(u-2)/2; blend[2][i]=(u+1)*u*(u-2)/(-2); blend[3][i]=(u+1)*u*(u-1)/6; v=u-1; f_blend[0][i]=v*(v-1)*(v-2)/(-6); f_blend[1][i]=(v+1)*(v-1)*(v-2)/2; f_blend[2][i]=(v+1)*v*(v-2)/(-2); f_blend[3][i]=(v+1)*v*(v-1)/6; w=u+1; l_blend[0][i]=w*(w-1)*(w-2)/(-6); l_blend[1][i]=(w+1)*(w-1)*(w-2)/2; l_blend[2][i]=(w+1)*w*(w-2)/(-2); l_blend[3][i]=(w+1)*w*(w-1)/6; } for(int i=0;i<4;i++) { sm[i].x=aa[i].x; sm[i].y=aa[i].y; } pDC->MoveTo(aa[0].x,aa[0].y); for(int j=0;j<l_section;j++) { x=y=0; for(int i=0;i<4;i++) { x=x+sm[i].x*f_blend[i][j]; y=y+sm[i].y*f_blend[i][j]; } pDC->LineTo(x,y); } for(int m=4;m<k;m++) { for(int j=0;j<l_section;j++) { x=y=0; for(int i=0;i<4;i++) { x=x+sm[i].x*blend[i][j]; y=y+sm[i].y*blend[i][j]; } pDC->LineTo(x,y); } for(int i=0;i<3;i++) { sm[i].x=sm[i+1].x; sm[i].y=sm[i+1].y; } sm[3].x=aa[m].x; sm[3].y=aa[m].y; } for(int j=0;j<l_section;j++) { x=y=0; for(int i=0;i<4;i++) { x=x+sm[i].x*l_blend[i][j]; y=y+sm[i].y*l_blend[i][j]; } pDC->LineTo(x,y); } pDC->LineTo(sm[3].x,sm[3].y); }
相关文章推荐
- 动易2006序列号破解算法公布
- C#数据结构与算法揭秘二
- JavaScript 组件之旅(二)编码实现和算法
- 将15位身份证补全为18位身份证的算法示例详解
- C++算法系列之日历生成的算法代码
- 1 2 3 4 5 6 7 8 9 = 110的java实现
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 【代码】Pythonの代码片段
- 数据结构&算法学习
- 算法的时间复杂度
- 算法导论:选择排序的原理与实现
- PHP实现四种常用的排序算法
- 图解插入排序算法
- 一些常见算法的JavaScript实现
- 平方根sqrt()函数的底层算法效率
- 二叉搜索树的一些相关算法介绍
- 欧几里德算法(辗转相处法)练手
- 面试中常见的一些算法问题
- 计算机编程中一些重要的算法
- 合并排序算法解说与例子