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)||(Yet=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