Bresenham 畫線演算法

2021-05-08 08:25:53 字數 1433 閱讀 5813

bresenham 畫線演算法是由bresenham提出的一種精確而有效的光柵線生成演算法,該演算法僅僅使用了

整數的增量來實現的。

bresenham演算法將對整形引數的符號檢測,整形引數的值比於實際險段之間的偏量。

bresenham演算法內容

對於直線方程 y = kx + b;

a,0< 斜率 < 1 時候的演算法

1,輸入線段的兩個端點point1和point2,並且儲存到point1(x1,y1)和point2(x2,y2)中;

2,將point1載入楨快取,繪畫第乙個起始點;

3,計算常量△x、△y、2△y和2(△y-△x),並且獲得乙個決策引數的第乙個值:p = 2△y - △x;

4,從n = 0開始,在沿線經過每個xn處,進行下面的監測:

如果pn< 0, 下乙個點繪製的是(xn+1,yn),並且pn+1= pn + 2△y

如果p0>= 0 ,下乙個點繪製的是(xn+1,yn+1),並且pn+1 = pn + 2(△y-△x)

5,重複執行△x-1次步驟4;

關於在c++中的演算法如下例項:

#include

using namespace std;

void bresenham(int x1,int y1,int x2,int y2){

int dx = x2 - x1;//△x

int dy = y2 - y1;//△y

int p = (2*dy) - dx ; //p = 2△y - △x

int dobdy = 2* dy ; // 2 △y

int dobd = 2*(dy - dx) ; // 2(△y - △x)

int pointx,pointy;

//設定兩個臨時用來顯示位置的變數

if( x1 > x2){ //判斷線段的方向

pointx = x2;//起始座標x

pointy = y2;起始座標y

x2 = x1;

else{

pointx = x1;//起始座標x

pointy = y1;//起始座標y

//達因第乙個起始點

cout<<"point: x:"if(p < 0){

p += dobdy;

else{

pointy++;

p += dobd;

cout<<"point: x:"//繪畫線段(2,2點到(60,50)需要的點

bresenham(20,10,30,18);

return 0;

b,斜率 k = 1 或這斜率 k = 0 時候的演算法

對於斜率=0或者斜率=1時候,不需要通過演算法直接的對於其中單一座標變數進行處理就可以。

c, 斜率 k < 0 的情況演算法

將起始點和中止點座標point1和point2交換,可以轉化到斜率為0和1之內的演算法去實現。

Bresenham畫線演算法

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

Bresenham 畫線演算法

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

Bresenham 畫線演算法

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