首页 圆弧插补直线插补程序

圆弧插补直线插补程序

举报
开通vip

圆弧插补直线插补程序X0=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,y...

圆弧插补直线插补程序
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;
本文档为【圆弧插补直线插补程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_149510
暂无简介~
格式:doc
大小:56KB
软件:Word
页数:8
分类:工学
上传时间:2012-05-14
浏览量:105