电脑爱好者有一题,谁给个算法?

wedong2000 2000-07-01 01:19:00
如何通过若于个点的坐标,划一个光滑曲线。
...全文
229 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
满桌烟灰 2000-07-10
  • 打赏
  • 举报
回复
根据已知几个点的坐标利用最小二乘法可得一个曲线函数,再按照该函数画点OK!
ad 2000-07-06
  • 打赏
  • 举报
回复
不就是曲线拟合问题嘛,有什么困难的,大学里应该学过的啦,把高数拿出来翻一翻,按照书上的公式做就是了,我刚毕业哪会就给别人写程序时用到了曲线拟合。
茂奇软件 2000-07-05
  • 打赏
  • 举报
回复
I advice to use nurbs.it is a industry standard.
You can find more information from
the www.opengl.org. Good Lucky.
jansen zhu
wgtech 2000-07-02
  • 打赏
  • 举报
回复
用BEZIER-2
wgtech 2000-07-02
  • 打赏
  • 举报
回复
//干脆给你写出来的了。
int bezier_3(int *x, int *y)
// x[0], x[1], x[2]
// y[0], y[1], y[2] 分别为三个点的横、纵坐标,这里用指针传输。
{
int i, k, *bx, *by, n = 10; // n代表光滑读,值越大,曲线越光滑。
double a0, a1, a2, dt, xx, t1, t2;

bx = (int *)malloc(n * sizeof(int));
by = (int *)malloc(n * sizeof(int));
if(( !bx ) || ( !by )) {
return -1; //无足够内存。
}
dt = (double)l / (double)n;
a2 = (x[0]-2*x[1]+x[2]);
a1 = ((-2)*x[0]+2*x[1]);
a0 = x[0];
bx[0] = x[0];

for( i = 1; i < n; i ++ ) {
t1 = i * dt;
t2 = t1 * t1;
bx[i] = a0 + a1 * t1 + a2 * t2;
}

a2 = (y[0]-2*y[1]+y[2]);
a1 = ((-2)*y[0]+2*y[1]);
a0 = y[0];

by[0] = y[0];

for( i = 1; i < n; i ++ ) {
t1 = i * dt;
t2 = t1 * t1;
by[i] = a0 + a1*t1 + a2*t2;
}
// 以上是算法的主体部分,慢慢琢磨....
moveto( bx[0], by[0] );
for(i = 1; i < n; i ++ ) { // 画出线条。
if(( bx[i] != bx[i - 1] ) || ( by[i] != by[i - 1] ))
lineto(bx[i], by[i]);
}
lineto(x[3], y[3]);
free(bx); //释放内存。
free(by);
}
halfdream 2000-07-01
  • 打赏
  • 举报
回复
曲线拟合的算法有很多种,
要知详情去找找这方面的书吧。
vcgreener 2000-07-01
  • 打赏
  • 举报
回复
作个样条函数

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧