生活随笔
收集整理的這篇文章主要介紹了
计算机图形学实验一直线-DDA算法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這里寫(xiě)自定義目錄標(biāo)題
- 一、基本知識(shí)和實(shí)驗(yàn)步驟
- 二、代碼展示
一、基本知識(shí)和實(shí)驗(yàn)步驟
DDA(數(shù)值微分)算法
DDA 算法原理:如圖 1-1 所示,已知過(guò)端點(diǎn)怕p0(x0,y0),p1(x1,y1)的直線段 p0,p1;直線斜率為 k=(y1-y0)/(x1-x0) ,從x 的左端點(diǎn)x0開(kāi)始,向 x 右端 點(diǎn)步進(jìn)畫(huà)線,步長(zhǎng)=1(個(gè)像素),計(jì)算相應(yīng)的 y 坐標(biāo)y=kx+B;取像素點(diǎn) [x , round(y) ] 作為當(dāng)前點(diǎn)的 坐標(biāo)。計(jì)算yi+1=kxi+1+B=kx1+B+kdx, 當(dāng)x=1 ,yi+1*=yi+k,即當(dāng) x 每遞增 1,y 遞增 k(即 直線斜率)。 注意:上述分析的算法僅適用于 k<=1 的情形。在 這種情況下,x 每增加 1, y 最多增加 1。當(dāng)x>=1 時(shí), 必須把 x,y 地位互換,y 每增加 1,x 相應(yīng)增加 1/k。
二、代碼展示
GPoint.h 文件中的代碼
#pragma once ref class GPoint { public: int x; int y; GPoint(void); GPoint(int, int); };
GPoint.cpp文件中的代碼
#include "StdAfx.h" #include "GPoint.h" GPoint
::GPoint(void) { x
=0; y
=0; } GPoint
::GPoint(int x0
, int y0
) { x
= x0
; y
= y0
; }
Line.h 文件中的代碼
#pragma once using namespace System::Drawing; #include "GPoint.h" ref
class Line { public: GPoint Begin
; GPoint End
; Line(void); Line(GPoint
^, GPoint
^); void DDA(Color
,Bitmap
^); void Bresenham1(Color
,Bitmap
^); void Bresenham2(Color
,Bitmap
^); void Bresenham3(Color
,Bitmap
^); void MidPointLine(Color
,Bitmap
^); };
Line.cpp文件中的代碼
#include "GPoint.h"
#include "math.h"
Line
::Line()
{ GPoint Begin
; GPoint End
; Begin
.x
=0; Begin
.y
=0; End
.x
=0; End
.y
=0;
} Line
::Line(GPoint
^P0
, GPoint
^P1
)
{ Begin
.x
=P0
->x
; Begin
.y
=P0
->y
; End
.x
=P1
->x
; End
.y
=P1
->y
;
}
DDA算法代碼
void Line
::DDA(Color color
,Bitmap
^bmp
)
{ int dx
= abs(End
.x
- Begin
.x
); int dy
= abs(End
.y
- Begin
.y
); int s1
, s2
; if (End
.x
>= Begin
.x
) s1
= 1; else s1
= -1; if (End
.y
>= Begin
.y
) s2
= 1; else s2
= -1; float x
=(float) Begin
.x
; float y
=(float) Begin
.y
; float k
= (float)dy
/ dx
; if (k
<= 1) { for (int i
= 0; i
<= dx
; i
++) { x
+= s1
; bmp
->SetPixel((int) x
, (int)( y
+0.5), color
); y
+= s2
* k
; } } else { for (int i
= 0; i
<= dy
; i
++) { y
+= s2
; bmp
->SetPixel((int)(x
+0.5), (int) y
, color
); x
+= s1
*1/ k
; } }
}
侵刪
`
總結(jié)
以上是生活随笔為你收集整理的计算机图形学实验一直线-DDA算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。