增量DDA画线算法
DDAline(double x1,double y1,double x2,double y2)
{
double length;
double dx,dy;
double x,y;
if(abs(x2-x1)>=abs(y2-y1))
length=abs(x2-x1);
else
length=abs(y2-y1);
dx=(x2-x1)/length;
dy=(y2-y1)/length;
x=x1+0.5*Sign(dx);
y=y1+0.5*Sign(dy);
int i=1;
while (i<length)
{
setpixel(int(x),int(y));
x=x+dx;
y=y+dy;
i=i+1;
}
}
int Sign(double x)
{
if(x<0)
return -1;
if(x==0)
return 0;
if(x>0)
return 1;
}
/另一种
//DDA画线算法
#include<stdlib>
#include<math.h>
inline int round(const float a){return int(a+0.5);}
void DDAline(int x0,int y0,int xEnd,int yEnd)
{
int dx=xEnd-x0,dy=yEnd-y0,steps,k;
float xIncrement,yIncrement,x=x0,y=y0;
if(fabs(dx)>fabs(dy))
{
steps=fabs(dx);
}
else
{
steps=fabs(dy);
}
xIncrement=float(dx)/float(steps);
yIncrement=float(dy)/float(steps);
setPixel(round(x),round(y));
for(k=0;k<steps;k++)
{
x+=xIncrement;
y+=yIncrement;
setPixel(round(x),round(y));
}
}
如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。