📄 medit贝齐尔曲线.c
字号:
#include "graphics.h"
#include "stdio.h"
float Bkn();
void main(void)
{
typedef struct
{
float x; /* 点的横坐标 */
float y; /* 点的纵坐标 */
}point_type;
point_type* point;
int point_num,i,gdriver=DETECT,gmode=IBM8514HI,errorflag,k;
char ch;
float xx,yy,m=100.0,temp;
do
{
/* do--while循环用来输入点数,并进行有效性检查*/
do
{
printf("Please input the number of the points(>=1):\n");
scanf("%d",&point_num);
if(point_num<1)
printf("The number you have input is invalid,please try again.\n");
}while(point_num<1);
/* 下面的malloc函数用来动态分配内存空间 */
point=(point_type*)malloc(point_num*sizeof(point_type));
/* 下面的for循环用来输入点的坐标。由于程序设置了坐标变换
功能,用户只需把一般的坐标输入即可,不必考虑屏幕坐标*/
printf("Please input the coordinate of the %d points:\n",point_num);
for(i=0;i<point_num;i++)
{
scanf("%f",&temp);
point[i].x=temp;
scanf("%f",&temp);
point[i].y=temp;
}
/* 下面初始化图形系统,并进行错误检查*/
initgraph(&gdriver,&gmode,"c:\\turboc2");
errorflag=graphresult();
if(errorflag!=grOk)
{
printf("fail to initialze the graphics.\n%s\n",grapherrormsg(errorflag));
printf("Press any key to halt:");
getch();
exit(1);
}
/* 为了得到最佳的观察效果,将背景、坐标轴、控制多边形、Bezier曲线设置成不同的颜色*/
setbkcolor(WHITE);
setcolor(RED);
line(50,240,550,240);
line(320,50,320,430);
setcolor(BLUE);
/* 下面的for循环用来画控制多边形 */
for(i=0;i<point_num;i++)
{
xx=point[i].x*100+320;
yy=240-point[i].y*100;
if(i==0)
moveto(xx,yy);
else
lineto(xx,yy);
}
/* 下面的for循环用来画Bezier曲线 */
setcolor(LIGHTGREEN);
for(i=0;i<=(int)m;i++)
{
xx=0;
yy=0;
for(k=0;k<point_num;k++)
{
xx+=point[k].x*Bkn(point_num-1,k,i/m);
yy+=point[k].y*Bkn(point_num-1,k,i/m);
}
/* 下面的两句用来将一般的坐标变换成屏幕坐标*/
xx=xx*100+320;
yy=240-yy*100;
if(i==0)
moveto(xx,yy);
else
lineto(xx,yy);
}
getch();
closegraph();
/* 询问用户是否继续 */
printf("Continue(Y/N):");
ch=getchar();
ch=getchar();
}while(ch=='Y' || ch=='y');
}
/* Bkn函数用来计算n次Bernstein多项式的基函数*/
float Bkn(n,k,t)
int n,k;
float t;
{
int i;
float temp_t=1.0,temp_n=1.0,temp_tt=1.0;
for(i=1;i<=k;i++)
temp_t*=t/i;
for(i=n-k+1;i<=n;i++)
temp_n*=i;
for(i=1;i<=(n-k);i++)
temp_tt*=(1-t);
return(temp_n*temp_t*temp_tt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -