资源描述:
《基本光栅图形算法ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2、基本光栅图形算法数学表示的若干方法1)数学方程2)点集3)边界表示4)关系表示常用的图形对象线段圆多边形字符等一、直线在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。线段理想的是无数多的零面积的点构成。而在实际显示中,在光栅扫描显示器上,线段是由有限多的像素组成的,像素是有面积的。画一条从(x1,y1)到(x2,y2)的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化。而且除了水平、垂直和对角线上的线段,其他的线段像素并不一定能准确地落在线段上。最接近数学上的直线:生成的线要直:但实际选择最靠近直线的可寻址点来逼近
2、。理想的绘制绘制线段的要求绘制线段的要求起点和终点要准:在绘制线段的过程中由于受精度的影响,线段的终点与原终点有一个累积误差,导致线段的终点不准。绘制线段的要求粗细要均匀:由于选点不均匀,造成线段粗细不均匀,直观上反映出线段的亮度不均匀。光栅显示平面上,我们只能用二维光栅格网上尽可能靠近这条直线的象素点的集合来表示它。每个象素具有一定的尺寸,是显示平面上可被访问的最小单位,它的坐标x和y只能是整数,也就是说相邻象素的坐标值是阶跃的而不是连续的。实际绘制线段的笛卡儿斜率截距方程若其始坐标和终点坐标分别为:则斜率为截距为(1)(2)(3)显示直线的算法可以直线方程(1)、(2)和(3)为基础。1.
3、逐点比较法算法的基本思想:在绘制直线的过程中,每绘制一个点,就与原直线进行比较,根据比较的结果决定下一步的走向,这样一步一步逼近直线。保证要绘制的点尽可能的靠近直线而不发生远离直线的趋向。绘制思路由一个点到下一个点的走法是只在X方向或Y方向走一步。计算偏差‘K1K2设=tg-tg于是有1)=0,点在直线上;2)>0,点在直线上方;3)<0,点在直线下方。设偏差计算公式为:=tg-tg=偏差计算可以简化为根据计算出偏差,然后确定下一步的走向。初始:则=0;第一步:如果选择X方向,则若选择Y方向,则所以选择X方向走,则第一步选择(1,0)点处步数走X的偏差走Y的偏差最后选择0
4、00(0,0)1-57走X,至(1,0)2-102走Y,至(1,1)3-39走X,至(2,1)4-84走Y,至(2,2)5-111走X,至(3,2)6-66走X,至(4,2)7-111走Y,至(4,3)8-48走X,至(5,3)9-93走Y,至(5,4)10-210走X,至(6,4)11-75走Y,至(6,5)12010走X,至(7,5)起点(0,0)终点(7,5)XA=7YA=5绘制结果偏差递推公式1)时,走X方向一步,即2)时,走Y方向一步,即偏差递推公式以上讨论的是起点为原点,第一象限的情况,对于其他情况下的绘制直线的偏差计算和偏差判别,推导也很简单。Fi>=0Fi<01象限3象限X+1
5、X-1Fi+1=Fi-
6、YA
7、Y+1Y-1Fi+1=Fi+
8、XA
9、2象限4象限Y+1Y-1Fi+1=Fi-
10、XA
11、X-1X+1Fi+1=Fi+
12、YA
13、终点判别判别终点的方法:设立计数器,计数取X或Y方向的最大增量值(计长方向),在计长方向每走一步,计数器减1,直到计数器值为零为止。绘制直线2.DDA(DigitalDifferentialAnalyzer)数字微分该算法是建立在微分方程的基础上。由到的直线段满足的微分方程为:因此有则有令有此递归式的初值为直线的起点,这样,就可以用加法来生成一条直线。Voiddda_line(xa,ya,xb,yb,c){floatdelta_x,delta_y
14、,x,y;intdx,dy,steps,k;dx=xb-xa;dy=yb-ya;if(abs(dx)>abs(dy))steps=abs(dx);elsesteps=abs(dy);delta_x=(float)dx/(float)steps;delta_y=(float)dy/(float)steps;x=xa;y=ya;putpixel(round(x),round(y),c);for(k=1;k<=steps;k++){x+=delta_x;y+=delta_y;putpixel(round(x),round(y),c);}}DDA绘制的直线1/15;算法特点:该算法简单,实现容易,但由
15、于在循环中涉及实型数的运算,因此生成直线的速度较慢。3.Bresenham算法设直线从起点(x1,y1)到终点(x2,y2)。直线可表示为方程y=mx+b。其中b=y1-m*x1,m=本算法由Bresenham在1965年提出。算法的基本思想:每次迭代在增量最大方向上均走一步,其方向由增量的正负而定,另一方向上是否也走,取决于计算出来的点与直线上的点的误差,根据误差决定是否走一步。xi+1=xi+