g代码如下
T1M6
G17
G0Z5.000
G0X0.000Y0.000S15000M3
G0X6.920Y10.816Z5.000
G1Z0.000F240.0
G1X6.461Y10.758F600.0
G3X6.009Y10.361I0.268J-0.763
G1X5.922Y9.917
Y9.008
G3X6.873Y8.456I0.675J0.067
G3X7.237Y8.775I-0.216J0.614
G3X7.291Y9.325I-1.167J0.392
G1X8.406
G3X8.606Y8.584I0.778J-0.187
G3X9.574I0.484J0.573
G3X9.775Y9.008I-0.363J0.431
G1Y10.071
G3X8.816Y10.816I-0.838J-0.089
G1Y16.796
X10.009
X10.034Y11.219
G3X11.329Y9.669I2.077J0.420
G1Y3.814
G3X10.251Y2.999I0.918J-2.336
G3X9.833Y1.768I1.632J-1.239
G1X14.947
G0Z5.000
G0X0.000Y0.000
G0Z5.000
G0X0.000Y0.000
M30
c语言程序:
struct coord
{
double x;
double y;
double z;
double i;
double j;
};//g代码参数结构体
struct coord cord[20];
void get012()//读取g代码中012
{
int h=1;
int m;
double centerx,centery,R,theta,theta0,deltatheta;
if(is2!=0)h=is2;
for(m=0;m0)theta=3/2.*PI;
else
if(cord[m+1].i==0&&cord[m+1].j<0)theta=1/2.*PI;
else if(cord[m+1].i>0)
theta=atan(cord[m+1].j/cord[m+1].i)+PI;
else if(cord[m+1].i<0&&cord[m+1].j>0)
theta=atan(cord[m+1].j/cord[m+1].i)+2*PI;
else if(cord[m+1].i<0&&(cord[m+1].j<0||cord[m+1].j==0))
theta=atan(cord[m+1].j/cord[m+1].i);
if(centerx==cord[m+1].x&¢ery>cord[m+1].y)theta0=3/2.*PI;
else if(centerx==cord[m+1].x&¢erycord[m+1].x)
theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+PI;
else if(centerxcord[m+1].y||centery==cord[m+1].y))
theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+2*PI;
deltatheta=theta0-theta;
if(deltatheta>0)deltatheta=deltatheta-2*PI;
CircleRunin(R*200,theta,deltatheta);//圆弧插补函数
cord[0].x=cord[m+1].x;
cord[0].y=cord[m+1].y;
break;
case '3': printf(" ncircle:\n");
centerx=cord[0].x+cord[m+1].i;
centery=cord[0].y+cord[m+1].j;
R=sqrt(cord[m+1].i*cord[m+1].i+cord[m+1].j*cord[m+1].j);
if(cord[m+1].i==0&&cord[m+1].j>0)theta=3/2.*PI;
else if(cord[m+1].i==0&&cord[m+1].j<0)theta=1/2.*PI;
else if(cord[m+1].i>0)
theta=atan(cord[m+1].j/cord[m+1].i)+PI;
else if(cord[m+1].i<0&&cord[m+1].j>0)
theta=atan(cord[m+1].j/cord[m+1].i)+2*PI;
else if(cord[m+1].i<0&&(cord[m+1].j<0||cord[m+1].j==0))
theta=atan(cord[m+1].j/cord[m+1].i);
if(centerx==cord[m+1].x&¢ery>cord[m+1].y)theta0=3/2.*PI;
else if(centerx==cord[m+1].x&¢erycord[m+1].x)
theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+PI;
else if(centerxcord[m+1].y||centery==cord[m+1].y))
theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+2*PI;
deltatheta=theta0-theta;
if(deltatheta<0)deltatheta=deltatheta+2*PI;
CircleRunin(R*200,theta,deltatheta);//圆弧插补函数
cord[0].x=cord[m+1].x;
cord[0].y=cord[m+1].y;
break;
default:break;
}
if(cord[m+1].z>cord[0].z)//z??????z???
{
raisez();//提刀函数
//printf("raise z:%f\n",cord[1].z);
cord[0].z=cord[m+1].z;
}
if(cord[m+1].z