《2022年插补程序源代码》由会员分享,可在线阅读,更多相关《2022年插补程序源代码(14页珍藏版)》请在金锄头文库上搜索。
1、1 插补程序源代码目录1 逐点比较法插补 c 语言程序源代码02 2 逐点比较法圆弧插补VB源程序07 3 逐点比较法直线插补VB源程序11 4 时间分割法直线插补参考VB程序13 5 时间分割法圆弧插补VB源程序14 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 2 1 逐点比较法插补c 语言程序源代码#include conio.h#include graphics.h#include process.h#define
2、Ni_circle 0#define Shun_circle 1void init_graph();void draw_Base_circle();void draw_cabu_circle();void close_graph();void acrroods();static float x0,y0;void line_cabu(), draw_line(),draw_line_cabu();void line_cabu() /* 此函数控制直线插步两次*/ int i;init_graph();sleep(1);for(i=0;i2;i+)line(0,120,300,120); outt
3、extxy(310,120,Z);line(100,10,100,300); outtextxy(110,300,X);outtextxy(90,130,O);draw_line();if(i=0)draw_line_cabu(6);else draw_line_cabu(2);gotoxy(50,5);getch();cleardevice();setcolor(WHITE);void draw_line()/*画直线 */line(100,120,600,450);textcolor(YELLOW);directvideo=0;gotoxy(45,5); cprintf( Line fro
4、m:X0 Y0 Z0 );gotoxy(45,6); cprintf( Line to :X500 Y0 Z330);gotoxy(45,7); cprintf(Units :Pixel);gotoxy(45,8); cprintf( Line now:);void draw_line_cabu(int step)/*关键的直线插补函数*/名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 3 int Xe=600,Ye=450;
5、float Fm,Xm=100,Ym=120;setcolor(RED);moveto(Xm,Ym);while(Xm=Xe&Ym=0)Xm=Xm+step;elseYm=Ym+step;lineto(Xm,Ym);gotoxy(55,8); printf(X%3.0f Y0 Z%3.0f,Xm-100,Ym-120);delay(1100);/* 圆插补部分的函数区*/void init_graph() /* 图形系统初始化*/int gdrive=DETECT,gmode;initgraph(&gdrive,&gmode,);cleardevice();void acrroods() /*
6、 屏幕中心坐标 */x0=getmaxx()/2;y0=getmaxy()/2;void draw_Base_circle() /* 画圆及写参数*/ line(x0-200,y0,x0+200,y0); outtextxy(x0+220,y0,Z); line(x0,y0-180,x0,y0+180); outtextxy(x0+10,y0+180,X); outtextxy(x0-10,y0+10,O); circle(x0,y0,150); textcolor(YELLOW); directvideo=0; gotoxy(46,2);cprintf(Circle start:X0 Y0
7、Z150); gotoxy(46,3);cprintf(Circle end :X0 Y0 Z150); gotoxy(46,4);cprintf(Units :Pixel); gotoxy(46,5);cprintf(Circle now:);void close_graph() /* 关图形系统 */名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 4 closegraph();void draw_cabu_circle(i
8、nt sstep,int Directory)/*关键的圆插补函数*/int flag=0;float Fm,Xm,Ym;Xm=x0+150; Ym=y0;moveto(Xm,Ym);setcolor(RED);while(1) /* 分象限,顺圆和逆圆讨论*/Fm=(Xm-x0)*(Xm-x0)+(Ym-y0)*(Ym-y0)-150*150;/*圆判断公式 */if(Fm=0)if(!Directory) /* 逆圆判断 */if(Xm=x0&Ym=y0)if(flag) break; /*if语句判断象限,以下一样*/else Xm=Xm-sstep; if(Xm=x0&Ym=y0)fl
9、ag=1; Ym= Ym+sstep;if(Xm=y0)Xm=Xm+sstep;if(Xm=x0&Ym=y0)Ym=Ym-sstep;else /*it is Directorys else*/if(Xmx0&Ymy0)Ym=Ym+sstep;if(Xm=x0&Ym=y0)Xm=Xm+sstep;if(Xmy0) flag=1; Ym= Ym-sstep;if(Xm=x0&Ym=y0) if(flag) break;Xm=Xm-sstep;else /*it is Fms else*/if(!Directory) if(Xmx0&Ymy0)名师资料总结 - - -精品资料欢迎下载 - - -
10、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 5 if(flag) break;else Ym=Ym-sstep; if(Xm=x0&Ym=y0)flag=1; Xm=Xm-sstep;if(Xm=y0)Ym=Ym+sstep;if(Xm=x0&Ym=y0)Xm=Xm+sstep; elseif(Xmx0&Ymy0)Xm=Xm+sstep; if(Xm=x0&Ym=y0)Ym= Ym-sstep;if(Xm=y0)flag=1; Xm=Xm-sstep;if(Xm=x0&Ym=
11、y0) if(flag) break;else Ym= Ym+sstep;lineto(Xm,Ym);gotoxy(58,5); printf(X%3.0f Y0 Z%3.0f ,Ym-y0,Xm-x0);delay(800);void circle_demo(int Directory) /* 控制圆插补两次*/int i=0,sstep;init_graph();sleep(2);acrroods(&x0,&y0);for(i=0;i= 0 Thenx 动点= x 动点- 1:Line -Step(0, -x 步长 ), vbRedElsez 动点= z 动点+ 1:Line -Step(
12、z 步长 , 0), vbRedEnd If偏差计算动点象限判别If 象限标志 1 ThenGoTo xxEnd If单步连续判断LoopElseIf 顺逆标志= 逆 ThenDo Until (x动点- x 终点 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Thenz 动点= z 动点- 1:Line -Step(-z 步长 , 0), vbRedElsex 动点= x 动点+ 1: Line -Step(0, x 步长 ), vbRedEnd If DoEvents偏差计算动点象限判别If 象限标志 1 ThenGoTo xxEnd If Loop End I
13、f Case 2: 单步连续判断名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 8 If 顺逆标志= 顺 Then 第二象限插补Do Until (x动点- x 终点 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Thenz 动点= z 动点- 1:Line -Step(-z 步长 , 0), vbRedElsex 动点= x 动点- 1:Line -Step(0, -x 步长 ), vbRedEn
14、d If 偏差计算动点象限判别If 象限标志 2 ThenGoTo xx End If LoopElseIf 顺逆标志= 逆 ThenDo Until (x动点- x 终点 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Thenx 动点= x 动点+ 1:Line -Step(0, x 步长 ), vbRed Elsez 动点= z 动点+ 1:Line -Step(z 步长 , 0), vbRedEnd If 偏差计算动点象限判别If 象限标志 2 ThenGoTo xxEnd If LoopEnd IfCase 3: 单步连续判断If 顺逆标志= 顺 Then
15、第三象限插补Do Until (x动点- x 终点 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Thenx 动点= x 动点+ 1:Line -Step(0, x 步长 ), vbRedElsez 动点= z 动点- 1:Line -Step(-z 步长 , 0), vbRedEnd If DoEvents偏差计算动点象限判别名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 9 If 象限标志 3
16、ThenGoTo xxEnd If LoopElseIf 顺逆标志= 逆 ThenDo Until (x动点- x 终点 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Thenz 动点= z 动点+ 1: Line -Step(z步长 , 0), vbRedElsex 动点= x 动点- 1:Line -Step(0, -x 步长 ), vbRedEnd If 偏差计算动点象限判别If 象限标志 3 Then GoTo xxEnd If LoopEnd IfCase 4: 单步连续判断If 顺逆标志= 顺 Then 第三象限插补Do Until (x动点- x 终点
17、 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Then z 动点= z 动点+ 1:Line -Step(z 步长 , 0), vbRedElsex 动点= x 动点+ 1:Line -Step(0, x 步长 ), vbRedEnd If 偏差计算动点象限判别 If 象限标志 4 ThenGoTo xxEnd If LoopElseIf 顺逆标志= 逆 ThenDo Until (x动点- x 终点 ) = 0 And (z 动点- z 终点 ) = 0 If 偏差= 0 Thenx 动点= x 动点- 1:Line -Step(0, -x 步长 ), vbRe
18、dElsez 动点= z 动点- 1:Line -Step(-z 步长 , 0), vbRed名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - 10 End If 偏差计算动点象限判别If 象限标志 4 ThenGoTo xxEnd If LoopEnd IfEnd Select End Sub名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
19、- - - - - 第 10 页,共 14 页 - - - - - - - - - 11 3 逐点比较法直线插补VB源程序Sub 偏差计算 () 偏差 = Abs(x终点 ) z 动点 - x动点 Abs(z终点 ) End Sub Sub 插补 () Dim c As Integer Select Case 象限标志 Case 1: 第一象限插补 Do Until x动点 + z动点 = 总步数 If 偏差 = 0 Then x动点 = x动点 + 1: Line -Step(0, x步长 ), vbRed Else z动点 = z动点 + 1: Line -Step(z步长 , 0), v
20、bRed End If 偏差计算 Loop Case 2: 第二象限插补 c = x终点 : x终点 = z 终点 : z终点 = -c c = x步长 : x步长 = z步长 : z步长 = -c Do Until x动点 + z动点 = 总步数 If 偏差 = 0 Then x动点 = x动点 + 1: Line -Step(x步长 , 0), vbRed Else z动点 = z动点 + 1: Line -Step(0, z步长 ), vbRed End If 偏差计算 Loop Case 3: 第三象限插补 x步长 = -x步长 : z步长 = -z步长 Do Until x动点 +
21、z动点 = 总步数 If 偏差 = 0 Then x动点 = x动点 + 1: Line -Step(0, x步长 ), vbRed Else z动点 = z动点 + 1: Line -Step(z步长 , 0), vbRed End If 偏差计算 Loop 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - 12 Case 4: 第四象限插补 c = x终点 : x终点 = -z终点 : z终点 = c c = x步长 :
22、x步长 = -z步长 : z步长 = c Do Until x动点 + z动点 = 总步数 If 偏差 = 0 Then x动点 = x动点 + 1: Line -Step(x步长 , 0), vbRed Else z动点 = z动点 + 1: Line -Step(0, z步长 ), vbRed End If 偏差计算 Loop End Select End Sub 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - - - 13 4
23、 时间分割法直线插补参考VB程序Sub 插补 ()Dim l, K, a, B, f1, t x 动点对起点= 0: z 动点对起点= 0f1 = f 10: t = Ts / 60000l = Sqr(x 终点对起点 2 + z 终点对起点 2)K = f1 t / la = Sqr(x 动点对起点- x 终点对起点) 2 + (z 动点对起点- z 终点对起点 ) 2)x 步长= K x 终点对起点: z 步长= K z 终点对起点 :B = Sqr(z 步长 2 + x 步长 2) Do Until a = B / 2x 动点对起点= x 动点对起点+ x 步长 : z 动点对起点= z
24、 动点对起点+ z 步长a = Sqr(x 动点对起点- x 终点对起点) 2 + (z 动点对起点- z 终点对起点 ) 2)Line -Step(z 步长 系数 , x 步长 系数 ), vbRedx 动点对原点= x 动点对起点+ x 起点对原点 : y 动点对原点= y 动点对起点+ y 起点对原点 : z 动点对原点= z 动点对起点+ z 起点对原点LoopEnd Sub名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - -
25、 - 14 5 时间分割法圆弧插补VB源程序圆弧(切线法):Sub 插补 ()Dim 区间符号As IntegerDim x, y, z As DoubleDim KDim 径向误差 , R 动 As Double顺逆符号判别读数据If R 0.001 ThenElseTs = Ts / 60000步长= f Ts: K = 步长/ Rx 动点对圆心= -x 圆心对起点/ 系数 : z 动点对圆心= -z 圆心对起点/ 系数End If x = (x 动点对圆心- x 终点对圆心 ) 2 + (z 动点对圆心- z 终点对圆心 ) 2) 0.5y = 3 步长 系数Do Until x = y
26、deltaZ = - 顺逆符号 K x 动点对圆心deltaX = 顺逆符号 K z 动点对圆心Line -Step(deltaZ, deltaX), vbRedx 动点对圆心= x 动点对圆心+ deltaX: z 动点对圆心= z 动点对圆心+ deltaZ: x 动点对原点= x 动点对圆心+ x 圆心对原点: y 动点对原点= y 动点对圆心+ y 圆心对原点 : z 动点对原点= z 动点对圆心+ z 圆心对原点: x = (x 动点对圆心- x 终点对圆心 ) 2 + (z 动点对圆心- z 终点对圆心 ) 2) 0.5:y = 3 步长 系数R 动 = Sqr(x 动点对圆心 2 + z 动点对圆心 2) LoopEnd Sub名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -