很多方法可以实现,比较简单的一种是采用
Y = aX^6 + bX^5 + ... + fX + c 合成。
要更光滑的,不同弧度的可以采用其它方法。具体实现应该不难吧?
Y = aX^6 + bX^5 + ... + fX + c 合成。
要更光滑的,不同弧度的可以采用其它方法。具体实现应该不难吧?
解决方案 »
- CDialog::Create()方法的疑问
- 本人二级的小程序,但运行不了 望改正
- Radion Bution取消选择
- 如何获得ADO data、DataGrid、DataCombo、DataList等ActiveX控件的函数的详解
- 申请这个帐号将近半年了,怎么还没升级.问问各位前辈,升级需要的各个必备条件,散点小分!!嘿嘿
- 高手请进,如何有效判别两个文件的是否为同一文件
- 请问 怎么在textbox里,添加listctrl项
- 如何修改本机的IP,谢了
- 请推荐一本学习网络编程的书,入门及提高级的。
- 关于在VC中控件的问题
- 问题!!!!!!!高手请进!!!!!!!!!!!!
- 如何从CDC *pDC得到相应的HDC hdc,类似的有如何从CWnd *pWnd得到相应的HWnd?
y=ax^5 + bx^4 + cx^3 + dx^2 + ex + f
把这六点代入,然后解这个六元一次方程组就好了
好象Windows有API
我好像有这本书,回去查查看,有代码的话贴给你。
我觉得我上面那个思路是对的,六元一次方程组很容易解吧
至于画吗,找些点setpixel就成
to adone(阿不)候君佳音
to adone(阿不)候君佳音
或者到我网站http://breath.onchina.net上去看,在VC专题中有算法的例子
最小二乘法误差很大, 况且你事先并不知道这些点就一定满足某个
有人在csdn上贴的最小二乘法曲线拟合算法有错,http://www.csdn.net/develop/read_article.asp?id=2369.
只是要光滑的话贝塞尔曲线拟合很好.
如果你用delphi这根本不是问题.Tchart自带了贝塞尔曲线拟合.
#include<conio.h>
void calc(int*,int*,int);
void main()
{
const int n=6;
int x[n+2]={0,20,80,300,500,400,100},y[n+2]={0,120,80,20,250,300,100};
int gd=DETECT,gm,i;
registerbgidriver(EGAVGA_driver);//这里注意可以改改
initgraph(&gd,&gm,"");
for(i=1;i<=n;i++)circle(x[i],y[i],2);
calc(x,y,n);
getch();
closegraph();
}void calc(int *x,int *y,int n)
{
const int k=100;//调整这个可以调整精度
register int i,j;
double t1,t2,t3,t,a,b,c,d,tx,ty;
x[0]=x[1];y[0]=y[1];
x[n+1]=x[n];y[n+1]=y[n];
t=0.5/k;
moveto(x[1],y[1]);
i=0;
for(i=0;i<n-1;i++)
for(j=1;j<k;j++){
t1=j*t;
t2=t1*t1;
t3=t2*t1;
a=4*t2-t1-4*t3;
b=1-10*t2+12*t3;
c=t1+8*t2-12*t3;
d=4*t3-2*t2;
tx=a*x[i]+b*x[i+1]+c*x[i+2]+d*x[i+3]+.5;
ty=a*y[i]+b*y[i+1]+c*y[i+2]+d*y[i+3]+.5;
lineto(tx,ty);
}
lineto(x[i+2],y[i+2]);
}