C语言实现生成贝塞尔曲线(代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在C环境下编程实现:由4个控制点生成3次贝塞尔曲线
#include
#include
int zuhe(int n,int k)
{
int i,s1,s2;
s1=1;
s2=1;
if(k==0) return 1;
for(i=n;i>=n-k+1;i--) s1=s1*i;
for(i=k;i>=2;i--) s2=s2*i;
return s1/s2;
}
float fang(float n,int k)
{
if(k==0) return 1;
return pow(n,k);
}
float benkn(int n,int k,float t)
{
return zuhe(n,k)*fang(t,k)*fang(1-t,n-k);
}
void main()
{
float t[11]={0},x[4],y[4],x1[11],y1[11],s=0.0;
int i;
for(i=1;i<11;i++) {s=s+0.1;t[i]=s;}
printf("please input x value:\n");
for(i=0;i<4;i++) scanf("%f",x+i);
printf("please input x value:\n");
for(i=0;i<4;i++) scanf("%f",y+i);
for(i=0;i<11;i++)
{
x1[i]=x[0]*benkn(3,0,t[i])+x[1]*benkn(3,1,t[i])+x[2]*benkn(3,2,t[i])+x[3]*benkn(3,3,t[i]);
y1[i]=y[0]*benkn(3,0,t[i])+y[1]*benkn(3,1,t[i])+y[2]*benkn(3,2,t[i])+y[3]*benkn(3,3,t[i]);
}
printf("%f,%f,%f,%f\n",x[0],x[1],x[2],x[3]);
printf("%f,%f,%f,%f\n",y[0],y[1],y[2],y[3]);
for(i=0;i<11;i++)
{
printf("%5.2f",t[i]);
}
printf("\n");
for(i=0;i<11;i++)
{
printf("%5.2f",x1[i]);
}
printf("\n");
for(i=0;i<11;i++)
{
printf("%5.2f",y1[i]);
}
}