资源描述:
《图形学实验报告1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、西华大学计算机系学生上机实践报告西华大学计算机系上机实践报告课程名称:计算机图形学年级:上机实践成绩:指导教师:罗晓辉姓名:上机实践名称:学号:上机实践日期:上机实践编号:组号:上机实践时间:一、目的理解直线生成的基本原理,掌握几种基本的直线生成算法,利用C++实现直线生成的DDA画线算法、中点画线算法、Bresenham画线算法。二、内容与设计思想内容:(1)了解直线的生成原理。(2)掌握几种基本的直线生成算法:DDA画线算法、中点画线算法、Bresenham画线算法。(3)利用C++分别实现
2、直线的算法,在屏幕上任意生成一条直线。设计思想:(1)熟悉教材关于直线的生成原理。(2)仿照教材的原理,编写代码,分别用三种方法实现直线的生成。(3)调试、编译、生成程序。三、使用环境VC++四、核心代码及调试过程DDA画线算法:voidCGView::Line_DDA(longp1x,longp1y,longp2x,longp2y,CDC*pDC){inti;if(p1x==p2x){//为竖线if(p1y<=p2y){for(i=p1y;i<=p2y;i++)pDC->SetPixel(p1
3、x,i,m_lPenColor);//在当前窗口画点}else{第6页共6页西华大学计算机系学生上机实践报告for(i=p2y;i<=p1y;i++)pDC->SetPixel(p1x,i,m_lPenColor);//在当前窗口画点}return;}//为横线if(p1y==p2y){if(p1x<=p2x){for(i=p1x;i<=p2x;i++)pDC->SetPixel(i,p1y,m_lPenColor);//在当前窗口画点}else{for(i=p2x;i<=p1x;i++)pDC
4、->SetPixel(i,p1y,m_lPenColor);//在当前窗口画点}return;}//为斜线floatm=(p2y-p1y)*1.0/(p2x-p1x);floatfTemp;if(abs(m)<=1){if(p1xSetPixel(i,fTemp+=m,m_lPenColor);//在当前窗口画点}else{fTemp=p2y-m;for(i=p2x;i<=p1x;i++)第6页共6页西华大学
5、计算机系学生上机实践报告pDC->SetPixel(i,fTemp+=m,m_lPenColor);//在当前窗口画点}return;}if(p1ySetPixel(fTemp+=1/m,i,m_lPenColor);//在当前窗口画点}else{fTemp=p2x-1/m;for(i=p2y;i<=p1y;i++)pDC->SetPixel(fTemp+=1/m,i,m_lPenColor);//在当前
6、窗口画点}}中点画线算法:voidCGView::Line_MidPoint(longx1,longy1,longx2,longy2,CDC*pDC){intx,y,a,b,delta1,delta2,d;a=y1-y2;b=x2-x1;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x1;y=y1;pDC->SetPixel(x,y,m_lPenColor);while(x7、大学计算机系学生上机实践报告d+=delta1;}pDC->SetPixel(x,y,m_lPenColor);}}Bresenham画线算法voidCGView::Line_Bresenham(longx1,longy1,longx2,longy2,CDC*pDC){intdx,dy,x,y,d,d1,d2,inc,tmp;dx=x2-x1;dy=y2-y1;if(dx*dy>=0)inc=1;elseinc=-1;if(abs(dx)>abs(dy)){if(dx<0){tmp=x1;x1=
8、x2;x2=tmp;tmp=y1;y1=y2;dx=-dy;dy=-dy;}d=2*dy-dx;d1=2*dy;d2=2*(dy-dy);x=x1;y=y1;pDC->SetPixel(x,y,m_lPenColor);while(xSetPixel(x,y,m_lPenColor);}}else{if(dy<0){tmp=x1;x1=x2;x2=tmp;tmp