C语言模拟直线插补与圆弧插补程序设计.docx
- 文档编号:27921440
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:23
- 大小:83.70KB
C语言模拟直线插补与圆弧插补程序设计.docx
《C语言模拟直线插补与圆弧插补程序设计.docx》由会员分享,可在线阅读,更多相关《C语言模拟直线插补与圆弧插补程序设计.docx(23页珍藏版)》请在冰豆网上搜索。
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"
inti,X,Y,X0,Y0,Xe,Ye,F,N;
inta[30][2];
voidmain()
{
intm;
intmenu();
voidyi();
voider();
voidsan();
voidsi();
voidte();
voidshuchu();
m=menu();
a[0][0]=X0;
a[0][1]=Y0;
switch(m)
{
case1:
yi();shuchu();break;
case2:
er();shuchu();break;
case3:
san();shuchu();break;
case4:
si();shuchu();break;
case5:
te();shuchu();break;
default:
printf("无法插补\n");
}
}
intmenu()
{
intt;
printf("输入起点坐标\n");
scanf("%d,%d",&X0,&Y0);
printf("输入终点坐标\n");
scanf("%d,%d",&Xe,&Ye);
if(Xe>=X0&&Ye>=Y0)
t=1;
elseif(Xe<=X0&&Ye>=Y0)
t=2;
elseif(Xe<=X0&&Ye<=Y0)
t=3;
elseif(Xe>=X0&&Ye<=Y0)
t=4;
elseif(Xe==X0&&((Ye>Y0&&Y0>=0)||(Ye t=5; else t=6; return(t); } voidyi() { 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; } } } voider() { 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; } } } voidsan() { 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; } } } voidsi() { 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;} } } voidte() { N=Ye-Y0; for(i=1;i<=N;i++) { if(Ye>0) {Y++; a[i][0]=X; a[i][1]=Y;} elseif(Ye<0) {Y--; a[i][0]=X; a[i][1]=Y;} } } voidshuchu() { 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,0 21,1 32,1 42,2 53,2 64,2 74,3 85,3 96,3 106,4 二.圆弧插补 1.圆弧插补程序流程图 2.圆弧插补程序 #include"stdio.h" #include"math.h" intX0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4; inti=1,r,f,s; voidmain() { intm; intmenu(); voidyishun(); voidyini(); voidershun(); voiderni(); voidsanshun(); voidsanni(); voidsishun(); voidsini(); voidshuchu(); m=menu(); switch(m) { case1: yishun();break; case2: yini();break; case3: ershun();break; case4: yini();break; case5: sanshun();break; case6: yini();break; case7: sishun();break; case8: yini();break; default: printf("无法插补\n"); } } intmenu() { intt; 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; elseif(X1>0&&Y1>=0&&s==2) t=2; elseif(X1<0&&Y1>=0&&s==1) t=3; elseif(X1<=0&&Y1<0&&s==2) t=4; elseif(X1<=0&&Y1<0&&s==1) t=5; elseif(X1<0&&Y1<=0&&s==2) t=6; elseif(X1>0&&Y1<=0&&s==1) t=7; elseif(X1>=0&&Y1<0&&s==2) t=8; else t=9; return(t); } voidyishun() { 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) { voidsishun(); sishun(); } } voidyini() { 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) { voiderni(); erni(); } } voidershun() { 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) { voidyishun(); yishun(); } } voiderni() { 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) { voidsanni(); sanni(); } } voidsanshun() { 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) { voidershun(); ershun(); } } voidsanni() { 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) { voidsini(); sini(); } } voidsishun() { 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) { voidsanshun(); sanshun(); } } voidsini() { 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) { voidyini(); yini(); } } 3.程序结果 例如圆心(0,0)起点(4,3)终点(4,3) 步数坐标 14,3 23,3 33,4 42,4 52,5 61,5 70,5 80,4 9-1,4 10-2,4 11-3,4 12-3,3 13-4,3 14-4,2 15-5,2 16-5,1 17-5,0 18-4,0 19-4,-1 20-4,-2 21-4,-3 22-3,3 23-3,-4 24-2,-4 25-2,-5 26-1,-5 270,-5 280,-4 291,-4 302,-4 313,-4 323,-3 334,-3 344,-2 355,-2 365,-1 375,0 384,0 394,1 404,2 414,3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 模拟 直线 圆弧 程序设计