用Matlab实现直线插补计算程序
姓名: 学号: 班级:
用Matlab实现直线插补计算程序
clear;
F=0;x=0;y=0;
dx=0.5;dy=0.6;
xe=-5;ye=-6;
K=ye/xe;
xx(1)=x;yy(1)=y;
index=2;
while(1)
if(F>=0)
if(xe>0)
x=x+dx;
else
x=x-dx;
end
y=y;
F=abs(xe*y)-abs(ye*x);
else
if(ye>0)
y=y+dy;
else
y=y-dy;
end
x=x;
F=abs(xe*y)-abs(ye*x);
end
if(abs(F)<=0.01)
F=0;
end
xx(index)=x;
yy(index)=y;
index=index+1;
if((abs(x)+abs(y))>=(abs(xe)+abs(ye)))
break;
end
end
if(xe>0)
xxx=0:0.01:xe;
else
xxx=0:-0.001:xe;
end
yyy=K*xxx;
if(xe>0)
plot(xx,yy,'g>',xxx,yyy,'b');
else
plot(xx,yy,'g-
end
grid on;
图表 1
当dx=0.5;dy=0.6;xe=-5;ye=-6;时,结果如图表1所示。
图表 2
当dx=0.6;dy=0.4; xe=6;ye=4;时结果如图标2所示,结果显示多走了一步,原因是matlab在倒数第二步计算if((abs(x)+abs(y))>=(abs(xe)+abs(ye)))时,结果不为0,仍需继续走一步。
可以对程序做进一步修改:加入条件dmin=min(dx,dy)/2; 并把if((abs(x)+abs(y))>=(abs(xe)+abs(ye)))修改成
if(abs(abs(x)+abs(y)-abs(xe)-abs(ye))
图表 3
采用不等步长和简化的偏差计算公式,结果如图表4所示;我们发现对于,简化的偏差计算不适用于不等步长的情况。
图表 4
在土表所采用的程序基础上对偏差计算公式做一个修改,F=F-abs(ye*dx); F=F+abs(xe*dy);计算结果如图表5所示,此方法在该条件下适用。
图表 5