数控技术直线插补程序

  • 格式:docx
  • 大小:12.41 KB
  • 文档页数:2

void PBP_Circle(double step, double XStart, double YStart, double XEnd,

double YEnd, double radius, bool bIsCW)

{

double lDevVal; //偏差值

double xCurVal(0),yCurVal(0); //当前点的实际位置

long StepMount; //插补总步数

long StepCount(0); //插补次数计数器

unsigned short nDir;

long X;

long Y;//当前点所在象限

nDir=Judge_Quadrant((XEnd+XStart)/2,(YStart+YEnd)/2); //象限判断

yCurVal=YStart;

xCurVal=XStart;

X=labs(XEnd-XStart);

Y=labs(YEnd-YStart);

StepMount=(long) (X+Y)/step;

lDevVal=yCurVal*yCurVal+xCurVal*xCurVal-(XStart*XStart+YStart*YStart);

while (StepCount

{//终点判别

/////////////////////////////////////////////////////////////

lDevVal=yCurVal*yCurVal+xCurVal*xCurVal-(XStart*XStart+YStart*YStart);

if (lDevVal>=0)

{ //偏差〉=0

switch(nDir) {

case 1:

xCurVal-=step;

InsertPoint(xCurVal,yCurVal);

break;

case 2:

yCurVal-=step;

InsertPoint(xCurVal,yCurVal);

break;

case 3:

xCurVal+=step;

InsertPoint(xCurVal,yCurVal);

break;

case 4:

yCurVal+=step;

InsertPoint(xCurVal,yCurVal);

break;

} }

else{ //偏差<0

switch(nDir) {

case 1:

yCurVal+=step;

InsertPoint(xCurVal,yCurVal);

break;

case 2:

xCurVal-=step;

InsertPoint(xCurVal,yCurVal);

break;

case 3:

yCurVal-=step;

InsertPoint(xCurVal,yCurVal);

break;

case 4:

xCurVal+=step;

InsertPoint(xCurVal,yCurVal);

break;

}

}

StepCount++;

}

}