DDA畫線演算法

2021-09-30 03:53:05 字數 483 閱讀 7749

假設給定兩個點 a(x1,y1) , b(x2,y2) ,用dda實現畫直線ab的演算法如下

dx=x2-x1; dy=y2-y1;  斜率k ;(x,y) 為需要畫的點座標,初始時(x,y)=(x1,y1);

1)  (dx!=0&&dy!=0) ,即ab為斜線

1.1  abs(dx)>=abs(dy), 此時以x方向為步長;

for( i=0; ik=dy/abs(dx);  y=y+k; //這裡y和k應該是浮點型,渲染點的時候再轉成整型

if x>0 x++;  else  x--;//即dx的符號決定了畫素移動的方向

渲染點(x,y)

1.2  以y方向為步長,方法與 1.1中類似;

2)  dx==0;此時ab為豎直線,所以x無需變化;

迴圈abs(dy) 次:

if (dy>0) y++; else y--

渲染點(x,y)

3)  dy==0;與2)中類似.

OpenGL學習(二)畫線段DDA演算法

所謂dda就是數字微分分析式,假設線段起點 x1,y1 終點 x2,y2 則斜率k y2 y1 x2 x1 線段中每乙個點的座標都可以由前乙個點的座標變化乙個增量 dx,dy 而得到,所以其遞迴式就為 x i 1 x i dx y i 1 y i dy 其中dx和dy的確定原則如下 如果 dx dy...

DDA演算法和Bresenham演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!dda演算法和bresenham演算法是計算機圖形學中繪製直線的兩種常用演算法。本文具體介紹一下dda演算法和bresenham演算法實現的具體思路。dda演算法主要是根據直線公式y kx b來推導出來的,其關鍵之處在於如何設定單位步進,即乙個方向...

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...