我编的圆弧逼近插补程序模拟刀具的运动轨迹 输入的是圆心坐标 起点坐标 终点坐标 顺时针或逆时针 输入后以圆心为原点建立新坐标系 输出刀具没走一步的坐标 分为四个象限 顺时针和逆时针两个方向
比如 圆心 0,0
起点 0,4
终点 4,0
顺时针 1
步数 坐标
1 0,3
2 1,3
3 2,3
4 3,3
5 3,2
6 4,2
7 4,1
8 4,0
我编的程序如下 求指教
#include "stdio.h"
#include "math.h"
int X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4;
int 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();shuchu();break;
case 2:yini();shuchu();break;
case 3:ershun();shuchu();break;
case 4:yini();shuchu();break;
case 5:sanshun();shuchu();break;
case 6:yini();shuchu();break;
case 7:sishun();shuchu();break;
case 8:yini();shuchu();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;
else
t=9;
return(t);
}
void yishun()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
Y1--;
f-=2*Y1+1;
}
else
{
X1++;
f+=2*X1+1;
}
}
}
void yini()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
X1--;
f-=2*X1+1;
}
else
{
Y1++;
f+=2*Y1+1;
}
}
}
void ershun()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
X1++;
f+=2*X1+1;
}
else
{
Y1++;
f+=2*Y1+1;
}
}
}
void erni()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
Y1--;
f-=2*Y1+1;
}
else
{
X1--;
f-=2*X1+1;
}
}
}
void sanshun()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
Y1++;
f+=2*Y1+1;
}
else
{
X1--;
f-=2*X1+1;
}
}
}
void sanni()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
X1++;
f+=2*X1+1;
}
else
{
Y1--;
f+=2*Y1+1;
}
}
}
void sishun()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
X1--;
f-=2*X1+1;
}
else
{
Y1--;
f-=2*Y1+1;
}
}
}
void sini()
{
f=X1*X1+Y1*Y1-r;
while(X2!=X1||Y2!=Y1)
{
if(f>=0)
{
Y1++;
f+=2*Y1+1;
}
else
{
X1++;
f+=2*X1+1;
}
}
}
void shuchu()
{
int i=1;
while(X2!=X1||Y2!=Y1)
{
printf("%d ",i);
printf("%d,%dn",X1,Y1);
}
i++;
}