四次bezier曲线
(C语言相关解析)生成4次Bezier曲线算法实现C/C++语言 2007-11-06 19:57:40 阅读354 评论0 字号:大中小 订阅 .
一、实验目的和意义
掌握曲线的生成算法思想,并上机编程实现相应的算法。为更深入的了解Bezier 算法,并能熟练运用C语言编写程序。
二、实验要求(Direction)
1. 每个学生单独完成。
2. 开发语言规定为TurboC。
3. 请在自己的实验报告上写明姓名、学号、班级。
4. 每次交的实验报告内容包括:实验目的和意义、题目、程序制作步骤、主程序(包括源代码注释)、参考文件。
5. 自己保留一份可执行程序,考试前统一检查和上交。
三、实验题目
上机编写一个通用的绘制Bezier曲线的程序,并调试成功。具体要求如下说明:
1 该程序可用来绘制任意个控制点的Bezier曲线;
2 控制顶点的坐标要求可以随机输入;
3 当用户输入控制点的坐标位置后,屏幕上生成曲线的同时显示其特征多边形;且在特征多边形的顶点处输出该顶点坐标;
4 要求在可执行程序后附上运行结果,且运行结果图大致如下。
图:生成4次Bezier曲线
四、程序制作步骤
实现4次bezier算法
C=p0*(1-t)*(1-t)*(1-t)*(1-t)+p1*4*t*(1-t)*(1-t)*(1-t)+p2*6*t*t*(1-t)*(1-t)+p3*4*(1-t)*t*t*t+p4*t*t*t*t;
编写程序首先输入5点坐标,其次输入曲线的精度,绘制曲线
五、程序如下
#include"graphics.h"
#include"math.h"
main( )
{
int x0,y0,x1,y1,x2,y2,x3,y3,x4,y4;
int x,y,n;
float i,dt,t;
char msg[80];
int gdriver=DETECT,gmode;
printf("please input thepoint x0,y0,x1,y1,x2,y2,x3,y3,x4,y4:\n");
/*输入五个节点的坐标*/
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",&x0,&y0,&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
printf("please input the n:\n");
/*输入精度值n*/
scanf("%d",&n);
initgraph(&gdriver,&gmode,"D:\\TC");/*初始化图形系统*/
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t--------4_Bezier---------\n");
printf("\n\t ---hui zhi yi duan san ci Bezier qu xian duan---\n");
printf("\n\t ------- graphics:hugang 2007.11.5 --------\n");
setbkcolor(BLUE);
setcolor(YELLOW);
dt=1/(float)n;
/*4_Bezier绘制曲线图*/
for(i=0;i<=n;i++)
{
t=i*dt;
x=x0*(1-t)*(1-t)*(1-t)*(1-t)+x1*4*t*(1-t)*(1-t)*(1-t)+x2*6*t*t*(1-t)*(1-t)+x3*4*(1-t)*t*t*t+x4*t*t*t*t;
y=y0*(1-t)*(1-t)*(1-t)*(1-t)+y1*4*t*(1-t)*(1-t)*(1-t)+y2*6*t*t*(1-t)*(1-t)+y3*4*(1-t)*t*t*t+y4*t*t*t*t;
if(i==0) moveto(x,y);
lineto(x,y);
}
line(x0,y0,x1,y1);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x4,y4);
sprintf(msg,"%s%d%s%d,%d%s","P",0,"(",x0,y0,")");
outtextxy(x0,y0,msg);
sprintf(msg,"%s%d%s%d,%d%s","P"
,1,"(",x1,y1,")");
outtextxy(x1,y1,msg);
sprintf(msg,"%s%d%s%d,%d%s","P",2,"(",x2,y2,")");
outtextxy(x2,y2,msg);
sprintf(msg,"%s%d%s%d,%d%s","P",3,"(",x3,y3,")");
outtextxy(x3,y3,msg);
sprintf(msg,"%s%d%s%d,%d%s","P",4,"(",x4,y4,")");
outtextxy(x4,y4,msg);
getch(); /*等待按一键结束*/
closegraph(); /*关闭图形系统,回到文本模式*/
}