CG Bresenham演算法 畫直線與圓

2021-08-17 19:20:52 字數 1404 閱讀 2451

@(cg)

bresenham演算法的意義在於避免了浮點數運算,無論是畫直線還是畫圓,都提高了效率。

本文參考了網上的資料後,根據自己作業的需要,完成了bresenham畫直線和畫圓的演算法,分享出來希望能幫助到需要的人、。

演算法步驟:

參考:這篇blog的**有點bug,重點在於是遞增x還是y的選擇和方向的選擇,我重寫的**如下:

**輸入2個點的座標,然後使用bresenham畫線演算法,並將得到的點都存入乙個vector中返回。

vector

bresenham(int x0, int y0, int x1, int y1) else

x+= direct_x;

}} else else

y+= direct_y;}}

}

參考:

原理這篇blog解釋得非常清楚了,bresenham的畫圓演算法是由中點畫圓演算法優化得到的,其重點將圓分成了8區間,每次得到乙個區間的點,然後根據對稱性得到其他的7個點。

我的test**如下:

**輸入圓心的座標和半徑,然後使用bresenham畫圓演算法,並將得到的點都存入乙個vector中返回。

#include 

#include

#include

using

namespace

std;

void getallpoints(int x0, int y0, int x, int y, vector

&points)

vector

bresenhamcircle(int x0, int y0, int r) else

x++;

getallpoints(x0, y0, x, y, points);

}return points;

}int main()

使用opengl3.3+ imgui,能夠根據得到的包含點的vector轉換為opengl需要的vertices,使用opengl的函式,最後將點畫出來。

用bresenham畫直線演算法畫出來3條直線構成三角形:

用bresenham畫圓演算法將圓畫出來:

完整的**還整合了三角形的光柵化,為三角形著色,參考我的另外一篇blog:

完整的**參考我的github:

python怎麼畫線 python怎麼畫直線

tkinter是python的標準 gui 庫。python使用tkinter可以快速的建立gui應用程式。建立乙個畫圖用的畫布 如果要畫圖的話,我們就需要乙個不同的要素 乙個 canvas 畫布 物件,也就是canvas類的物件 由tkinter模組提供 當我們建立乙個畫布時,我們給python傳...

畫直線演算法

畫直線演算法 前段時間做了一下光柵直線生成演算法的研究,並且在vc下實現了dda 演算法 bresenham 演算法 對稱演算法 兩步演算法 及四步演算法。這裡給個總結,希望和大家交流。主要研究的演算法主要有 dda演算法 bresenham 演算法 對稱演算法 兩步演算法 及四步演算法,此外還對自...

DDA演算法畫直線

畫直線的 適合所有斜率的直線 void cmyview linedda cdc pdc,int x0,int y0,int x1,int y1,colorref clr while y ymax return if y0 y1 水平線 while x xmax return double dx x1...