二维曲线的绘制工作一般可分为以下两步:第一是是依据某种算法计算出所绘图形的各点坐标值,并进行存储。这一步一般需要完成算法程序的编制;第二步是在所应用的点阵器件上根据算法程序所提供的点坐标,换算出点阵器件上显示点的位置,即显示缓冲区相应单元地址及其该单元的内数据的确定,从而在显示区域上组成所需要的显示图形。这一步需要完成绘点程序的编制。算法程序是通用的,绘点程序则需要根据应用点阵器件所配的显示控制的特性来编制。
曲线的绘制最终可以转化为直线的绘制,所以应先考虑绘制直线。绘制直线的算法种类较多,为了避免复杂的浮点运算,笔者采用整数数字微分分析法(INTEGER DDA)。先以(Xs,Ys)为起点,(XE,YE)为终点作直线,再使其斜率k=(YE-YS)/(XE-XS)。整数数字微分法的基本思想是回避了计算斜率k过程中的除法运算,应用ΔY=YE-YS和ΔX=XE-XS之间的关系,在保证ΔY≥0的条件下将斜率k分成四种情况,然后在每一种情况下用EER指明建立点位置与其实线的差距,以确定相应的作点规则,最后再将终点情况考虑进去。这四种情况为:
(1)k=0~1,此时有ΔY≥0,ΔX≥0,且ΔY≤ΔX关系成立。作点规则为:
在当前(X,Y)点处,若ERR<0,则在(X+1,Y)处缓点,且ERR=ERR+ΔY;
若ERR≥0,则在(X+1,Y+1)处绘点,且ERR=ERR+ΔY-ΔX。
然后将新的缓点坐标作为当前的(X,Y)点,而将所得到的ERR值作为该坐标点的偏差值。重复上述的工作直至X=XE为止。
(X,Y)的初始坐标值为(XS,YS),且ERR=0。
(2)k>1,此时有ΔY≥0,ΔX≥0,且ΔY>ΔX。作点规则为:
在当胶(X,Y)点处,若ERR<0,则在(X+1,Y+1)处缓点,且ERR=+ΔY-ΔX。
若ERR≥0,则在(X,Y+1)绘点,且ERR=ERR-ΔX。然后将新的绘点坐标作为当前(X,Y)点,而将所得到的ERR值作为该坐标点的偏差值,重复上述工作直至Y=YE为止。
(X,Y)的初始坐标值为(XS,YS),且ERR=0。
(3)当k=-1~0时,此时有ΔY≥0,ΔX<0,且 ΔY ≤ Δ 。作点规则为:
在当前(X,Y)点处,若ERR<0,则在(X-1,Y)处绘点,且ERR=ERR+ΔY;若ERR≥0,则在(X-1,Y)绘点,且ERR=ERR+ΔY+ΔY=ERR+ΔY- ΔX 。
然后将新的绘点坐标作为当前(X,Y)点,而所得的ERR值为该坐标点的偏差值,重复上述工作直至X=XE为止。
(X,Y)的初始坐标值为(Xs,Ys),且ERR=0。
(4)k<-1,有ΔY≥0,ΔX<0,且 ΔY > ΔX 。作点规则为:
在当前(X,Y)点处,若ERR<0,则在(X-1,Y+1)绘点,且ERR=ERR+ΔY+ΔY=ERR+ΔY- ΔX ;
若ERR≥0,则在(X,Y+1)绘点,且ERR=ERR+ΔY=ERR- ΔX 。
然后将新的绘点坐标作为当前的(X,Y)点,而所得到的ERR值为该点坐标点的偏差值,重复上述工作值至Y=YE为止。
(X,Y)点的初始坐标值为(XS,YS),且ERR=0。
应用MCS-51指令集编制整数数字微分法实用算法程序框图如图1所示。该程序可完成(0~255,0~255)范围内的任意直线绘制,且所作的直线在点阵液晶显示屏和微型打印机上显示的质量相当不错。
|