高分求一个曲线算法!!!

ColderRain 2003-08-29 09:51:59
在MFC中,给定任意多的坐标,坐标随机分布。如何将这些坐标平滑的连接起来?
当传入一系列点到PolyBezier这个函数中时,有可能画不出来。
如果采用分段(每3个点)画,有可能不平滑,或是有的段能画出来,有的画不出来。

请赐教。
...全文
55 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wkgenius 2003-08-31
  • 打赏
  • 举报
回复
自己写一个画Bezier曲线的算法,其中,Bezier上相邻的两个点肯定要用直线画,这个直线的画法要进行反走样的处理,我现在正在做反走样的的东西,画Bezier曲线和反走样的算法我都写了一点。要的话可以交流一下。
FBStudio 2003-08-31
  • 打赏
  • 举报
回复
那几行是我的系统内部合并输出用的,可以把它们删掉。
我提供的函数所绘的曲线是通过顶点的。
搬不搬砖 2003-08-30
  • 打赏
  • 举报
回复
B 样条,数值逼近,数值计算,或计算机图形学方面的书上都有算法
hellolwl 2003-08-30
  • 打赏
  • 举报
回复
我也有一段B样条的代码,可惜是根据控制多边形的顶点坐标来绘制的,而不是曲线上的点坐标.
最小二乘法的算法可以看一下计算数学的教材,介绍的还是很详细的,现在我身边没有这本书
FatGarfield 2003-08-30
  • 打赏
  • 举报
回复
有e_mail吗,把我的程序发给你。
ColderRain 2003-08-29
  • 打赏
  • 举报
回复
UpdatePitch( );
if (m_bUpdate) Flush( );
return TRUE;

这几行代码是干什么的?
FBStudio 2003-08-29
  • 打赏
  • 举报
回复
给你一段我写的例子,是B样条,bClose为true表示首尾相接的闭合曲线
里面的_MoveTo和_LineTo换成你的函数
BOOL CGraphDC::_Spline(const LPPOINT pn,const int &n,const BOOL &bClose)
{
if (n<3) return FALSE;
double Fh1;
double Fh2;
double Fh3;
double Fh4;
double t3,t2,t,dt,d;

double (*a)[5]=NULL;
int i,j;
try
{
a=new double[n][5];
a[0][0]=0;
a[0][1]=1;
a[0][2]=0.5;
a[0][3]=1.5*(pn[1].x-pn[0].x);
a[0][4]=1.5*(pn[1].y-pn[0].y);
for (i=1;i<n-1;i++)
{
a[i][0]=1;
a[i][1]=4;
a[i][2]=1;
a[i][3]=3*(pn[i+1].x-pn[i-1].x);
a[i][4]=3*(pn[i+1].y-pn[i-1].y);
}
a[i][0]=1;
a[i][1]=2;
a[i][2]=0;
a[i][3]=3*(pn[i].x-pn[i-1].x);
a[i][4]=3*(pn[i].y-pn[i-1].y);

for (i=1;i<n;i++)
{
//a[i][0]-=a[i-1][1];//equal to 0
a[i][1]-=a[i-1][2];
a[i][3]-=a[i-1][3];
a[i][4]-=a[i-1][4];
for (j=4;j>=1;j--) a[i][j]/=a[i][1];
}
for (i=n-2;i>=0;i--) for (j=3;j<5;j++) a[i][j]-=a[i][2]*a[i+1][j];
// 求解

int x,y;
if (!_MoveTo(pn->x,pn->y)) throw(8);
for(i=0;i<n-1;i++)
{
y=pn[i+1].y-pn[i].y;
if (y<0) y=-y;
y+=1;
d=y*y;
y=pn[i+1].x-pn[i].x;
if (y<0) y=-y;
y+=1;
d=sqrt(d+y*y);
dt=1/d;

for(t=0;t<=1;t+=dt)
{
t2=t*t;
t3=t2*t;

//Fh1=2*t3-3*t2+1;
Fh2=-2*t3+3*t2;
Fh1=1-Fh2;
Fh3=t3-2*t2+t;
Fh4=t3-t2;

x=int(Fh1*pn[i].x+Fh2*pn[i+1].x+Fh3*a[i][3]+Fh4*a[i+1][3]);
y=int(Fh1*pn[i].y+Fh2*pn[i+1].y+Fh3*a[i][4]+Fh4*a[i+1][4]);
if (!_LineTo(x,y)) throw(8);
}
}
if (!_LineTo(pn[i].x,pn[i].y)) throw(8);

if (bClose)
{
y=pn[0].y-pn[i].y;
if (y<0) y=-y;
y+=1;
d=y*y;
y=pn[0].x-pn[i].x;
if (y<0) y=-y;
y+=1;
d=sqrt(d+y*y);
dt=1/d;
for(t=0;t<=1;t+=dt)
{
t2=t*t;
t3=t2*t;

//Fh1=2*t3-3*t2+1;
Fh2=-2*t3+3*t2;
Fh1=1-Fh2;
Fh3=t3-2*t2+t;
Fh4=t3-t2;

x=int(Fh1*pn[i].x+Fh2*pn[0].x+Fh3*a[i][3]+Fh4*a[0][3]);
y=int(Fh1*pn[i].y+Fh2*pn[0].y+Fh3*a[i][4]+Fh4*a[0][4]);
if (!_LineTo(x,y)) throw(8);
}
if (!_LineTo(pn[0].x,pn[0].y)) throw(8);
}
if (a) delete []a;
UpdatePitch( );
if (m_bUpdate) Flush( );
return TRUE;
}
catch(...)
{
if (a) delete []a;
return FALSE;
}
}
AkiraChing 2003-08-29
  • 打赏
  • 举报
回复
多项式拟合
ColderRain 2003-08-29
  • 打赏
  • 举报
回复
楼上的能不能说详细点。
hellolwl 2003-08-29
  • 打赏
  • 举报
回复
用最小二乘法拟合呢
matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。 Matlab(Matrix Laboratory)是一种专为数值计算和科学与工程应用而设计的高级编程语言和环境。在算法开发和实现方面,Matlab具有以下一些好处: 1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者快速实现各种复杂的数值计算算法。这些函数库提供了许多常用的算法和工具,可以大大简化算法开发的过程。 2. 易于学习和使用:Matlab具有简单易用的语法和直观的编程环境,使得算法开发者可以更快速地实现和测试他们的算法。Matlab的语法与数学表达式和矩阵操作非常相似,这使得算法的表达更加简洁、清晰。 3. 快速原型开发:Matlab提供了一个交互式的开发环境,可以快速进行算法的原型开发和测试。开发者可以实时查看和修改变量、绘制图形、调试代码等,从而加快了算法的迭代和优化过程。这种快速原型开发的特性使得算法开发者可以更快地验证和修改他们的想法。 4. 可视化和绘图功能:Matlab具有强大的可视化和绘图功能,可以帮助开发者直观地展示和分析算法的结果。开发者可以使用Matlab绘制各种图形、曲线、图像,以及创建动画和交互式界面,从而更好地理解和传达算法的工作原理和效果。 5. 并行计算和加速:Matlab提供了并行计算和加速工具,如并行计算工具箱和GPU计算功能。这些工具可以帮助开发者利用多核处理器和图形处理器(GPU)来加速算法的计算过程,提高算法的性能和效率
matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。 Matlab(Matrix Laboratory)是一种专为数值计算和科学与工程应用而设计的高级编程语言和环境。在算法开发和实现方面,Matlab具有以下一些好处: 1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者快速实现各种复杂的数值计算算法。这些函数库提供了许多常用的算法和工具,可以大大简化算法开发的过程。 2. 易于学习和使用:Matlab具有简单易用的语法和直观的编程环境,使得算法开发者可以更快速地实现和测试他们的算法。Matlab的语法与数学表达式和矩阵操作非常相似,这使得算法的表达更加简洁、清晰。 3. 快速原型开发:Matlab提供了一个交互式的开发环境,可以快速进行算法的原型开发和测试。开发者可以实时查看和修改变量、绘制图形、调试代码等,从而加快了算法的迭代和优化过程。这种快速原型开发的特性使得算法开发者可以更快地验证和修改他们的想法。 4. 可视化和绘图功能:Matlab具有强大的可视化和绘图功能,可以帮助开发者直观地展示和分析算法的结果。开发者可以使用Matlab绘制各种图形、曲线、图像,以及创建动画和交互式界面,从而更好地理解和传达算法的工作原理和效果。 5. 并行计算和加速:Matlab提供了并行计算和加速工具,如并行计算工具箱和GPU计算功能。这些工具可以帮助开发者利用多核处理器和图形处理器(GPU)来加速算法的计算过程,提高算法的性能和效率
matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。 Matlab(Matrix Laboratory)是一种专为数值计算和科学与工程应用而设计的高级编程语言和环境。在算法开发和实现方面,Matlab具有以下一些好处: 1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者快速实现各种复杂的数值计算算法。这些函数库提供了许多常用的算法和工具,可以大大简化算法开发的过程。 2. 易于学习和使用:Matlab具有简单易用的语法和直观的编程环境,使得算法开发者可以更快速地实现和测试他们的算法。Matlab的语法与数学表达式和矩阵操作非常相似,这使得算法的表达更加简洁、清晰。 3. 快速原型开发:Matlab提供了一个交互式的开发环境,可以快速进行算法的原型开发和测试。开发者可以实时查看和修改变量、绘制图形、调试代码等,从而加快了算法的迭代和优化过程。这种快速原型开发的特性使得算法开发者可以更快地验证和修改他们的想法。 4. 可视化和绘图功能:Matlab具有强大的可视化和绘图功能,可以帮助开发者直观地展示和分析算法的结果。开发者可以使用Matlab绘制各种图形、曲线、图像,以及创建动画和交互式界面,从而更好地理解和传达算法的工作原理和效果。 5. 并行计算和加速:Matlab提供了并行计算和加速工具,如并行计算工具箱和GPU计算功能。这些工具可以帮助开发者利用多核处理器和图形处理器(GPU)来加速算法的计算过程,提高算法的性能和效率
matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。 Matlab(Matrix Laboratory)是一种专为数值计算和科学与工程应用而设计的高级编程语言和环境。在算法开发和实现方面,Matlab具有以下一些好处: 1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者快速实现各种复杂的数值计算算法。这些函数库提供了许多常用的算法和工具,可以大大简化算法开发的过程。 2. 易于学习和使用:Matlab具有简单易用的语法和直观的编程环境,使得算法开发者可以更快速地实现和测试他们的算法。Matlab的语法与数学表达式和矩阵操作非常相似,这使得算法的表达更加简洁、清晰。 3. 快速原型开发:Matlab提供了一个交互式的开发环境,可以快速进行算法的原型开发和测试。开发者可以实时查看和修改变量、绘制图形、调试代码等,从而加快了算法的迭代和优化过程。这种快速原型开发的特性使得算法开发者可以更快地验证和修改他们的想法。 4. 可视化和绘图功能:Matlab具有强大的可视化和绘图功能,可以帮助开发者直观地展示和分析算法的结果。开发者可以使用Matlab绘制各种图形、曲线、图像,以及创建动画和交互式界面,从而更好地理解和传达算法的工作原理和效果。 5. 并行计算和加速:Matlab提供了并行计算和加速工具,如并行计算工具箱和GPU计算功能。这些工具可以帮助开发者利用多核处理器和图形处理器(GPU)来加速算法的计算过程,提高算法的性能和效率

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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