欢迎来到天天文库
浏览记录
ID:9367415
大小:179.00 KB
页数:6页
时间:2018-04-29
《计算机图形学 直线的生成算法的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二直线的生成算法的实现班级08信计学号58姓名陈瑞雪分数一、实验目的和要求:1、掌握直线的生成算法的基本知识2、熟悉生成直线的DDA算法,Bresenham算法,基于中点算法3、掌握各种算法的生成原理二、实验内容:1、编程实现DDA算法,Bresenham算法,基于中点算法完成直线生成2、分析对比各种算法的基本思想和运行效率3、输出要求:每种算法要分别完成直线的生成三、实验结果分析1、该程序实现了三种算法的直线生成2、比较三种算法的结果:像素逼近效果由好到差依次为:B算法、DDA算法、中点算法执行速度由快到慢依次为:中点算法、DDA算法、B算法1、DDA算法程序代码:#inc
2、lude#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-x1)>abs(y2-y1)?abs(x2-x1):abs(y2-y1);x=(f
3、loat)x1;y=(float)y1;cx=(float)(x2-x1)/steps;cy=(float)(y2-y1)/steps;for(inti=0;i4、B(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()%256));}//按任意键退出getch();closegraph();}运行结果:2、Bresenham算法程序代码:#include#inclu5、de#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>x1?1:-1;ints2=y2>y1?1:-1;boolinterchange=false;//默认不互换dx、dyif(dy>dx)//当斜率大于1时,dx、dy互换{inttemp=dx;dx=dy;d6、y=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(!interchange)x+=s1;//当斜率<1时,选取x为步长elsey+=s2;//当斜率>1时,选取y为步长p+=2*dy;}}//主函数voidmain(){initgraph(640,480);intc;doublea;intx,y,r=2007、;for(a=0;a
4、B(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()%256));}//按任意键退出getch();closegraph();}运行结果:2、Bresenham算法程序代码:#include#inclu
5、de#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>x1?1:-1;ints2=y2>y1?1:-1;boolinterchange=false;//默认不互换dx、dyif(dy>dx)//当斜率大于1时,dx、dy互换{inttemp=dx;dx=dy;d
6、y=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(!interchange)x+=s1;//当斜率<1时,选取x为步长elsey+=s2;//当斜率>1时,选取y为步长p+=2*dy;}}//主函数voidmain(){initgraph(640,480);intc;doublea;intx,y,r=200
7、;for(a=0;a
此文档下载收益归作者所有