1、Matlab 圆弧插补程序+郑国安 X0=input( 请输 入起 点横 轴 坐标 Xn X0 = ); Y0=input( 请输 入起 点纵 轴 坐标 Yn Y0 = ); Xe=input( 请 输入 终点 横轴 坐标 Xn Xe =); Ye=input( 请输 入终 点纵 轴 坐标 Yn Ye = ); R=input( 请 输入 圆弧 半径n R = ); NorF=input( 请 选择 圆心(1 代表靠 近原 点 2 代表 远 离原点):n ); SorN=input( 请 选择 补走 向(1 代 表顺 时针/2 代表 逆时 针):n ); h=input( 请输 入步 长n h
2、 = ); if(Xe=X0) y01 = 0; x02 = 2*Xe; y02 = 2*Ye; R = sqrt(Xe2+Ye2); mark = 0; else mark = 1; k1 = (Ye-Y0)/(Xe-X0); k2 = -1/k1; Xz=(X0+Xe)/2; Yz=(Y0+Ye)/2; % 两 点中 点坐 标 L1=sqrt(X0-Xe)2+(Y0-Ye)2)/2 ; % 两点 之间 距离 的一半 L2=sqrt(R2-L12); beta = atan(k2); x01 = Xz-L2*cos(beta); y01 = Yz-L2*sin(beta); % 靠 近 原点
3、的 圆心 x02 = Xz+L2*cos(beta); y02 = Yz+L2*sin(beta); % 远 离原点 的圆 心 end if(NorF=1) % 判 断 圆心位 置 if(x012+y012-x022-y022)h*h/2|(step=0 % 判 断 动点所 在象 限 end if(Xm-x0)0) XOY=2; end if(Xm-x0)=0 y1=Ym,Ym-h; else x1=Xm,Xm+h; y1=Ym,Ym; end else if(Fm=0) x1=Xm,Xm+h; y1=Ym,Ym; else x1=Xm,Xm; y1=Ym,Ym+h; end else if(
4、Fm0) x1=Xm,Xm; y1=Ym,Ym-h; else x1=Xm,Xm-h; y1=Ym,Ym; end end case 3 if(SorN=1) if(Fm=0) x1=Xm,Xm; y1=Ym,Ym+h; else x1=Xm,Xm-h; y1=Ym,Ym; end else if(Fm0) x1=Xm,Xm+h; y1=Ym,Ym; else x1=Xm,Xm; y1=Ym,Ym-h; end end case 4 if(SorN=1) if(Fm=0) x1=Xm,Xm-h; y1=Ym,Ym; else x1=Xm,Xm; y1=Ym,Ym-h; end else if(
5、Fm0) x1=Xm,Xm; y1=Ym,Ym+h; else x1=Xm,Xm+h; y1=Ym,Ym; end end end step=step+1; plot(x1,y1,r-); % 由 此点 和前 一点坐 标组 成 的 2 个向 量 画直线 Xm=x1(2); % 保 存此 点坐 标供 下 次作图 和比 较时 使用 Ym=y1(2); Fm = (Xm-x0)2+(Ym-y0)2-R2; hold on; text(x1(1)+x1(2)/2,(y1(1)+y1(2)/2,num2str(step) pause(0.5); % 延 时程 序形 参为每 走一 步所 用时 间 end xlabel(X) ylabel(Y) title( 四象限 圆弧 插补) hold off;