四次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(); /*关闭图形系统,回到文本模式*/

}


相关文档
最新文档