实 验 报 告
实验内容:DDA法直线和圆弧插补 2011年9月26日 院系:物科院 班级:085 学号:07080518 姓名:陈实
实验目的:
利用DDA法的插补原理,编写直角坐标系下的直线、圆弧插补程序,观察屏幕上仿真的运动轨迹,掌握DDA法的插补原理。
实验原理:
属自己奋发的基本原理是:用参数方程表示运动轨迹;对参数方程求导得到速度,再近似积分回复运动轨迹原函数。
如图1,动点y轴坐标参数方程为:y=f(t), 对应的y速度分量为: Vy=f’(t)
Vy对t的积分运算,就是0—t时刻y方向上的位移。从几何概念上讲,就是求函数曲线Vy= f’(t) 所包围的面积F,即:
若把自变量t的积分区间[0,t]等分成许多有限的小区间,Δt(其中得Δt=t-t),这样,求面积可以近似转化成求有限个小区间面积之和,即:
数字运算时,Δt一般取最小单位“1”,即一个脉冲当量,则 由此可见,函数的积分运算变成了变量的求和运算。
1.DDA直线插补
设我们要对x-y平面上的直线进行插补运算,直线起点为坐标原点o,终点为E(xe,ye):如图2所示:
假定Vx和Vy分别表示动点在x和y方向的移动速度,对直线函数来说,Vx和Vy是常数,则下式成立:
式中K为比例系数。
在Δt时间内,x和y位移增量的参数方程为:
动点从远点走向终点的过程可以看作是各坐标每经过一个单位时间间隔Δt分别以增量KXe和KYe同时累加的结果。经过m次累加后,x和y分别都到达终点E( ),即下式成立:
可得软件框图如下:
2、DDA法圆弧插补:
以第一象限逆圆为例,设刀具沿圆弧AB移动,半径为R,刀具的切向速度为V,P(x,y)为动点,如图:
则有关系:
式中K为比例常数。因为半径R为常数,切向速度v为均匀,所以K可以认为是常数、 在单位时间增量Δt内,x和y位移增量的参数方程可表示为:
动点从A点走向B点的过程可以看作是各坐标每经过一个单位时间间隔Δt分别以增量Ky和Kx同时累加的结果。经过m次累加以后,x和y分别都到达B点,即下式成立:
软件框图要做一定修改如下:
实验步骤:
1、DDA直线插补程序:
int
sigma_x=0,sigma_y=0,xi=0,yi=0,i=0,num=0; int delta_x,delta_y; setcolor(10);
line(x0,y0,x0+Xe*delta,y0-Ye*delta); moveto(x0,y0);setcolor(12); while(xisigma_x=sigma_x+Xe; sigma_y=sigma_y+Ye; if(sigma_x>=Q){delta_x=1;sigma_x=sigma_x-Q;}
else {delta_x=0;} if(sigma_y>=Q)
{delta_y=1;sigma_y=sigma_y-Q;} else {delta_y=0;} yi=yi+delta_y; xi=xi+delta_x;
linerel(delta_x*delta,-delta_y*delta);
dis_msg(num,sigma_x,sigma_y,delta_x,delta_y,xi,yi); num++; }
2、DDA圆弧插补实验程序:
int
sigma_x=0,sigma_y=0,xi=R,yi=0,i=0,num=0; int delta_x,delta_y; setcolor(10);
arc(x0,y0,0,90,R*delta); moveto(x0+R*delta,y0); setcolor(12);
delta_x=0;delta_y=0; while(xi>=0||yi<=R) {
getch();
sigma_x=sigma_x+xi;sigma_y=sigma_y+yi;
if(sigma_x>=Q)
{delta_y=1;sigma_x=sigma_x-Q;} else {delta_y=0;} if(sigma_y>=Q)
{delta_x=1;sigma_y=sigma_y-Q;} else {delta_x=0;}
yi=yi+delta_y;xi=xi-delta_x;
linerel(-delta_x*delta,-delta_y*delta);
dis_msg(num,sigma_x,sigma_y,delta_x,delta_y,xi,yi); num++; }
实验中所遇问题分析: