改進的Bresenham演算法

2021-07-30 23:47:45 字數 1390 閱讀 1949

這裡不仔細講原理,只是把我寫的演算法發出來,跟大家分享下,如果有錯誤的話,還請大家告訴我,如果寫的不好,也請指出來,一起討論進步。

演算法步驟:

(1) 輸入直線的兩端點p0 (x0, y0)和p1 (x1, y1)。

(2) 計算初始值dx, dy, e = -dx, x = x0, y = y0。

(3) 繪製點 (x, y)。

(4) e更新為e+2 * dy。判斷e的符號,若e > 0, 則(x, y)更新為(x+1, y+1), 同時將e更新為e-2*dx;否則(x, y)更新為(x+1, y)。

(5) 當直線沒有畫完時,重複步驟(3)和(4)否則結束。

水平、垂直和|k| = 1的直線可以直接裝入幀緩衝儲存器面無須進行畫線演算法處理。下面是我的演算法,如有錯誤請指出。

#include void init (void)

void drawline (int x1, int y1, int x2, int y2)

glend ();

} // if (y1 < y2)

else

glend ();

} } // if (x1 == x2)

else if (y1 == y2) // k = 0

glend ();

} // if (x1 < x2)

else

glend ();

} }else

x = x1;

y = y1;

dx = x2 - x1;

dy = y2 - y1;

// k = 1

if (dx == dy)

glend ();

} else if (dx == -dy) // k = -1

glend ();

} else if (dy > dx) // k > 1

}glend ();

} else if (dy > 0) // 0 < k < 1

}glend ();

} else if (-dy < dx) // 0 > k > -1

}glend ();

} else if (-dy > dx) // k < -1

}glend ();

} }}void display (void)

void reshape (int w, int h)

else

glmatrixmode (gl_modelview);

glloadidentity ();

}void keyboard (unsigned char key, int x, int y)

}int main (int argc, char ** argv)

Bresenham畫線演算法

bresenham畫線演算法 bresenham演算法是計算機圖形學領域使用最廣泛的直線掃瞄轉換演算法。仍然假定直線斜率在0 1 之間,該方法類似於中點法,由乙個誤差項符號決定下乙個象素點。演算法原理如下 過各行各列象素中心構造一組虛擬網格線。按直線從起點到終點的順序計算直線與各垂直網格線的交點,然...

Bresenham演算法畫圓

下面先簡要介紹常用的畫圓演算法 bresenham演算法 然後再具體闡述筆者對該演算法的改進。乙個圓,如果畫出了圓上的某一點,那麼可以利用對稱性計算餘下的七段圓弧 plot x,y plot y,x plot y,x plot x,y plot x,y plot y,x plot y,x plot ...

Bresenham 畫線演算法

bresenham 畫線演算法是由 bresenham 提出的一種精確而有效的光柵線生成演算法,該演算法僅僅使用了 整數的增量來實現的。bresenham 演算法將對整形引數的符號檢測,整形引數的值比於實際險段之間的偏量。bresenham 演算法內容 對於直線方程 y kx b a 0 斜率 1 ...