X0=input('请输入起点横轴坐标x: ');
Y0=input('请输入起点纵轴坐标y: ');
NXY=input('请输入差补步数: ');
pace=input('请输入差补步长: ');
RNSS=input('请选择差补走向(1代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
顺时针/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:');
hold on;
axis equal;
%针对跨象限运行时对ZF初始化(由于在跨象限运行时不改变ZF值所以必须对其初始化)
ZF=(RNSS==1)*(((Y0==0)*((X0>0)*4+(X0<0)*3))+((X0==0)*((Y0>0)*1+(Y0<0)*2)))+...
(RNSS~=1)*(((Y0==0)*((X0>0)*3+(X0<0)*4))+((X0==0)*((Y0>0)*2+(Y0<0)*1)));
%建立NXY次循环来实现差补计算与绘图
for num=1:NXY
%FM值判断
FM=XM*XM+YM*YM-X0*X0-Y0*Y0;
%象限判断(RNS为1,2,3,4分别代表1,2,3,4象限)
RNS=(XM>0)*((YM>0)*1+(YM<0)*4)+(XM<0)*((YM>0)*2+(YM<0)*3);
%走步计算(RNS百位为1表示逆时针画圆,十位为1表示FM<0,个位数字表示所在象限,ZF代表走步方向)
switch RNS+((FM<0)*10)+(RNSS~=1)*100
case 001
ZF=4;
case 002
ZF=1;
case 003
ZF=3;
case 004
ZF=2;
case 011
ZF=1;
case 012
ZF=3;
case 013
ZF=2;
case 014
ZF=4;
case 101
ZF=2;
case 102
ZF=4;
case 103
ZF=1;
case 104
ZF=3;
case 111
ZF=3;
case 112
ZF=2;
case 113
ZF=4;
case 114
ZF=1;
end
%步进电机走步(由ZF控制走步方向由pace控制步长)
switch ZF
case 1
x1=[XM,XM+pace];
y1=[YM,YM];
case 2
x1=[XM,XM-pace];
y1=[YM,YM];
case 3
x1=[XM,XM];
y1=[YM,YM+pace];
case 4
x1=[XM,XM];
y1=[YM,YM-pace];
end
plot(x1,y1,'r-'); %由此点和前一点坐标组成的2个向量画直线
XM=x1(2); %保存此点坐标供下次作图和比较时使用
YM=y1(2);
hold on;
pause(0.01); %延时程序形参为每走一步所用时间
end
hold off;
#include
#include
main()()
{ f();
}
void f()
{ int x0,y0,X0,Y0,XOY,NXY,ZF,FM=0;
print ("请输入起点: \n");
scanf("%d%d",&x0,&y0);
print("请输入终点:\n");
scanf("%d%d",&XE,&YE);
print("请输入类型:\n");
scanf("%d",&XOY);
NXY=abs(XE-X0)+abs(YE-Y0);
while(NXY!=0)
{ print("请输出:FM=%d\n",FM);
print("请输出:NXY=%d\n",NXY);
{ if (FM>=0)
{if(XOY==1||XOY==4)
ZF=1;
else ZF=2;
FM=FM-YE;
}
else{if(XOY==1||XOY==2)
ZF=3;
else ZF=4;
FM=FM+XE;
}
}
NXY=NXY-1;
}
}
#include
#include
main()
{ f();
}
void f()
{ int x0,y0,X0,Y0,XOY,NXY,ZF,FM=0;
print (“请输入起点: \n”);
scanf(“%d%d”,&x0,&y0);
print(“请输入终点:\n”);
scanf(%d%d”,&XE,&YE);
print(“请输入类型:\n”);
scanf("%d”,&XOY);
NXY=abs(XE-X0)+abs(YE-Y0);
while(NXY!=0)
{ print(“请输出:FM=%d\n”,FM);
print(“请输出:NXY=%d\n”,NXY);
{ if (FM>=0)
{if(XOY==1||XOY==4)
ZF=1;
else ZF=2;
FM=FM-YE;
}
else{if(XOY==1||XOY==2)
ZF=3;
else ZF=4;
FM=FM+XE;
}
}
NXY=NXY-1;
}
}
%圆形插补
X0 = input('请输入起点位置x=');
Y0 = input('请输入起点位置y=');
Nxy = input('请输入总步数Nxy=');
diretction = input('请输入方向1顺时针,2逆时针');
%以原点为圆心,(X0,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');
hold on;
axis equal; %使XY轴坐标等宽
StepLength = 4 * R / Nxy %计算出步长
Fm =0;
step = 0;
XM = X0;
YM = Y0;
while step <= Nxy
if XM >= 0 %判断哪个象限
if YM >= 0
RNS = 1;
else
RNS = 4;
end
else
if YM >= 0
RNS = 2;
else
RNS = 3;
end
end
if diretction ==2 %逆时针
RNS = RNS + 4;
end
if RNS == 1 || RNS == 3 || RNS == 6 || RNS == 8
if Fm < 0
if RNS == 1 || RNS ==8
Zf = 1;
else
Zf = 2;
end
Fm = Fm + 2 * XM + 1;
XM=XM+StepLength;
% XM = XM + 1;
else
if RNS == 1 || RNS ==6
Zf = 4;
else
Zf = 3;
end
Fm = Fm + 2 * YM + 1;
YM = YM-StepLength;
% YM = YM - 1;
end
else
if Fm >= 0
if RNS == 2 || RNS ==7
Zf = 1;
else
Zf = 2;
end
Fm = Fm - 2 * XM + 1;
XM=XM-StepLength;
% XM = XM - 1;
else
if RNS == 2 || RNS ==5
Zf = 3;
else
Zf = 4;
end
Fm = Fm + 2 * YM + 1;
YM=YM+StepLength;
% YM = YM + 1;
end
end
% switch Zf
% case 1
% XM=XM+StepLength;
% case 2
% XM=XM-StepLength;
% case 3
% YM=YM+StepLength;
% case 4
% YM=YM-StepLength;
% end
x = [X0 XM];
y = [Y0 YM];
% Fm=XM*XM+YM*YM-R*R; %计算偏差
plot(x,y);
hold on;
X0 = XM;
Y0 = YM;
pause(0.1); %延时,模拟电机走步过程
step = step +1;
end
syms Xe Ye Nxy Fm Xoy Zf
% Xe 终点x坐标
% Ye 终点y坐标
% Nxy 起点到终点总步数
% Fm 偏差,>0在直线上方,<0在直线下方,0在直线上
% Zf 走向
Fm = 0; %设置初值,因为开始在直线上
Xe = input('请输入直线终点x=');
Ye = input('请输入直线终点y=');
Nxy = input('请输入步Nxy=');
%Nxy = floor(Nxy); %取整
x = linspace(0,Xe,2); %为节约资源仅画两个点
y = linspace(0,Ye,2);
plot(x,y,'g');
hold on;
if Xe >= 0 %判断哪个象限
if Ye >= 0
Xoy = 1;
else
Xoy = 4;
end
else
if Ye >= 0
Xoy = 2;
else
Xoy = 3;
end
end
step = 0;
Tstep= (abs(Xe)+abs(Ye))/Nxy;
X0 = 0; %中间变量,改变其中的
Y0 = 0;
XM = 0;
YM = 0;
while step < Tstep
if Fm >= 0
if Xoy == 1 || Xoy == 4
Zf = 1;
else
Zf = 2;
end
Fm = Fm -Ye;
else
if Xoy == 1 || Xoy == 2
Zf = 3;
else
Zf = 4;
end
Fm = Fm + Xe;
end
switch Zf
case 1
XM=XM+Nxy;
case 2
XM=XM-Nxy;
case 3
YM=YM+Nxy;
case 4
YM=YM-Nxy;
end
x = [X0 XM];
y = [Y0 YM];
plot(x,y);
hold on;
X0 = XM;
Y0 = YM;
pause(0.01); %延时,模拟电机走步过程
step = step +1;
end
hold off;