由键盘输入任意个控制(特征)点,绘制出对应的控制(特征)多边形及Bezier曲线

请由键盘输入任意个控制(特征)点,绘制出对应的控制(特征)多边形及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;
}

若输入:
在这里插入图片描述
则输出:
在这里插入图片描述
若输入:
在这里插入图片描述
则输出:
在这里插入图片描述
更多计算机图形学实验相关内容,可直接查看看我的博客主页

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值