计算机图形学直线生成算法实现.doc
(7页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
9.9 积分
实验二直线生成算法实现班级08信计学号80姓名 分数一、 实验目的和要求:1、 理解直线生成的基本原理2、 掌握几种常见的直线的生成算法3、 实现直线生成的算法二、 实验内容:1. 了解直线的生成原理2. 掌握几种基木的直线生成算法:DDA算法、brcscnham画线法、中点画线 法3. 实现直线生成的,在屏幕上任意生成一条直线三、 实现程序程序1#define pi 3.141592ttdefine MAX (a, b) (a>b) ? a:b ftdefine MIN(a, b) (a*t0)( *t0=r;return (1);))else if(q>0)( r=d/q;if(rxmax-pot[0]. x, &t0, &tl))( delaty=pot[1]. y-pot[0]. y;if (clip(-delaty, pot[0]. y-rect->ymin, &t0, &tl))if(clip(delaty, rect->ymax-pot[0]. y, &t0, &tl))( line((int)(pot[0]. x+t0*delatx), (int)(pot[0]. y+t0*delaty), (int)(pot[0]. x+tl*delatx), (int)(pot[0]. y+tl*delaty));)))void main()(int driver=DETECT, mode; int i=0, j, key; registerbgidriver(EGAVGA_driver);initgraph(&driver, &mode, "\\tc");initgraph(&driver, &mode, "\\tc");zhongxing (x, y, 4);setcolor(3);rectangle (150, 100, 490, 380);/**/for(;;)( if (bioskey(1))( key=bioskey(0):if(key==0x4d00)( zhongxing (x, y, 0);x+=5;zhongxing (x, y, 4);rectangle (150, 100, 490, 380);)if(key==0x011b){printf("esc be press*);break;)if(key=0x4b00)( zhongxing (x, y, 0);x-=5;zhongxing (x, y, 4);rectangle (150, 100, 490, 380);)if(key==0x5000)(zhongxing (x, y, 0);y+=5;zhongxing (x, y, 4);rectangle (150, 100, 490, 380);)if(key==0x4800)(zhongxing (x, y, 0);y-=5;zhongxing (x, y, 4);rectangle (150, 100, 490, 380);)if(key==OxlcOd)( add(x, y, i); circle (x, y, 3);i+=l;}if(key==0x3920)(liang(pot, &rect);for(j=0;j<2;j++)( pot[j]. x=0;pot[j]. y=0;} i=0;)))getch ();closegraph ();)一程序2(1) DDA算法程序实现的完整源程序 #includeh>#include#include#define YS 10000()dda_Iine(int xa9int ya,int xb,int ybjnt c){float delta_x,delta_y,x,y;int dx,dy,steps,k;dx=xb-xa;dy=yb・ya;if(abs(dx)>abs(dy)) /* 判断步长的方向 */ steps=abs(dx); /*steps 作为控制数 Kvl*/ elsesteps=abs(dy); /*steps 作为控制数 K>1*/ delta_x=(float)dy / (loat)steps; /*值为±1 域土 1/m*/delta_y=(float)dy / float)steps; /*值为±1 域土m*/x=xa;y=ya;putpixel(x,y,c); /*画起点,c为点的颜色*/for(k= 1; k<=steps;k++) /* 循坏画点成直线 */(x+=delta_x;y+=delta_y;putpixel(x,y,c);delay(YS);})main()(int x 1=250,y1 =250,x2=300,y2=300,c=5;int dx,dy,n,k,i,f;int x,y;int gdriver,ginode;gdriver=DETECT;initgraph(&gdriver,&gmode,” ”);ddajine(xl,yl,x2,y2,c);getch();closegraph();)(2)改进的Bresenham画线算法程序实现的完整源程序#include#include#include#define YS 100000bresenham_line(int xO,int yO,int xl,int yl,int c)(int x,y,dx,dy,e,i;dx=xl-x();dy=yl-y();e=-dx;x=xO,y=yO;for(i=0;iv=dx;i++)(putpixel(x,y,c++);/*c++不同描点不同颜色 */delay (YS);x++,e=e+2*dy;if(e>0)(y++;e=e-2*dx;})}main()int x0=100,y0=100,xl=200,y1=200,c=l;int gdriver^gmode;gdriver=DETECT;initgraph(&gdriver9&gmode/f ");bresenhamJine(xO,yO,xl5yl,c);getch();closegraph();}(3)中点算法实现的完整源程序#include #include #include #include vconio.h〉#include #define rad 0.0174532925#define NUMBER 24/*此程序写出的图形,(0,0)在左上方,即以原y轴的负半轴为正,x轴不变,类似于抛物 运动。*//*此程序写出的图形,(0,0)在左上方,即以原y轴的负半轴为正,X轴不变,类似于抛物 运动。*/main()(float xa,xb,ya,yb;float dex,dey,dx,dy;float x,y,sl,s2;int steps,k,l;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode/tH);cleardevice();printf(Hshu ru qi dian he zhong dian zuo biao (xa,ya) (xb,yb):\nH);printf(M\n xa= ”);scanf(”%f”,&xa);printf(n\n ya= ”);scanfT%f”,&ya);printf(H\n xb= ”);scanf(H%fH,&xb);printf(H\n yb= ”);scanf(H%fH,&yb);dx=xb-xa;dy=yb-ya;/* if(abs(dx)>abs(dy)) */dex=l;dey=dy/dx;/* printf("dx=%f dy=%f dey=dy/dx= %f\n”,dx,dy,dey); *//*dey=dy/dx;*//*clrscr(); */cleardevice();setbkcolor(BLUE);putpixel(xa,ya,RED);for(k=l;k<=dx;k++)(xa=xa+dex;ya=ya+dey;/*putpixel(xa,xa+l,GREEN);*/putpixel(xa,floor(ya),RED); /* foor 取整函数 */delay(500);}getch(); /* qu yi zi hu,hui che hou jin xing xia yi bu */sl=0;for(k=l ;k<=400;k++){sl=sl+l;putpixel(5()0,si,GREEN);delay(450); /* ting liu 450 hao miao,chu xian dong hua xiao guo*/)settextstyle( 1,0,3);ou ttextxy (200,300, *1 duanzhiy ing' *);getch(); /* jie shu cheng xu */closegraph();return 0;}2、实验结果DDA算法运行结果:□ZhixianS. eze改进的Bresenham算法运行结果:□ZhixianS. eze中点算法运行结果:□2. eze四、实验结果分析1、 该程序实现了三种算法的直线段绘制分别是生成直线的DDA算法、改进的 Bresenham生成算法和中点算法2、 比较三种算法的结果:像素逼近效果由好到差依次为:B算法、DDA算法、中点算法执行速度由快到慢依次为: 中点算法、DDA算法、B算法通过对程序的分析与学习,使我学到了如何熟悉直线的生成算法,掌握直 线的绘制。通过应用基本函数,编写程序,然后才能使用一些基本的图形函数, 进行调用,编写程序,经过许多个步骤,编完之后应用TC软件进行调试,修改, 最终才能得到想要的结果。 关键词: 算法 直线 实现 图形 计算机 生成
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。