(3)Bresenham算法
——>【畫線算法不依賴於直線方程】
——>【提供了一個更一般的算法,不僅有好的效率還有更廣泛的適用范圍】
算法思想:通過各行、各列象素中心構造一組虛擬網格線,按照直線起點到終
點的順序,計算直線與各垂直網格線的交點,然后根據誤差項的符號確定該列
象素中與此交點最近的象素。
每次x+1,y的遞增(減)量為0或1,它取決於實際直線與最近光柵網格點的距離,這個距離最大誤差為0.5。
誤差項d的初值為0,d=d+k,一旦d>=1,就把它減去1,保證d的相對性,且在0、1之間。
將算法效率提高——>也處理成整數加法:
改進一:令e=d-0.5
Bresenham算法很像DDA算法,都是加斜率,
但DDA算法是每次求一個新的y以后取整來畫,
而Bresenham算法是判斷符號來決定上下兩個點。
所以Bresenham算法集中了DDA和中點兩個算法的優點,而且應用范圍廣泛。
【小結】計算機科學問題的核心就是算法。
把一個含乘法和一個加法的普通直線算法,是如何通過改進和完善其性能,最終變成整數加法的一個精彩過程。