DDA圆弧插补.docx
- 文档编号:6938712
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:13
- 大小:310.77KB
DDA圆弧插补.docx
《DDA圆弧插补.docx》由会员分享,可在线阅读,更多相关《DDA圆弧插补.docx(13页珍藏版)》请在冰豆网上搜索。
DDA圆弧插补
一.实验名称:
DDA圆弧插补(四象限、左移规格化、半加载、全加载)
二.实验原理:
三.实验内容:
#include
#include
voidmain()
{
intxa,ya,xe,ye;/*起点和终点横纵坐标*/
intjx,jy,rx,ry;
intdx,dy,ex,ey;
intix,iy;/*ix,iy为在程序运行过程中各点的横纵坐标*/
inta,b,c,d;
inti=1,w;
printf("半加载及左移规格化顺弧请输入1,逆弧输入2\n");
printf("全加载及左移规格化顺弧请输入3,逆弧输入4\n");
scanf("%d",&w);
printf("请输入圆弧的起点和终点坐标\n");
scanf("%d,%d,%d,%d",&xa,&ya,&xe,&ye);
jx=abs(ya),jy=abs(xa);/*给累加变量赋初值*/
rx=ry=dx=dy=0;
ix=xa,iy=ya;/*定义刀具起点*/
ex=abs(xa-xe);
ey=abs(ya-ye);
/*调用顺弧计算程序*/
if(w==1)
{
while(jx<8&&jy<8)
{
jx=jx*2;
jy=jy*2;
i=i*2;
}/*左移规格化*/
rx=ry=16;/*半加载赋值*/
for(;ex>0||ey>0;)
{
if((xa>0&&ya>0)||(xa==0&&ya>0))
a=1,b=-1,c=-1,d=1;
elseif((xa<0&&ya>0)||(xa<0&&ya==0))
a=1,b=1,c=1,d=-1;
elseif((xa<0&&ya<0)||(xa==0&&ya<0))
a=-1,b=1,c=-1,d=1;
elseif((xa>0&&ya<0)||(xa>0&&ya==0))
a=-1,b=-1,c=1,d=-1;
/*给不同象限走刀的变量赋值*/
if(ex!
=0)/*x方向走刀的计算*/
{
rx=rx+jx;
dx=a*rx/32;
if(dx!
=0)
{ix=ix+dx;
ex=ex-1;
rx=rx%32;
}
}
if(ey!
=0)/*y方向走刀的计算*/
{
ry=ry+jy;
dy=b*ry/32;
if(dy!
=0)
{iy=iy+dy;
ey=ey-1;
ry=ry%32;
}
}
printf("ix=%d,iy=%d\n",ix,iy);/*输出刀具所在点坐标*/
if(dy!
=0)
jx=jx+c*i;
if(dx!
=0)
jy=jy+d*i;
}}
if(w==2)
{
while(jx<8&&jy<8)
{
jx=jx*2;
jy=jy*2;
i=i*2;
}/*左移规格化*/
rx=ry=16;/*半加载赋值*/
for(;ex>0||ey>0;)
{
if((xa>0&&ya>0)||(xa>0&&ya==0))
a=-1,b=1,c=1,d=-1;
elseif((xa<0&&ya>0)||(xa==0&&ya>0))
a=-1,b=-1,c=-1,d=1;
elseif((xa<0&&ya<0)||(xa<0&&ya==0))
a=1,b=-1,c=1,d=-1;
elseif((xa>0&&ya<0)||(xa==0&&ya<0))
a=1,b=1,c=-1,d=1;
/*给不同象限走刀的变量赋值*/
if(ex!
=0)
{
rx=rx+jx;
dx=a*rx/32;
if(dx!
=0)/*x方向走刀的计算*/
{ix=ix+dx;
ex=ex-1;
rx=rx%32;
}
}
if(ey!
=0)/*y方向走刀的计算*/
{
ry=ry+jy;
dy=b*ry/32;
if(dy!
=0)
{iy=iy+dy;
ey=ey-1;
ry=ry%32;
}
}
printf("ix=%d,iy=%d\n",ix,iy);/*输出刀具所在点坐标*/
if(dy!
=0)
jx=jx+c*i;
if(dx!
=0)
jy=jy+d*i;
}}
if(w==3)
{while(jx<8&&jy<8)
{
jx=jx*2;
jy=jy*2;
i=i*2;
}/*左移规格化*/
rx=ry=31;/*全加载赋值*/
for(;ex>0||ey>0;)
{
if((xa>0&&ya>0)||(xa==0&&ya>0))
a=1,b=-1,c=-1,d=1;
elseif((xa<0&&ya>0)||(xa<0&&ya==0))
a=1,b=1,c=1,d=-1;
elseif((xa<0&&ya<0)||(xa==0&&ya<0))
a=-1,b=1,c=-1,d=1;
elseif((xa>0&&ya<0)||(xa>0&&ya==0))
a=-1,b=-1,c=1,d=-1;
/*给不同象限走刀的变量赋值*/
if(ex!
=0)/*x方向走刀的计算*/
{
rx=rx+jx;
dx=a*rx/32;
if(dx!
=0)
{ix=ix+dx;
ex=ex-1;
rx=rx%32;
}
}
if(ey!
=0)/*y方向走刀的计算*/
{
ry=ry+jy;
dy=b*ry/32;
if(dy!
=0)
{iy=iy+dy;
ey=ey-1;
ry=ry%32;
}
}
printf("ix=%d,iy=%d\n",ix,iy);/*输出刀具所在点坐标*/
if(dy!
=0)
jx=jx+c*i;
if(dx!
=0)
jy=jy+d*i;
}}
/*调用逆弧计算程序*/
if(w==4)
{
while(jx<8&&jy<8)
{
jx=jx*2;
jy=jy*2;
i=i*2;
}/*左移规格化*/
rx=ry=31;/*全加载赋值*/
for(;ex>0||ey>0;)
{
if((xa>0&&ya>0)||(xa>0&&ya==0))
a=-1,b=1,c=1,d=-1;
elseif((xa<0&&ya>0)||(xa==0&&ya>0))
a=-1,b=-1,c=-1,d=1;
elseif((xa<0&&ya<0)||(xa<0&&ya==0))
a=1,b=-1,c=1,d=-1;
elseif((xa>0&&ya<0)||(xa==0&&ya<0))
a=1,b=1,c=-1,d=1;
/*给不同象限走刀的变量赋值*/
if(ex!
=0)
{
rx=rx+jx;
dx=a*rx/32;
if(dx!
=0)/*x方向走刀的计算*/
{ix=ix+dx;
ex=ex-1;
rx=rx%32;
}
}
if(ey!
=0)/*y方向走刀的计算*/
{
ry=ry+jy;
dy=b*ry/32;
if(dy!
=0)
{iy=iy+dy;
ey=ey-1;
ry=ry%32;
}
}
printf("ix=%d,iy=%d\n",ix,iy);/*输出刀具所在点坐标*/
if(dy!
=0)
jx=jx+c*i;
if(dx!
=0)
jy=jy+d*i;
}}
}
四.实验结果:
仿真:
半加载及左移规格化顺弧第一象限:
半加载及左移规格化顺弧第三象限:
半加载及左移规格化逆弧第二象限:
半加载及左移规格化逆弧第四象限:
全加载及左移规格化顺弧第一象限:
全加载及左移规格化顺弧第三象限:
全加载及左移规格化逆弧第二象限:
全加载及左移规格化逆弧第四象限:
分析:
本程序默认寄存器是5位,圆弧圆心在原点,圆弧在但一象限内的情况,不考虑其他情况。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDA 圆弧