1. 程式人生 > >Bresenham演算法實現任意斜率直線繪製

Bresenham演算法實現任意斜率直線繪製

參考《計算機圖形學》 Donald.Hearn

書中給出了斜率k在0-1之間的推導過程

在k>=1時以y方向為單位步長遞增,此時有x=(y-b)/b;

d(low)=x-x(k)=( y(k+1)-b )/m-x(k);

d(upper)=x(k+1)-x=x(k)+1-( y(k+1)-b )/m;

p(k)=dx*(d(low)-d(upper))=2*dx*(y(k)+1-b)-2*dy*x(k)-dx;

可以推出

p(k+1)=p(k)+2*dx-2*dy(x(k+1)-x(k));

其中x(k+1)-x(k)的值取決於p(k)的符號

將直線方程式和斜率m=dy/dx帶入p(k)的表示式可以得出

p(0)=dy,由此可以寫出斜率大於1時的實現,

同理可以按此方法得出斜率在(-1,0)和斜率小於-1時的情況,或者可以根據對稱性得出