DDA算法(Digital Differential Analyzer),又称数值微分法,是计算机图形学中一种基于直线的微分方程来生成直线的方法。
|k|<=1
void DDALine(int x0,int y0,int x1,int y1,int color)
{
int x;
float dx,dy,y,k;
dx=x1-x0,dy=y1-y0;
k=dy/dx,y=y0;
for (x=x0;x<=x1;x++)
{
//Drawpixel(x,int (y+0.5),color);
pDC->SetPixel(x,int (y+0.5),RGB(0,0,0));
y=y+k;
}
}
|k|>1
void DDALine(int x0,int y0,int x1,int y1,int color)
{
int x;
float dx,dy,y,k;
dx=x1-x0,dy=y1-y0;
k=dy/dx,x=x0;
for (y=y0;y<=y1;y++)
{
//Drawpixel(int (x+0.5),y,color);
pDC->SetPixel(int (x+0.5),y,RGB(0,0,0));
y=y+k;
}
}
任意斜率
void DDALine(int x0,int y0,int x1,int y1,int color)
{
int dx,dy,n,k;
float xinc,yinc,x,y;
dx=x1-x0;dy=y1-y0;
if (abs(dx)>abs(dy))
n=abs(dx);
else
n=abs(dy);
xinc=(float)dx/n;
yinc=(float)dy/n;
x=(float)x0;y=(float)y0;
for (k=1;k<=n;k++)
{
//Drawpixel(int (x+0.5),int (y+0.5),color);
pDC->SetPixel(int(x+0.5),int(y+0.5),RGB(0,0,0));
x+=xinc;
y+=yinc;
}
}