不失一般性,討論bresenham演算法繪製(0,0)到(dx,dy)的直線,其演算法為:
acc = acc0;
y = 0;
for (x = 0; x <= dx; x++)
}其中dy*dx = dx*dy。
用數學表示式描述為:
y = ceil( (acc0+x*dy) / dx )
而反向掃瞄演算法為:
acc = acc1;
y = dy;
for (x = dx; x >= 0; x--)}
用數學表示式描述為:
dy - y = ceil( (acc1+(dx - x)*dy) / dx )
於是y = dy - ceil( (acc1+(dx - x)*dy) / dx )
= -ceil( (acc1+(dx - x)*dy) / dx - dy )
= -ceil( (acc1 - x*dy) / dx ) 由於
:-ceil(b) = ceil(-b) + 1 * (b == ceil(b))
於是:-ceil(m/n) = ceil( ((-m) + n-1) / n ),其中m是整數,n是正整數。
因此:y = ceil( (-(acc1 - x*dy) + dx - 1) / dx)
= ceil( ((dx-1-acc1) + x*dy) / dx)
可見,當acc1 + acc0 = dx - 1時,兩個方向上的掃瞄結果相同。
Bresenham掃瞄的雙向等效性討論
不失一般性,討論bresenham演算法繪製 0,0 到 dx,dy 的直線,其演算法為 acc acc0 y 0 for x 0 x dx x 其中dy dx dx dy。用數學表示式描述為 y ceil acc0 x dy dx 而反向掃瞄演算法為 acc acc1 y dy for x dx ...
直線掃瞄 Bresenham演算法
計算機掃瞄直線原理 直線方程 y kx b y kx b 0 在第一象限畫線 x0,y0 x1,y1 當前點pi xi yi 則下一點必為p1 xi 1,yi 或 p2 xi 1,yi 1 理想直線靠近哪個點,就取那個點。推導 令f x,y y kx b,那麼理想直線上方有f 0,下方f 0.取p1...
計算機掃瞄直線Bresenham演算法
計算機掃瞄直線原理 直線方程 y kx b y kx b 0 在第一象限畫線 x0,y0 x1,y1 當前點pi xi yi 則下一點必為p1 xi 1,yi 或 p2 xi 1,yi 1 理想直線靠近哪個點,就取那個點。推導 令f x,y y kx b,那麼理想直線上方有f 0,下方f 0.取p1...