1.hua.m
主画线函数,rm是传过来的图片(灰度图像),(a,b),(c,d)为线的端点。
由于默认生成灰度图像全黑,所以这里直接将像素值改为1,画白线。
单独处理竖线和横线的情况。
为防止单独沿着一个坐标计算另一个坐标时,斜率过大或者过小导致短线的情况,此处分别沿x与y绘制两次。
因为“:”只能朝向一个方向,此处单独处理。(什么,你问我为什么不用x:y:z,甚至没用else,只能说这是为了为了方便XXXX看懂)。
function img=hua(a,b,c,d,rm)
img=rm;
xk=(c-a);
yk=(d-b);
if xk==0
if yk>0
for i=b:d
img(i,a)=1;
end
end
if yk<0
for i=d:b
img(i,a)=1;
end
end
return
end
if yk==0
if xk>0
for i=a:c
img(b,i)=1;
end
end
if xk<0
for i=c:a
img(b,i)=1;
end
end
return
end
ykk=(yk/xk);
if ac
y=d;
for i=c:a
img(round(y),i)=1;
y=(y+ykk);
end
end
xkk=(xk/yk);
if bd
x=c;
for i=d:b
img(i,round(x))=1;
x=(x+xkk);
end
end
2.huaxian.m
没什么东西,分配个300×300的内存,调用hua()再测量运行时间,顺便显示出画出来的图像(bug欢迎指正)
function huaxian(a,b,c,d)
img=zeros(300,300);
t0=cputime;
img=hua(a,b,c,d,img);
t1=cputime;
time=t1-t0
figure;imshow(img)
3.suijihuaxian.m
用最笨的方法造出两个坐标,调用huaxian()
function suijihuaxian()
a=round(300*rand())
b=round(300*rand())
c=round(300*rand())
d=round(300*rand())
huaxian(a,b,c,d)
4.结果,随机画了几条可以看出没有断线之类的········