线的生成——DDA算法|数值微分画线算法
2010-06-11 21:25:35| 分类: 默认分类 | 标签: |字号大中小 订阅
DDA称为数值微分画线算法,是直线生成算法中最简单的一种。原理相当简单,就是最直观的根据斜率的偏移程度,决定是以x为步进方向还是以y为步进方向。然后在相应的步进方向上,步进变量每次增加一个像素,而另一个相关坐标变量则为Y=kx+m(以x为步进变量为例,m为斜率).当斜率在-1到1之间是让X增长值为1,Y的增长值为K。当斜率大于1时。让Y增长值为1,X的增量为1/K。这样做的目的是让每次变化的值不能大于1。这样可以让像素点更加整齐。
这个程序对于我的意义在于:可以在VC中利用GDI的画点函数--- SetPixel来实现它
先根据两个坐标点~求出直线的斜率
CPoint p1,p2;
p1.x=0;
p1.y=0;
p2.x=300;
p2.y=400;//坐标点初始化
double dx,dy,k,y,x;
COLORREF rgg=RGB(0,0,0); //黑色
dx=p2.x -p1.x;
dy=p2.y-p1.y;
k=dy/dx;//求斜率
if(fabs(k)<1)//当斜率在-1到1之间的时候
{
y=p1.y;
for(x=p1.x;x<=p2.x;x++)//以x为增量
{
pDC->SetPixel(x,int(y+0.5),rgg);
y=y+k;
}
}
else//斜率大于1的时候
{
x=p1.x;
for(y=p1.y;y<=p2.y;y++)//以Y为增量 //X的增量为1/K
{
pDC->SetPixel(int(x+0.5),y,rgg);
x=x+1.0/k;
}
}