計算機圖形學----DDA、Bresenham直線演算法
一、DDA演算法原理
DDA(數值微分演算法)演算法是一個增量演算法。增量演算法:在一個迭代演算法中,每一步的x、y值是用前一步的值加上一個增量來獲得。
通過各行各列象素中心構造一組虛擬網格線。按直線從起點到終點的順序計算直線與各垂直網格線的交點,然後根據誤差項的符號確定該列象素中與此交點最近的象素。
DDA需要考慮所畫直線的斜率k:
當 |k|<1 , x每增加1,y 增加k。
當 |k|>1 , y每增加1,x增加1/k。
程式設計實現直線的DDA演算法程式;
void CMyView::OnDdaline()
{
CDC *pDC=GetDC(); // 獲得裝置指標
intx0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0); //定義直線兩端點和直線顏色(紅色)
float x,y,i;
float dx,dy,k;
dx=(float)(x1-x0);
dy=(float)(y1-y0);
k=dy/dx;//計算斜率
y=y0; x=x0;
if(abs(k)<1)
{ for(;x<=x1;x++)
{pDC->SetPixel(x,int(y+0.5),c);
y=y+k;}//x自增,y=y+k
}
if(abs(k)>=1)
{
for(;y<=y1;y++)
{pDC->SetPixel(int(x+0.5),y,c);
x=x+1/k;}
}
ReleaseDC(pDC); //釋放裝置指標
}
二、Bresenham演算法原理
Bresenham演算法是計算機圖形學領域使用最廣泛的直線掃描轉換方法。
其原理是:過各行、各列畫素中心構造一組虛擬網格線,按直線從起點到終點的順序計算直線各垂直網格線的交點,然後確定該列畫素中與此交點最近的畫素。
該演算法的優點在於可以採用增量計算,使得對於每一列,只要檢查一個誤差項的符號,就可以確定該列所求的畫素。
直線的Bresenham演算法實現:
void CTestView::OnBresenhamline()
{
CDC*pDC=GetDC();
intx1=100,y1=200,x2=600,y2=800,color=RGB(0,0,255);
inti,x,y,dx,dy;
float k,e;
dx=x2-x1;
dy=y2-y1;
k=dy/dx;
e=-0.5; x=x1; y=y1;//e初值d0-0.5
for(i=0;i<=dx;i++)
{ pDC->SetPixel(x,y,color);
x++;
e=e+k;
if(e>=0) { y++; e=e-1;}
}
}
三、Bresenham改進演算法
上述bresenham演算法在計算直線斜率與誤差項時用到了小數與除法,可以改用整數以避免除法。由於演算法中用到誤差項的符號,因此可以做如下替換:e'=2*e*dx.
直線的整數Bresenham演算法實現:
void CTestView::OnBresenhamline()
{
CDC *pDC=GetDC();
int x0=100,y0=100,x1=500,y1=600,color=RGB(0,0,255);int i,x,y,dx,dy;
float k,e;
dx=x1-x0;
dy=y1-y0;
e=-dx;
x=x0; y=y0;
for(i=0;i<=dx;i++)
{ pDC->SetPixel(x,y,color);
x++;
e+=2*dy;
if(e>=0)
{y++;e=e-2*dx;} }
ReleaseDC(pDC);
}
相關文章
- Bresenham畫線演算法(計算機圖形學)演算法計算機
- 【十天自制軟渲染器】DAY 02:畫一條直線(DDA 演算法 & Bresenham’s 演算法)演算法
- 計算機圖形學-線性過濾計算機
- 計算機圖形學計算機
- 4次Bezier曲線--計算機圖形學 opengl計算機
- 計算機圖形學(二)輸出圖元_20_章節總結_程式展示_蝸形線、心形線、螺旋線計算機
- 計算機圖形學課程總結計算機
- 計算機圖形學 第四章 圖形變換計算機
- 畫直線的演算法之DDA演算法+程式碼實現(法一)演算法
- 計算機圖形學之矩陣變換計算機矩陣
- 計算機圖形學入門·光柵化計算機
- 計算機圖形學之紋理的作用計算機
- 數學在計算機圖形學中的應用計算機
- OpenCV計算機視覺學習(9)——影像直方圖 & 直方圖均衡化OpenCV計算機視覺直方圖
- Bresenham畫線演算法C++演算法C++
- Bresenham高效畫線演算法 (轉)演算法
- CMU出品,計算機圖形學秋季課程已上線,B站同步字幕影片計算機
- 計算機圖形學:虛擬和現實世界的融合計算機
- 計算機小白大資料學習線路圖計算機大資料
- 計算機圖形學(三)_圖元的屬性_章節總結(下)計算機
- 計算機圖形學原理及實踐——C語言描述pdf計算機C語言
- 計算機圖形學學會:75%的宜家產品目錄都是電腦合成圖片計算機
- 【計算機圖形學課程】一.MFC基本繪圖函式使用方法計算機繪圖函式
- 計算機網路與協議學習路線圖計算機網路協議
- 計算機圖形學(二)輸出圖元_20_章節總結_程式展示_餅圖計算機
- 計算機圖形:三維觀察之投影變換計算機
- 《計算機圖形學原理及實踐》學習筆記之第十一章計算機筆記
- 一個碼農是如何用遊戲推動計算機圖形學的?遊戲計算機
- 計算機圖形學(一) 視訊顯示裝置_1_CRT原理計算機
- 等頻直方圖,計算COST直方圖
- FCPX外掛:直線圖形矩形線條路徑動畫預設動畫
- 計算兩條直線的交點
- 大學計算機必修課新講--編譯原理+作業系統+圖形學計算機編譯原理作業系統
- 計算機圖形學(CG技術)在日本動畫製作中的應用計算機動畫
- java3D與計算機圖形學期末複習 第二章Java3D計算機
- 【計算機圖形學課程】二.MFC滑鼠響應函式模擬畫圖軟體計算機函式
- 對話高博(一)| 機器碼、Pascal,以及計算機學習的分形(圖靈訪談)機器碼計算機圖靈
- 前端使用 Konva 實現視覺化設計器(22)- 繪製圖形(矩形、直線、折線)前端視覺化