用Matlab实现直线插补计算程序.docx

姓名: 学号: 班级: 用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(xe0) x=x+dx; else end  x=x-dx; else y=y; F=abs(xe*y)-abs(ye*x); if(ye0) y=y+dy; else end  y=y-dy; end x=x; F=abs(xe*y)-abs(ye*x); 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(xe0) xxx=0:0.01:xe; else xxx=0:-0.001:xe; end yyy=K*xxx; if(xe0) plot(xx,yy,g,xxx,yyy,b); else plot(xx,yy,g-,xxx,yyy,b); end grid on; 0 -1 -2 轴 -3 y -4 -5 -6 -5 -4.5 -4 -3.5 -3 -2.5 x轴 图表 1  -2 -1.5 -1 -0.5 0 当dx=0.5;dy=0.6;xe=-5;ye=-6;时,结果如图表1所示。 4 3.5 3 2.5 2 1.5 1 0.5 0 0 1 2 3 4 5 6 7 图表 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))dmin) 结果如图3所示,这样就不会多走一步。 4 3.5 3 2.5 2 1.5 1 0.5 0 0 1 2 3 4 5 6 图表 3 采用不等步长和简化的偏差计算公式,结果如图表4所示;我们发现对于,简化的 偏差计算不适用于不等步长的情况。 0 -1 -2 -3 -4 -5 -6 -7 -5 -4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 图表 4 在土表所采用的程序基础上对偏差计算公式做一个修改,F=F-abs(ye*dx); F=F+abs(xe*dy);计算结果如图表5所示,此方法在该条件下适用。 0 -1 -2 -3 -4 -5 -6 -5 -4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 图表 5

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档