Bresenham掃瞄的雙向等效性討論

2022-04-06 05:19:29 字數 751 閱讀 1485

不失一般性,討論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...