资源描述:
《计算机图形学 直线的生成算法的实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验二直线的生成算法的实现班级08信计学号58姓名陈瑞雪分数一、实验目的和要求:1、掌握直线的生成算法的基本知识2、熟悉生成直线的DDA算法,Bresenham算法,基于中点算法3、掌握各种算法的生成原理二、实验内容:1、编程实现DDA算法,Bresenham算法,基于中点算法完成直线生成2、分析对比各种算法的基本思想和运行效率3、输出要求:每种算法要分别完成直线的生成三、实验结果分析1、该程序实现了三种算法的直线生成2、比较三种算法的结果:像素逼近效果由好到差依次为:B算法、DDA算法、中点算法执行速度由快到慢依次为:中点算法、DDA算
2、法、B算法1、DDA算法程序代码:#include#include#include#include//四舍五入intRound(floatx){return(int)(x<0?x-0.5:x+0.5);}//使用DDA算法画任意斜率的直线(包括起始点,不包括终止点)voidLine_DDA(intx1,inty1,intx2,inty2,intcolor){floatx,y;//当前坐标点floatcx,cy;//x、y方向上的增量intsteps=abs(x2
3、-x1)>abs(y2-y1)?abs(x2-x1):abs(y2-y1);x=(float)x1;y=(float)y1;cx=(float)(x2-x1)/steps;cy=(float)(y2-y1)/steps;for(inti=0;i4、ed)time(NULL));for(intx=-320;x<320;x+=15){Line_DDA(0,0,320,x,RGB(rand()%256,rand()%256,rand()%256));Line_DDA(0,0,x,240,RGB(rand()%256,rand()%256,rand()%256));Line_DDA(0,0,-320,x,RGB(rand()%256,rand()%256,rand()%256));Line_DDA(0,0,x,-240,RGB(rand()%256,rand()%256,rand()%25
5、6));}//按任意键退出getch();closegraph();}运行结果:2、Bresenham算法程序代码:#include#include#include#definePI3.14//使用Bresenham算法画任意斜率的直线(包括起始点,不包括终止点)voidLine_Bresenham(intx1,inty1,intx2,inty2,intcolor){intx=x1;inty=y1;intdx=abs(x2-x1);intdy=abs(y2-y1);ints1=x2
6、>x1?1:-1;ints2=y2>y1?1:-1;boolinterchange=false;//默认不互换dx、dyif(dy>dx)//当斜率大于1时,dx、dy互换{inttemp=dx;dx=dy;dy=temp;interchange=true;}intp=2*dy-dx;for(inti=0;i=0){if(!interchange)//当斜率<1时,选取上下象素点y+=s2;else//当斜率>1时,选取左右象素点x+=s1;p-=2*dx;}if(!in
7、terchange)x+=s1;//当斜率<1时,选取x为步长elsey+=s2;//当斜率>1时,选取y为步长p+=2*dy;}}//主函数voidmain(){initgraph(640,480);intc;doublea;intx,y,r=200;for(a=0;a8、Bresenham(320,240,x,y,RGB(0,255,0));}getch();closegraph();}运行结果:3、基于中点算法画任意斜率的直线的程序代码:#include