直線繪製演算法

2021-06-18 19:04:09 字數 1219 閱讀 1547

點在計算機中是組成圖形的最基本元素,我們幾何基本圖形的繪製是乙個個畫素點按照一定規則排列而成的組成的。而複雜的圖形是有基本幾何圖形組成的。所以基本圖形的繪製演算法,是學習計算機圖形學的基礎和關鍵。基本圖形包括:直線,矩形,三角形

直線是圖形中最常見的,在解析幾何中,二維座標系中的直線的表示式是:y=k*x+b.

由於顯示器顯示圖形是畫素點組成的,x軸座標和y軸座標只能用整數表示。所以,不能可能每個點都滿足直線表示式y=k*x+b,在計算機上只能用離散點來表示圖形來。繪製直線的大致思路是在一條直線的周圍找到離直線最近的畫素點,這些畫素點組成的圖形離散的分布在直線周圍,當解析度達到人眼無法識別的時候,人眼看到就是乙個連續的直線圖形。如果直接用直線表示式y=k*x+b.來繪製直線,想象下當斜率》1時,鋸齒狀非常明顯,極端情況下甚至不可見,下面介紹兩種繪製直線的演算法。

(一)dda演算法

dda演算法是通過乙個點滿足的遞推關係來得到第二個點的座標的。

直線表示式:y=k*x+b。

設繪製圖形是沿著直線乙個端點乙個點乙個點繪製的,已經繪製第 i個點的座標(x[i],y[i]),則:

斜率:k=(y[i+1]-y[i])/(x[i+1]-x[i]) => y[i+1]= y + k*(x[i+1]-x[i])

當 k > =1 時 即:abs( x[i+1]-x[i])  ) > abs( x[i+1]-x[i])  ) 時

x[i+1]=x[i]+1

y[i+1]=y+k

當 k < 1 時 直線比較接近y軸。所以要在y的方向上增1.想象x軸和y軸交換.

dda演算法畫直線 再談繪製直線

之前已經在 從零開始計算機圖形學 之七畫線 寫過繪製直線了,現在再來仔細的看一下這個問題。tinyrenderer github.com void line int x0,int y0,int x1,int y1,tgaimage image,tgacolor color 這裡的問題有兩個 t取大了...

Canvas 繪製直線

1.canvas繪圖是一種基於狀態的繪圖,繪圖的過程應該是先設定繪圖的狀態,再呼叫具體的函式進行繪製。例如繪製一條 100,100 到 700,700 的直線 context.moveto 100,100 設定起點狀態 context.lineto 700,700 設定末端狀態 context.li...

Wu反走樣演算法繪製直線段

原理 在我看來,wu反走樣演算法是在bresenham演算法基礎上改進了一番,它給最靠近理想直線 曲線的兩個點以不同的亮度值,以達到模糊鋸齒的效果。因為人眼看到的是線附近亮度的平均值。mfc 中給c view類新增函式 void cmy3 4view wuline cpoint p0,cpoint ...