当前位置:文档之家› C语言模拟直线插补与圆弧插补程序设计

C语言模拟直线插补与圆弧插补程序设计

数控技术课程设计说明书设计题目直线插补与圆弧插补程序设计机械设计以及自动化专业机械工程学院机械102班设计者青岛理工大学2013年6月20日目录1.设计题目 (1)2.目录 (2)3.直线插补流程图 (3)4.直线插补程序 (4)5.程序结果 (8)6.圆弧插补流程图 (9)7.圆弧插补程序 (10)8.程序结果 (21)一.直线插补1.直线插补程序流程图2.直线插补程序设计#include "stdio.h"int i,X,Y,X0,Y0,Xe,Ye,F,N;int a[30][2];void main(){int m;int menu();void yi();void er();void san();void si();void te();void shuchu();m=menu();a[0][0]=X0;a[0][1]=Y0;switch(m){case 1:yi();shuchu();break; case 2:er();shuchu();break; case 3:san();shuchu();break; case 4:si();shuchu();break; case 5:te();shuchu();break; default:printf("无法插补\n"); }}int menu(){int t;printf("输入起点坐标\n"); scanf("%d,%d",&X0,&Y0); printf("输入终点坐标\n"); scanf("%d,%d",&Xe,&Ye);if (Xe>=X0&&Ye>=Y0)t=1;else if (Xe<=X0&&Ye>=Y0)t=2;else if (Xe<=X0&&Ye<=Y0)t=3;else if (Xe>=X0&&Ye<=Y0)t=4;else if (Xe==X0&&((Ye>Y0&&Y0>=0)||(Ye<Y0&&Y<=0))) t=5;elset=6;return(t);}void yi(){F=0;N=Xe-X0+Ye-Y0;X=X0;Y=Y0;for(i=1;i<=N;i++){ if(F>=0){X++;a[i][0]=X;a[i][1]=Y;F-=Ye-Y0;}else{Y++;a[i][0]=X;a[i][1]=Y;F+=Xe-X0;}}}void er(){F=0;N=X0-Xe+Ye-Y0;X=X0;Y=Y0;for(i=1;i<=N;i++){if(F>=0){ X--;a[i][0]=X;a[i][1]=Y;F-=Ye-Y0;}else{Y++;a[i][0]=X;a[i][1]=Y;F+=X0-Xe;}}}void san(){F=0;N=X0-Xe+Y0-Ye; X=X0;Y=Y0;for(i=1;i<=N;i++){if(F>=0){X--;a[i][0]=X;a[i][1]=Y;F-=Y0-Ye;}else{Y--;a[i][0]=X;a[i][1]=Y;F+=X0-Xe;}}}void si(){F=0;N=Xe-X0+Y0-Ye; X=X0;Y=Y0;for(i=1;i<=N;i++){if(F>=0){X++;a[i][0]=X;a[i][1]=Y;F-=Y0-Ye;}else{ Y--;a[i][0]=X;a[i][1]=Y;F+=Xe-X0;}}}void te(){N=Ye-Y0;for(i=1;i<=N;i++){if(Ye>0){Y++;a[i][0]=X;a[i][1]=Y;}else if(Ye<0){Y--;a[i][0]=X;a[i][1]=Y;}}}void shuchu(){for(i=0;i<=N;i++){printf("%d ",i);printf("%d,%d\n",a[i][0],a[i][1]);}}3.程序结果例如起点(0,0)终点(6,4)步数坐标11,021,132,142,253,264,274,385,396,3106,4二.圆弧插补1.圆弧插补程序流程图2.圆弧插补程序#include "stdio.h"#include "math.h"int X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4; int i=1,r,f,s;void main(){int m;int menu();void yishun();void yini();void ershun();void erni();void sanshun();void sanni();void sishun();void sini();void shuchu();m=menu();switch(m){case 1:yishun();break;case 2:yini();break;case 3:ershun();break;case 4:yini();break;case 5:sanshun();break;case 6:yini();break;case 7:sishun();break;case 8:yini();break; default:printf("无法插补\n"); }}int menu(){int t;printf("输入原点坐标\n"); scanf("%d,%d",&X0,&Y0); printf("输入起点坐标\n"); scanf("%d,%d",&X3,&Y3); printf("输入终点坐标\n"); scanf("%d,%d",&X4,&Y4); printf("1:顺时针圆弧\n"); printf("2:逆时针圆弧\n"); scanf("%d",&s);X1=X3-X0;Y1=Y3-Y0;X2=X4-X0;Y2=Y4-Y0;r=X1*X1+Y1*Y1;if (X1>=0&&Y1>0&&s==1)t=1;else if (X1>0&&Y1>=0&&s==2) t=2;else if (X1<0&&Y1>=0&&s==1) t=3;else if (X1<=0&&Y1<0&&s==2) t=4;else if (X1<=0&&Y1<0&&s==1) t=5;else if (X1<0&&Y1<=0&&s==2) t=6;else if (X1>0&&Y1<=0&&s==1) t=7;else if (X1>=0&&Y1<0&&s==2) t=8;elset=9;return(t);}void yishun(){do{f=X1*X1+Y1*Y1-r;if(f>=0){Y1--;f-=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{X1++;f+=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(Y1!=0&&(X1!=X2||Y1!=Y2));if(Y1==0){void sishun();sishun();}}void yini(){do{f=X1*X1+Y1*Y1-r;if(f>=0){X1--;f-=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{Y1++;f+=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(X1!=0&&(X1!=X2||Y1!=Y2)); if(X1==0){void erni();erni();}}void ershun(){do{f=X1*X1+Y1*Y1-r;if(f>=0){X1++;f+=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{Y1++;f+=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(X1!=0&&(X1!=X2||Y1!=Y2)); if(X1==0){void yishun();yishun();}}void erni(){do{f=X1*X1+Y1*Y1-r;if(f>=0){Y1--;f-=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{X1--;f-=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(Y1!=0&&(X1!=X2||Y1!=Y2)); if(Y1==0){void sanni();sanni();}}void sanshun(){do{f=X1*X1+Y1*Y1-r;if(f>=0){Y1++;f+=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{X1--;f-=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(Y1!=0&&(X1!=X2||Y1!=Y2)); if(Y1==0){void ershun();ershun();}}void sanni(){do{f=X1*X1+Y1*Y1-r;if(f>=0){X1++;f+=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{Y1--;f+=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(X1!=0&&(X1!=X2||Y1!=Y2)); if(X1==0){void sini();sini();}}void sishun(){do{f=X1*X1+Y1*Y1-r;if(f>=0){X1--;f-=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{Y1--;f-=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(X1!=0&&(X1!=X2||Y1!=Y2)); if(X1==0){void sanshun();sanshun();}}void sini(){do{f=X1*X1+Y1*Y1-r;if(f>=0){Y1++;f+=2*Y1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}else{X1++;f+=2*X1+1;i++;printf("%d ",i);printf("%d,%d\n",X1,Y1);}}while(Y1!=0&&(X1!=X2||Y1!=Y2)); if(Y1==0){void yini();yini();}}3.程序结果例如圆心(0,0)起点(4,3)终点(4,3)步数坐标04,313,323,432,442,551,560,570,48-1,49-2,410-3,411-3,312-4,313-4,214-5,215-5,116-5,017-4,018-4,-119-4,-220-4,-3 21-3,3 22-3,-4 23-2,-4 24-2,-5 25-1,-5 260,-5 270,-4 281,-4 292,-4 303,-4 313,-3 324,-3 334,-2 345,-2 355,-1 365,0 374,0 384,1 394,2 404,3。

相关主题