Bresenham算法画直线
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Bresenham算法画直线:
Matlab函数代码:
function drawline(startX,startY,endX,endY)
deltaX=endX-startX;
deltaY=endY-startY;
k=deltaY/deltaX;
X=startX:endX;Y=k.*(X-startX)+startY;plot(X,Y,'-');hold on;
if k>=0
x=startX;
y=startY;
if k<=1
for x1=startX:endX
y1=(deltaY/deltaX*(x1-startX)+startY)*deltaX;
dist=y1-y*deltaX;
dist=dist*2;
if dist>deltaX || dist<-deltaX
y=y+1;
end
plot(x1,y,'r*');
hold on;
end
else
for y1=startY:endY
x1=((deltaX/deltaY*(y1-startY))+startX)*deltaY;
dist=x1-x*deltaY;
dist=dist*2;
if dist>deltaY || dist<-deltaY
x=x+1;
end
plot(x,y1,'r*');
hold on;
end
end
end
if k<0
x=endX;
y=startY;
if k>=-1
for x1=startX:endX
y1=(deltaY/deltaX*(x1-startX)+startY)*deltaX;
dist=y1-y*deltaX;
dist=dist*2;
if dist>deltaX || dist<-deltaX
y=y-1;
end
plot(x1,y,'r*');
hold on;
end
else
for y1=endY:startY
x1=((deltaX/deltaY*(y1-startY))+startX)*deltaY;
dist=x1-x*deltaY;
dist=dist*2;
if dist
x=x-1;
end
plot(x,y1,'r*');
hold on;
end
end
end
Matlab测试代码:
drawline(0,0,50,0);
drawline(0,0,50,25);
drawline(0,0,25,50);
drawline(0,0,50,50);
drawline(0,0,0,50);
drawline(0,0,50,-25);
drawline(0,0,25,-50);
drawline(0,0,50,-50);
drawline(0,0,0,-50)
Matlab输出图像: