1X0=input('请输入起点横轴坐标x:');Y0=input('请输入起点纵轴坐标y:');NXY=input('请输入差补步数:');pace=input('请输入差补步长:');RNSS=input('请选择差补走向(1代表顺时针/2代表逆时针):');XM=X0;YM=Y0;%画基准圆R=sqrt(X0*X0+Y0*Y0);alpha=0:pi/20:2*pi;xx=R*cos(alpha);yy=R*sin(alpha);plot(xx,yy,'g:');holdon;axisequal;%针对跨象限运行时对ZF初始化(由于在跨象限运行时不改变ZF值所以必须对其初始化)ZF=(RNSS==1)*(((Y0==0)*((X00)*4+(X00)*3))+((X0==0)*((Y00)*1+(Y00)*2)))+...(RNSS~=1)*(((Y0==0)*((X00)*3+(X00)*4))+((X0==0)*((Y00)*2+(Y00)*1)));%建立NXY次循环来实现差补计算与绘图fornum=1:NXY%FM值判断FM=XM*XM+YM*YM-X0*X0-Y0*Y0;%象限判断(RNS为1,2,3,4分别代表1,2,3,4象限)RNS=(XM0)*((YM0)*1+(YM0)*4)+(XM0)*((YM0)*2+(YM0)*3);%走步计算(RNS百位为1表示逆时针画圆,十位为1表示FM0,个位数字表示所在2象限,ZF代表走步方向)switchRNS+((FM0)*10)+(RNSS~=1)*100case001ZF=4;case002ZF=1;case003ZF=3;case004ZF=2;case011ZF=1;case012ZF=3;case013ZF=2;case014ZF=4;case101ZF=2;case102ZF=4;case103ZF=1;case104ZF=3;case111ZF=3;case1123ZF=2;case113ZF=4;case114ZF=1;end%步进电机走步(由ZF控制走步方向由pace控制步长)switchZFcase1x1=[XM,XM+pace];y1=[YM,YM];case2x1=[XM,XM-pace];y1=[YM,YM];case3x1=[XM,XM];y1=[YM,YM+pace];case4x1=[XM,XM];y1=[YM,YM-pace];endplot(x1,y1,'r-');%由此点和前一点坐标组成的2个向量画直线XM=x1(2);%保存此点坐标供下次作图和比较时使用YM=y1(2);holdon;pause(0.01);%延时程序形参为每走一步所用时间endholdoff;4