数控技术直线插补程序
- 格式: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++; } }