假设给定两个点 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; i<abs(dx); i++)//循环,移动dx步
k=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)中类似.