资源描述:
《图形学课设实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验项目名称:图形编程基础与图形学大作业框架一部分:实验预习报告实验目的:设计课程设计的框架,熟悉和使用设计的计算机语言(VB语言)。设计菜单栏,添加pictureBox和command等各种控件,并在菜单栏设计出子菜单。使用DDA算法和中点Bresenham算法画出简单的直线。实验意义:添加各个控件,设计出课程设计的主要框架,便于为后面的课程设计。接受基本图形生成算法,熟悉直线的扫描转换。实验的基本原理和方法:DDA算法:运用DDA算法画出斜率各不同的直线,包括大于-1小于1、等于1,大于1,小于-1,无穷大。设计思路已知过端点P0(x0,y0),P1(x1,y1)的直
2、线段L:y=kx+b,直线斜率为,这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。计算yi+1=kxi+1+b=kxi+b+kDx=yi+kDx当Dx=1;yi+1=yi+k即:当x每递增1,y递增k(即直线斜率);注意上述分析的算法仅适用于
3、k
4、≤1的情形。在这种情况下,x每增加1,y最多增加1。当
5、k
6、>1时,必须把x,y地位互换Dimx0AsSingle,x1AsSingle,y0AsSingle,y1AsSingle,XAsSingle,YAsSingleDimepsAsSingle,iAsSingle,kAsSingle,dxAsSingle
7、,dyAsSinglex0=Text1.Texty0=Text2.Textx1=Text3.Texty1=Text4.Textdx=x1-x0:dy=y1-y0k=dy/dxX=x0:Y=y0If(Abs(dx)>Abs(dy))Theneps=Abs(dx)Elseeps=Abs(dy)dx=CSng(dx)/CSng(eps)dy=CSng(dy)/CSng(eps)EndIfFori=0Toepsi=i+1form1.Showform1.Picture1.PSet(Int(X+0.5),Int(Y+0.5))X=X+dxY=Y+dyNexti运行结果:中点Brese
8、nham算法画直线运用中点算法画出斜率各不同的直线,包括大于-1小于1、等于1,大于1,小于-1,无穷大。中点画线算法的原则是:如下图所示,但斜率K<1时,选定一个点之后,再计算中点M。如果M>0,这线更靠近E点,下一点选择为E点。反之选择NE点。首先:f(x,y)=ax+by+c=0,且 y=dy/dx*x+B, so:f(x,y)=dy*x-dx*y+Bdx=0so:a=dy,b=-dx,c=Bdx.假设,已经选定P点,应用中点法则选择下一点是,我们只要计算f(x+1,y+1/2),并考察是正数还是负数。我们定义d=f(x+1,y+1/2)=a(x+1)+b(y+1/
9、2)+c.这样,对于d>0,d<0,我们只要选择NE点和E点就可以了。这边假设选定为E点,那么中点M的位置怎么变化和d的值如何变化呢?显然M就沿着x轴递增一步。此时:d1=f(x+2,y+1/2)从d1中减去d,可以得到一个增量差。d1=a=dy。同理:如果选定下一点为NE点,d2=a+b=dy-dx。基于上面的讨论,增量的中点技术可以概括为:在每一步,我们根据上一步所得到的增量的符号去选择下一个像素点。然后根据说选择的像素,判定变量增加相应的增量差d1或d2。对于初始值,我们选择第一个端点为(x0,y0)。则M为(x0+1,y+1/2).f(x0+1,y0+1/2)=f
10、(x0,y0)+a+b/2. 故:d0=a+b/2=dy-dx/2为去掉d0中的小数,我们对d0进行放大。(在方程两边同乘于2)d0=2*dy–dxd1=2*dyd2=2*(dy-dx)中点Bresenham算法相应代码如下:Dimx0AsSingle,x1AsSingle,y0AsSingle,y1AsSingle,dAsSingle,dxAsSingle,dyAsSingle,XAsSingle,YAsSinglex0=Text1.Texty0=Text2.Textx1=Text3.Texty1=Text4.TextIfx0>x1ThenX=x1:x1=x0:x0=X
11、Y=y1:y1=y0:y0=YEndIfX=x0Y=y0dx=x1-x0dy=y1-y0d=dx-2*dyDoWhile(X<=x1)form1.Showform1.Picture1.PSet(X,Y)X=X+1If(d<0)ThenY=Y+1d=d+2*dx-2*dyElsed=d-2*dyEndIfLoop运行结果:第三部分:结果和结论实验结果分析:使用这两种不同的方法画直线时,在一定范围内,会画出两条不重合的直线,这是因为俩种算法之间存在误差,而误差是避免不了的,所以会出现直线不重合的情况,算法有待改进。实验二名称:图元