请由键盘输入任意个控制(特征)点,绘制出对应的控制(特征)多边形及Bezier曲线
代码已经过编译,可直接进行使用。
#include<stdio.h>
#include<graphics.h>
#include<math.h>
//进行BEN计算
float BEN(int k,int n,float t){
float a=1,b=1,c=1,s;
int i;
for(i=k;i>0;i--)
a=a/i;
for(i=n-k;i>0;i--)
b=b/i;
for(i=n;i>0;i--)
c=c*i;
s=a*b*c*pow(t,k)*pow(1-t,n-k);
return s;
}
//进行Bezier曲线计算
void Bezier(int *p,int N){
int k,i,j=0;
float x,y,t=0;
int a[10],b[10];
for(i=0;i<N*2;i=i+2){
a[j]=p[i];
b[j]=p[i+1];
j++;
}
for(t=0;t<=1.001;t=t+0.001){
printf("%f\n",t);
x=0;y=0;
for(k=0;k<=N-1;k++){
x=x+(float)a[k]*BEN(k,N-1,t);
y=y+(float)b[k]*BEN(k,N-1,t);
}
putpixel((int)x,(int)y,WHITE);
}
}
//主函数
int main(){
int i,N;
int gmode,gd=DETECT;
int p[8];
printf("输入控制点的个数:\n");
scanf("%d",&N);
printf("输入控制点坐标:\n");
for(i=0;i<2*N;i=i+2)
scanf("%d%d",&p[i],&p[i+1]);
initgraph(&gd,&gmode,"");
drawpoly(N,p);
Bezier(p,N);
getchar();
getchar();
closegraph();
return 0;
}
若输入:
则输出:
若输入:
则输出:
更多计算机图形学实验相关内容,可直接查看看我的博客主页。