DDA 和 Bresenham 直線繪製演算法的區別


計算機圖形學領域是一個不斷發展且廣闊的領域。它涉及各種概念和思想,其中“繪製直線”是使用圖形媒體最基本的任務。

在螢幕上繪製直線時,遵循兩種演算法規則。它們是 DDA(數字微分分析儀)演算法規則和 Bresenham 直線演算法。

DDA 和 Bresenham 演算法都是用於近似線段長度的計算過程的示例。

什麼是 DDA?

DDA 在計算機圖形學中的主要目的是繪製直線,它在預測下一個畫素的值時使用實數值。DDA 是“數字微分分析儀”的縮寫。

讓我們考慮第一個畫素的值為 (X0, Y0) (X0, Y0),並將畫素的值 (X1, Y1) 作為目標 (X1, Y1)。

在本文中,我們將學習如何使用已知畫素值 (X0, Y0) (X0, Y0) 計算目標畫素值。

因此,讓我們舉一個例子,看看如何使用 DDA 計算目標點的畫素值。

步驟 1

現在我們有了輸入 (X0, Y0) (X0, Y0),我們需要確定直線是否垂直於 X 軸或 Y 軸。為了找到這一點,讓我們首先計算起點和終點之間畫素值的差值。

dx = X1 - X0
dy = Y1 - Y0

步驟 2

接下來,開始沿 X 軸繪製直線。當且僅當“dx”的值為零時,我們應該繪製一條平行於 Y 軸的直線。這是用計算機語言表達的實際計算。

if (absolute (dx) > absolute (dy))
   Steps = absolute (dx);
else
   Steps = absolute (dy);

步驟 3

為了繪製直線,需要分別確定“x”座標和“y”座標的實際畫素值。

X increment = dx / (float) steps;
Y increment = dy / (float) steps;

步驟 4

這是需要計算的內容,直到我們到達目標畫素。在計算過程中,DDA 方法會將畫素值向下舍入到最接近的整數。我們一直在討論的程式碼示例可以在這裡找到。

for (int v=0; v < Steps; v++) {
   x = x + X increment;
   y = y + Y increment;
   putpixel (Round(x), Round(y));
}


什麼是 Bresenham 演算法?

在計算機圖形學領域,Bresenham 開發的演算法是最早開發的用於估計線段的方法之一。它用於定義可以透過其近似繪製直線的各種位置。然後可以從這些點形成線。絕大多數人使用它在點陣圖圖形中建立簡單的幾何形狀。

與 DDA 在其計算過程中使用乘法和除法相反,Bresenham 方法僅依賴於加法和減法來完成其任務。這意味著它使用簡單的計算,從而節省了時間並提高了效率。此外,它非常精確和準確,使其成為計算值的最佳方法之一。它允許最佳化,並且與其他選項相比也相當便宜。

該演算法在各種圖形晶片和繪圖儀應用程式中得到廣泛使用。因此,它成為許多軟體圖形庫的基礎。許多人利用它的擴充套件來建立不同型別的形狀,例如球體和圓形。由於計算非常簡單,它甚至被納入某些圖形卡上執行的軟體中。

儘管如此,自從 1962 年發現以來,該演算法已經進行了許多修改。過去,它只能繪製簡單的線條和形狀。但是,在當今時代,該演算法也可以用於繪製貝塞爾曲線、立方體和橢圓。讓我們來看看該演算法的工作原理。

  • Bresenham 開發的演算法假設初始畫素座標為 (xa+1, ya)。

  • 下一個畫素值自動計算為 (xa+1, ya+1),其中 an 是增量值,演算法透過新增或刪除它建立的方程式來計算它。

DDA 和 Bresenham 演算法的區別

下表突出顯示了 DDA 和 Bresenham 演算法之間的主要區別 -

比較依據
DDA
Bresenham 演算法
方法
僅使用乘法和除法運算。
在此過程中僅使用加法和減法
效率
與 Bresenham 直線演算法相比,DDA 方法效率不高。
儘管它比 DDA 演算法更有效。
速度
Bresenham 直線演算法的計算速度明顯高於 DDA 演算法。
但是,Bresenham 直線演算法的計算速度明顯快於 DDA 演算法。
精度
它沒有很高的準確度或精度。
它非常準確和精確。
複雜度
為了完成其任務,它依賴於複雜的計算。
為了執行其任務,它執行基本的計算。
價格
它的成本很高。
它屬於較低的價格範圍。
最佳化
它阻止最佳化發生。
它允許最佳化。

結論

在計算機圖形學領域,DDA 和 Bresenham 方法的功能非常相似。它們都可以用來建立線段以及其他各種事物。

Bresenham 演算法僅使用加法減法來實現此目標,而 DDA 則依賴於乘法除法。DDA 是一個更復雜的系統,效率也較低,而且不夠精確。另一方面,Bresenham 開發的方法簡單、實用且相當準確。

兩者之間另一個顯著區別是,儘管 DDA 的使用受到限制,但它通常最終會變得更昂貴。因此,對於更大的資料集,它可能不是最佳解決方案。另一方面,Bresenham 開發的方法可用於大型資料集,同時具有更高的成本效益。

更新於: 2022-07-28

12K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告