资源描述:
《计算机图形学实验二基本图形》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验二基本图形(元)生成技术(一)直线生成算法一、实验目的在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。所以,耑要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。本次实验的目的就是验证直线生成的三种扫描算法,并要求对基本算法进行扩充和改进,包括:利用VisualC++实现三种直线生成算法,验证算法的正确性;二、实验任务1.理解三种直线生成算法思想,写出实现程序;2.添加鼠标功能,实现交互式画直线程序;3.将10个像素作为步距单位,编出Bresenham算法的示例。三、基本知识
2、和实验步骤任务一:实现DDA画线程序实验步骤:1.建立一个DDALine的工程文件;2.添加ddalineO成员函数方法:在工作区中选择CLASSVIEW类窗U,右击CDDAlineView类,选择“addmemberfunction...”,定义如下的成员函数:voidddaline(CDC*pDC,intxO,intyO,intxl,intyl’COLORREFcolor);3.编写自定义的成员函数ddalineO程序voidCDDALineView::ddaline(CDC*pDC,intxO,intyO,intxl,intyl,COLORREFcolor){intlength,i;f
3、loatx,y,dx,dy;length=abs(xl-xO);if(abs(y1-y0)>length)length=abs(yl-yO);dx=(xl-xO)/length;dy=(y1-yO)/length;x=x0+0.5;y=y0+0.5;for(i=1;i<=length;i++)pDC->SetPixel((int)x,(int)y,color);x=x+dx;y=y+dy;}}1.编写OnDraw()函数voidCDDALineView::OnDraw(CDC*pDC){CDDALineDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//T
4、ODO:adddrawcodefornativedatahereddaline(pDC,100,100,400,100,RGB(255,0,0));ddaline(pDC,400,100,400,400,RGB(0,255,0));ddaline(pDC,400,400,100,400,RGB(0,0,255));ddaline(pDC,100,400,100,100,RGB(255,255,0));ddaline(pDC,100,100,400,400,RGB(255,0,255));ddaline(pDC,l00,400,400,100,RGB(0,255,255));}}2.编译、调试
5、和运行程序,查看程序结果。任务二、放大10倍后,算法演示程序先画出(100,100)到(600,400)大小为10的网格,然后从(100,100)以10为单位计算出直线上各个像素位置。步骤:1.建立DDA2Line工程;2.在OnDraw()幽数中画出网格,并调用DDA2Line()函数voidCDDA2LineView::OnDraw(CDC*pDC){CDDA2LineDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画网格intgi,gj;//画横线pDC->TextOut(90
6、,90,"(100,l00)");pDC-〉MoveTo(100,100);for(gj=100;gj<=400;gj=gj+10){pDC-〉MoveTo(1OO,gj);pDC->LineTo(600,gj);}//画竖线pDC-〉MoveTo(100,100);for(gi=100;gi<=600;gi=gi+10){pDC->MoveTo(gi,100);pDC-〉LineTo(gi,400);}pDC-〉TextOut(590,410,"(600,400)");//画出像素点DDA21ine(pDC,100,100,600,400,RGB(255,0,0));}1.添加DDA2Li
7、ne()成员函数方法:在工作区中选择CLASSVIEW类窗门,右击CDDAlineView类,选择“addmemberfunction...”,定义如下的成员函数:voidDDA2Line(CDC*pDC,intx0,intyO,intxl,inty1,COLORREFcolor);2.编写DDA2Line()函数voidCDDA2LineView::DDA21ine(CDC*pDC,intxO,intyO,