如果对中点画线算法不太了解,可参考:https://blog.csdn.net/weixin_42465397/article/details/104706684
首先推导各个斜率下与
以及
的关系
当 0<k<1时
if
else
其中 d0 = A +0.5B
当 k>1 时(y轴加一,看x轴的正负)画图一目了然
if
else
其中 d0 = 0.5A +B
当 k>-1 且k<0 时
if
else
其中 d0 = A - 0.5B
当k<-1时这里就不再推了,大家可以自己去尝试,
function midpointline(x0,y0,x1,y1)
k = (y1-y0)/(x1-x0);
x=x0;y=y0;
b=x1-x0;a=y0 - y1; %这个式子是用已知直线两个点,求一般式画出来的
if(k<1 && k>0)
grid on;hold on;
plot(x,y,'o');
d0=2*a+b;
d1=2*a;
d2=2*(a+b);
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,'o');
end
elseif(k>1)
grid on;hold on;
plot(x,y,'o');
d0=a+2*b;
d1=2*(a+b);
d2=2*b;
while (y<y1)
if(d0 >=0)
x = x + 1;
y = y + 1;
d0 =d0 + d1;
elseif(d0 < 0)
y=y+1;d0=d0+d2;
end
hold on;
plot(x,y,'o');
end
elseif(k>-1 && k<0)
grid on;hold on;
plot(x,y,'o');
d0=2*a-b;
d1=2*(a-b);
d2=2*a;
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,'o');
end
elseif(k<-1)
grid on;hold on;
plot(x,y,'o');
d0=a-2*b;
d1=-2*b;
d2=2*(a-b);
while (x<x1)
if(d0 >=0)
y = y - 1;
d0 =d0 + d1;
elseif(d0 < 0)
x=x+1;y=y-1;d0=d0+d2;
end
hold on;
plot(x,y,'o');
end
end
end