求高手帮忙把DDA算法在VC下实现
直线地算法:DDA算法:
数值微分法即DDA法(Digital Differerntial Analyzer),这是一种基于直线的微分方程来生成直线地方法。
设(x1,y1)和(x2,y2)分别为所求直线的端点坐标,由直线的微分方程得:
dy/dx=直线地斜率 即△y/△x=(y2-y1)/(x2-x1) (1)
可通过计算由x方向的增量△x引起y的改变来生成直线。
由y(i+1)=y(i)+△y (y(i)为直线上某步的初值)
则 y(i+1)=y(i)+(y2-y1)/(x2-x1)*△x (2)
若设x(i+1)=x(i)+△x则由式(1)可得:
x(i+1)=x(i)+(x2-x1)/(y2-y1)*△ y (3)
本算法的基本思想是:选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的△x为一个像素单位步长,即x每次递增一个像素,然后利用(2)式计算相应的y值,把每次计算出的(x(i+1),y(i+1)经取整后顺序输出到显示器,则得到光栅化后的直线。
DDA-line (x1,y1,x2,y2)
Int x1,y1,x2,y2;
{
real increx,increy,x,y;
int length,i;
if(abs(x2-x1)>abs(y2-y1))
length=abs(x2-x1);
else
length=abs(y2-y1);
increx=(x2-x1)/length;
inchs=(y2-y1)/length;
x=x1;
y=y1;
for(i=1;i<=length;i++)
{
Putpixel(round(x),round(y),1);
x=x+increx;
y=y+increy;
}
}