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...