求计算机图形学曲线的五点光滑法的C代码?
大哥给个算法吧,急用自己不会啊!! 可以直接使用的源码:
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];
参与评论- 相关内容
- 最近更新
- ·有了源代码后如何变成程序?
- ·没有启动软盘能格式化C.D.E盘
- ·数据结构问题:循环双链表
- ·如何求-10的补码?我是c语言初学..
- ·c++有没有函数提供ini文件的提取..
- ·一个C语言学生管理系统的问题,集..
- ·诛仙聊天自动回复
- ·这个word文档是怎么被锁死的?
- ·如何将照片粘贴到WORD中?
- ·office办公软件
添加到百度搜藏