您的位置 电脑知识爱好者 >> 编程知识 >> 求计算机图形学曲线的五点光滑法的C代码?

求计算机图形学曲线的五点光滑法的C代码?

电脑知识爱好者互联网本站整理2007-8-27 21:56:09
知识重点:大哥给个算法吧,急用自己不会啊!! 可以直接使用的源码: WORD DrawPic(POINT *PosIn, POINT *PosOut, WORD n, WORD EachSum, WORD ch, float tx1, float tx2, float ty1, float ty2) { ..

大哥给个算法吧,急用自己不会啊!! 可以直接使用的源码:

WORD DrawPic(POINT *PosIn, POINT *PosOut, WORD n, WORD EachSum, WORD ch,

float tx1, float tx2, float ty1, float ty2)

{

const UCHAR MAX_NUM = 16;//最多16个点

float x[MAX_NUM], y[MAX_NUM];

WORD num = 0, tt;

float a[MAX_NUM], b[MAX_NUM], c[MAX_NUM], dx[MAX_NUM], dy[MAX_NUM];

float qx[MAX_NUM], qy[MAX_NUM];

float bx3, bx4, by3, by4;

float cx, cy, t[MAX_NUM+1], px[MAX_NUM], py[MAX_NUM];

//float u[3], v[3];

short i;

for (i=0; i<n; i++)

{

x[i] = PosIn[i].x;

y[i] = PosIn[i].y;

}

for (i=0; i<n; i++)

t[i] = (float)EachSum;//hypot(x[i+1] - x[i], y[i+1] - y[i]);

t[n] = 1.0e+8;//为以后的计算初始化t[n],t[0]废弃

switch(ch)

{

a[n] = 1; b[n] = 0; dx[n] = tx2; dy[n] = ty2;

break;

default:

return false;

}

for (i=1; i<=n-1; i++)

{

a[i] = 2 * (t[i] + t[i+1]);b[i] = t[i+1]; c[i] = t[i];

dx[i] = 3 * (t[i] * (x[i+1] - x[i]) / t[i+1] + t[i+1] * (x[i] - x[i-1]) / t[i]);

dy[i] = 3 * (t[i] * (y[i+1] - y[i]) / t[i+1] + t[i+1] * (y[i] - y[i-1]) / t[i]);

}

c[0] = c[0] / a[0];

for (i=1; i<=n-1; i++)

{a[i] = a[i] - b[i] * c[i-1];

c[i] = c[i] / a[i];

}

a[n] = a[n] - b[n] * c[i-1];

qx[0] = dx[0] / a[0];qy[0] = dy[0] / a[0];

for (i=1; i<=n; i++)

{qx[i] = (dx[i] - b[i] * qx[i-1]) / a[i];

参与评论
相关内容
关于我们 | 隐私政策 | 站点地图 | 站长博客|京ICP备07025396号
添加到百度搜藏 添加到百度搜藏 电脑知识爱好者Copyright ?2006-2008版权所有 我要啦免费统计