DDA
function DDA(x1,y1,x2,y2,color)
length=abs(x2-x1);
if abs(y2-y1)>length
length=abs(y2-y1);
end
dx=(x2-x1)/length;
dy=(y2-y1)/length;
x=x1+0.5*sign(dx);
y=y1+0.5*sign(dy);
hold on;
for m=1:length
plot(round(x),round(y),'Color',color)
x=x+dx;
y=y+dy;
end
hold off
end
中点法
function zd(x0,y0,x1,y1)
dx=x1-x0,dy=y1-y0;
x=x0,y=y0;
axis([0 50 0 50])
set(gca,'xtick',0:1:50)
set(gca,'ytick',0:1:50)
grid on ;
hold on ;
plot(x,y,'.');
if(dy/dx>0&dy/dx<=1)
d0=dx-2*dy,d1=-2*dy,d2=2*(dx-dy);
while(x<x1)
if(d0>=0)
x=x+1;
d0=d0+d1;
elseif(d0<0)
x=x+1;y=y+1;
d0=d0+d2;
end
hold on;
plot(x,y,'.')
end
end
if(dy/dx>-1&dy/dx<=0)
d0=-dx-2*dy,d1=-2*(dx-dy),d2=-2*dy;
while(x<x1)
if(d0>=0)
x=x+1;
y=y-1;
d0=d0+d1;
elseif(d0<=0)
x=x+1;
d0=d0+d2;
end
hold on;
plot(x,y,'.')
end
end
if(dy/dx>1)
d0=2*dx-dy,d2=2*dx,d1=2*(dx-dy);