生活随笔
收集整理的這篇文章主要介紹了
                                
计算机图形学实验一直线-DDA算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            
這里寫自定義目錄標題
 
一、基本知識和實驗步驟
 
DDA(數值微分)算法
 DDA 算法原理:如圖 1-1 所示,已知過端點怕p0(x0,y0),p1(x1,y1)的直線段 p0,p1;直線斜率為 k=(y1-y0)/(x1-x0) ,從x 的左端點x0開始,向 x 右端 點步進畫線,步長=1(個像素),計算相應的 y 坐標y=kx+B;取像素點 [x , round(y) ] 作為當前點的 坐標。計算yi+1=kxi+1+B=kx1+B+kdx, 當x=1 ,yi+1*=yi+k,即當 x 每遞增 1,y 遞增 k(即 直線斜率)。 注意:上述分析的算法僅適用于 k<=1 的情形。在 這種情況下,x 每增加 1, y 最多增加 1。當x>=1 時, 必須把 x,y 地位互換,y 每增加 1,x 相應增加 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
; } } 
}  
侵刪
 
`
                            總結
                            
                                以上是生活随笔為你收集整理的计算机图形学实验一直线-DDA算法的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。