动点坐标X是Y坐标对t的积分, 而Y是X坐标对t的积分。因此, 由ΔX的叠加产生的溢出去进给Y; 由ΔY的叠加产生的溢出去进给X。圆弧积分器的原理图如图2所示[1]。
求积前, Xi、 Yi中预置圆弧的起点坐标X0、 Y0, 并作左移规格化处理。叠加过程中, 每进给一步动点坐标应作相应的修改, 即: Xi±1→Xi或Yi±1→Yi。修改中是作加l还是减1的运算应当视圆弧所处的象限而定。
具体方法是, 设置JVx、 JVy为积分函数寄存器, JRx、 JRy为余数寄存器。在起点时, JVx和Jvy分别寄存起始坐标X0、 Y0,对于第一象限逆圆来说, 在插补过程中, JRy每溢出一个Δy脉冲, JVx应该加1; JRx每溢出一个Δx脉冲, JVy应减1。对于其他各种情况的DDA法圆弧插补, JVx和Jvy是加1还是减1, 取决于动点坐标所在象限及圆弧走向[2]。
对不同象限坐标修正见表1。
2.2 程序实现
给类CCircleView增加数据成员:
CPoint endPoint; //起点 (点1)
CPoint startPoint; //终点 (点2)
int m[20000][2]; //存储动点坐标的二维数组
给类CCircleView增加成员函数:
void change(int x, int *a); //为二维数组赋值
在change()成员函数中设置部分变量:
int sumx; //x坐标累加器
int sumy; //y坐标累加器
int q; //累加器容量
int flag; //是否溢出标志
int xi,yi; //x,y坐标值
以下给出部分程序代码。
用DDA法实现圆的插补—确定各动点的坐标, 并存储在
二维数组m[][]中:
void CCircleView::change(int x, int *a)
{ int sumx,
int xi,yi;
sumx=0;
xi=x; yi=0;
q=4096;
for(j=1; j<=q; j++)
{ m[j][0]=0; m[j][1]=0; }
j=1;
while(xi>0)
{ sumx+=xi;
if(sumx>=q)
{ yi++; m[j][1]=yi; m[j][0]=xi; sumx-=q; flag=1; }
if(
{ xi--; m[j][0]=xi; m[j][1]=yi;
if(flag==1) j++;
}
*a=j-1;
}
鼠标左键拖动后松开触发OnLButtonUp成员函数代码[3]
:
void CCircleView::OnLButtonUp(UINT nFlags, CPoint point)
{ blsDown=false;
CClientDC dc(this);
dc.Ellipse(&rect);
int center_x=(startPoint.x+endPoint.x)/2, center_y=(startPoint.
y+endPoint.y)/2;
double r=sqrt(abs((endPoint.x-startPoint.x)*
(endPoint.x-startPoint.x))+abs((endPoint.y-startPoint.y)*
(endPoint.y-startPoint.y)))/2;
int x0=center_x+0, y0=center_y+0;
int *num,b,i; num=&b;
change(r,num);
m[0][0]=r; m[0][1]=0; CClientDC dc1(this);
CPen pen(PS_SOLID,1,RGB(0,255,255));
dc1.SelectObject(&pen);
dc1.MoveTo(x0+r,y0) ;
//第一象限
for(i=1;i<=*num;i++)
{ dc1.LineTo(x0+m[i][0],y0+m[i][1]);
for(long j=0; j<=999999; j++);
}
//第二象限
for(i=*num; i>=0; i--)
{ dc1.LineTo(x0-m[i][0],y0+m[i][1]);
for(long j=0; j<=999999; j++);
}
//第三象限
for(i=0; i<=*num; i++)
{ dc1.LineTo(x0-m[i][0],y0-m[i][1]);
for(long j=0; j<=999999; j++);
}
//第四象限
for(i=*num; i>=0; i--)
{ dc1.LineTo(x0+m[i][0],y0-m[i][1]);
for(long j=0; j<=999999; j++);
}
CView::OnLButtonUp(nFlags, point);
}
2.3 系统运行的结果
系统采用Visual C++6.0可视化开发工具编程, 实现了直线和圆弧插补算法。圆弧插补算法编译运行后的仿真结果如图4所示。
本文由 伯特利数控文章 整理发表,文章来自网络仅参考学习,本站不承担任何法律责任。
http://www.bethel-cnc.com/bethel/news/
2018-11
0 引言能源是我国机械制造业发展的必要条件,但数控加工中心在运行的过程中资源浪费情况较为严重,进而在这一过程中,为了能够降低资源的消耗量,需要对数控加工中心进行合理优化,使工作人员在对对数控加工中心进行加工的过程中,提高工作效率,减少劳动量,另外,为了提高数控加工中心的工作效率,… [了解更多]
2018-10
随着 数控 技术的出现,不同形式的数控加工设备相继使用在各个生产行业,例如,数控 车床、加工中心以及数控 加工中心等,而且目前 数控 技术已经向智能化方向发展[1-2]。在这样的形势下,数控 机床的设计与组装已经成为本科机电专业学生的重要实践课程。通过设计与组装,学生不仅可以掌握… [了解更多]
2018-10
随着制造业的不断发展,数控加工中心在制造领域中发挥着重要 的作用。夹具在数控加工中心加工过程中,一方面是对待加工零件进 行夹紧,防止其在加工过程中移位;另一方面是对零件起到定位 作用。尤其是在加工特殊零件时,合适的夹具可以更好的保证加 工精度,使加工过程更为流畅、高效,也能够有效… [了解更多]
2018-10
1 以铣代钻加工孔的重要意义在传统的孔加工中,一般的孔加工方法是钻中心孔—钻孔—扩孔(铰孔)—镗孔等方式才可满足孔的加工要求,对于在数控加工中心上的多孔加工,这种孔的加工方式势必会降低加工效率,加大劳动强度,提高加工成本,除此之外,由于钻头刚性差,扭矩和轴向力等方面的问题, 在加… [了解更多]