2011-01-12 43 views
1

我研究過布氏線算法每隔文章,只講變量Bresenham線算法中的決策變量是如何計算出來的?

Pi = dx * (d1 - d2) 

的決定來自哪裏這個mathematical term的想法?

我的意思是,以dx * (d1 - d2)作爲決策變量背後的想法是什麼?

爲什麼不是d1 - d2只?

Here is one of the articles.

+0

不知道文章很難說如何使用決策變量。這可能是算法的另一部分的名稱,並非所有實現都使用該名稱。例如,http://en.wikipedia.org/wiki/Bresenham's_line_algorithm沒有討論決策變量。 – chubbsondubs 2011-01-12 16:24:42

回答

2

因爲我們在d1-d2關心的唯一信息是符號,我們可以通過任何正值乘它,而不是失去任何東西。我們實際上並不知道d1d2立即執行該算法的價值,並且必須根據我們所知道的事情計算它們的值。但是,這種計算除以dX,並且劃分很慢並且如果可能的話應該避免。碰巧,dX總是正數,因此我們可以將d1d2乘以dX以刪除除法運算而不會丟失我們正在查找的信息。

1

Bresenham算法的工作重點是切成45度截面的圓的一個部分,只解決其中的一個問題。通過考慮可以從點x1,y1(即傳入的第一個參數)繪製的所有線來形成該圓。然而,因爲它只關注單個部分(即,x在正方向上上升得比y快),以便將解推廣到可能形成的所有線上,所以必須將該圓的所有其他部分轉換成一個部分它知道如何繪製圓圈。通常情況下,您會看到一些初始化代碼,該算法的頂部確保x1,y1 < x2,y2並交換它們(如果不成立)。根據所需處理的行數,這可以有效地將圓圈切成兩半。所以現在只有4個不同的斜坡必須由代碼的下一部分來處理。決策變量是一個優化算法,算出算法落入4個部分中的哪一部分。我們總是沿正X方向走,但問題是我們的上升/下降速度是否快於X(第1 & 4 - 順時針開始位置),或者X移動的速度比Y快(第2部分& 3)。

決策變量讓我們不必在循環的每次迭代中都做if語句。