計算機圖形學 之 中點畫線算法

之前我們使用DDA來畫線, 這種算法每步只進行一個加法運算,那麼加法運算李裏邊有浮點數, 我們是否還可以再提高效率 也就是把浮點運算變成整數加法, 或者改變直線方程類型

中點畫線算法

利用直線的一般方程 Ax + By + C = 0
在這裏插入圖片描述
對於一般直線方程,
對於直線的點, 那麼 Ax + By + C = 0
對於直線上方的點, 那麼 Ax + By + C > 0
對於直線下方的點, 那麼 Ax + By + C < 0

每次在最大位移方向走一步, 另一個方向走還是不走,取決於中點誤差的判斷

假設 0 <= |k| <= 1. 因此,每次在x方向+1, y方向 是否加一需要作出判斷
在這裏插入圖片描述
對於該直線, xi的位置則是 取pi, 因爲交點在 yi 到y (i+1) 的中點的下方, 下一個點則是取 pu 這個點, 因爲交點在中點上方

至於如何判斷中點是在直線的上方還是下方
我們就把中點座標帶入到直線方程判斷是否大於零, 假設中點座標是m, 那麼就是判斷
di = Amx + Bmy +C 的大小, 也就是

di = A(xi + 1) + B (yi + 0.5) + C
在這裏插入圖片描述

中點畫線算法需要 四個加法,兩個乘法,似乎效率也並沒有多高

增量計算

1. d < 0

在這裏插入圖片描述
在這裏插入圖片描述
推導可得, d1 = d0 + A + B

2. d >= 0

在這裏插入圖片描述
推導 d1 = d0 + A

3. 計算初始值d0

在這裏插入圖片描述
在這裏插入圖片描述
d0 = A + 0.5B
由於這裏還是有0.5這個計算, 而且我們只需要判斷d的正負號, 所以我們可以用2d來代替d計算
也就是2d0 = 2A + B這樣就全都是整數了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章