资源描述:
《计算机图形学实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、计算机图形学实验报告学校:合肥工业大学姓名:学号:班级:实验二:直线的生成实验目的和要求理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力;编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。实验环境和工具•开发环境:VisualC++6.0•实验平台:Experiment_Frame_One(自制平台)实验结果程序代码:voidCExperiment_Fram
2、e_OneView::DDA(intX0,intY0,intX1,intY1){//----------实现DDA算法------------//intdx,dy,epsl,k;floatx,y,xIncre,yIncre;dx=X1-X0;dy=Y1-Y0;x=X0;y=Y0;if(abs(dx)>abs(dy))//max分两种情况,
3、1/espl
4、<=1和
5、1/espl
6、>=1epsl=abs(dx);elseepsl=abs(dy);xIncre=(float)dx/(float)epsl;yIncre=(float)dy/(float)epsl;for(k=0;
7、k<=epsl;k++){DrawPixel(int(x+0.5),(int)(y+0.5));//光栅化+0.5后四舍五入x+=xIncre;y+=yIncre;}}voidCExperiment_Frame_OneView::Mid_Bresenham(intX0,intY0,intX1,intY1){//-------请实现Mid_Bresenham算法-------///*intx,y,dx,dy,e;dx=X1-X0;dy=Y1-Y0;e=-dx;x=X0;y=Y0;while(x0){
8、y++;e-=2*dx;}}*/intdx,dy,d,UpIncre,DownIncre,x,y;//只考虑0X1)//判断正负{x=X1;X1=X0;X0=x;y=Y1;Y1=Y0;Y0=y;}dx=X1-X0;dy=Y1-Y0;d=dx-2*dy;//d=y[i]+0.5-k(x[i]+1)-b;d=dx-2*dy;x=X0;y=Y0;UpIncre=2*dx-2*dy;DownIncre=-2*dy;while(x<=X1){//若d<0和d>=0DrawPixel(x,y);x++;if(d<0){y++;d+=UpIncre;}else
9、d+=DownIncre;}}运行结果:DDA算法演示:中点BreshenHam算法演示:运行结果分析DDA算法:优点:与基本算法相比,在扫描过程中减少了浮点运算,提高了效率。 缺点:由于x与xd,y与yd必须用浮点来表示,且每一步都要进行四舍五入取整,不利于硬件实现,故效率有待提高。Bresenham算法:Bresenham算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素实验二:多边形扫描转换算法实验目的和要求理解多边形扫描转换的原理;掌握典型多边形扫描转换算法;掌握步处理、分析实验数据的能力;•编程实现基本X-扫描线转
10、换算法(必做);编程实现有效边表转换算法(选做)实验环境和工具•开发环境:VisualC++6.0•实验平台:Polygon_Conversion(自制平台)实验结果程序代码:VoidCPolygon_ConversionView::X_Scan_Line_Conersion(intVertices[][2],intVertexNum){if(VertexNum<3)return;vectorcross;inti,j,yscan,ymin,ymax;intx1,x2,y1,y2,x,y;inttmp;ymax=0xffffffff;ymin=0x7fffffff
11、;for(i=0;iymax)ymax=Vertices[i][1];}for(yscan=ymin;yscan<=ymax;++yscan){for(i=0;i