谁有用C语言编写的直线,圆弧插补程序

Python013

谁有用C语言编写的直线,圆弧插补程序,第1张

给你推荐一本书,<计算机图形学基础>唐泽圣,周嘉玉,李新友写的,我们以前上课用的,上面有常用的直线和圆弧算法,比如数值微分法生成直线,逐点比较法插补圆弧,角度DDA法产生圆弧,基本都有C语言的源程序.你可以搜搜这本书,本来都有源程序的,后来给删掉了~~

贴一个别人的

/*************************************************************************

Function: int ArcXY(double dfx0,double dfy0,double dfrx,

double dfry,int angle)

Description: 在X-Y轴所构成的平面上,以圆弧运动的方式从目前位置经过指

定的参考点到目的点。调用此函数成功将增加运动命令的库存数目。

Parameters:dfx0, dfy0 参考点的X-Y轴座标值

dfrx, dfry 圆心的X-Y轴座标值

angle 插补角度

Calls: 无

Return Value: 大於或等於0 给予此运动命令的编码

小於0失败,传回值的意义可参考错误信息代码

**************************************************************************/

#include <stdio.h>

#include <math.h>

int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle)

int symbol(double number)

main()

{

ArcXY(0,0,-3,5,360)

getch()

}

int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle)

{

FILE *f1

double i,j,dx,dy,dfr,x,y,ang,step,f = 0.01

int flag,tempx,tempy,statex,statey,direction = 1

dfr = sqrt((dfrx - dfx0) * (dfrx - dfx0) + (dfry - dfy0) * (dfry - dfy0))

if(dfx0 == 0)

{

dfx0 = 1

dfrx = dfrx + 1

statex =1

}

if(dfy0 == 0)

{

dfy0 = 1

dfry = dfry + 1

statey =1

}

dfrx = 2 * dfx0 - dfrx

i = dfx0 - dfrx

j = dfy0 - dfry

x = dfx0

y = dfy0

step = ang = 180 * 2 * asin(f/(2*dfr))/3.1415926

if(((dfx0 >0) &&(dfy0 >0)) || ((dfx0 <0) &&(dfy0 <0)))

{

flag = direction

}

if(((dfx0 <0) &&(dfy0 >0)) || ((dfx0 >0) &&(dfy0 <0)))

{

flag = -direction

}

f1=fopen("c:\\c.txt","w+")

if(statex ==1)

{

x = x - 1

}

if(statey ==1)

{

y = y - 1

}

fprintf(f1,"%f,",x)

fprintf(f1,"%f\n",y)

while(ang <angle)

{

dx = f * (j + flag*(f * i)/(2 * dfr))/dfr

dy = f * (i - flag*(f * j)/(2 * dfr))/dfr

tempx = symbol(x)

tempy = symbol(y)

x = x + dx

y = y + dy

fprintf(f1,"%f,",x)

fprintf(f1,"%f\n",y)

if( (tempx !=symbol(x)) || (tempy != symbol(y)) )

{

flag = -flag

}

i = i - dx

j = j + dy

ang = ang + step

}

return 0

}

int symbol(double number)

{

if(number >0)

{

return 1

}

else

{

return -1

}

}

int ArcXY(double dfx0,double dfy0,double dfrx, double dfry,int angle)这个就是子函数,你放到你需要的地方注意参数,按自己需要修改,要么添加返回值返回感兴趣的部分,要么添加参数按照传引用的方法取得,直线的有简单DDA算法的,需要的话明天打上,今天有点晚了.

程序问题是自己检查的,没有人会跟你看程序。 你只要说明方法或者是流程图。 你做的是直线逐点比较。 先砍掉插补程序,看能否画划线,在添加第一象限插补,最后全加上去。 确保每个步骤添加进去的代码没有问题。

原标题:数控车床编程教程,图文实例详解!

第一节数控车床编程基础

一、数控车编程特点

(1) 可以采用绝对值编程(用X、Z表示)、增量值编程(用U、W表示)或者二者混合编程。

(2) 直径方向(X方向) 系统默认为直径编程,也可以采用半径编程,但必须更改系统设定。

(3) X向的脉冲当量应取Z向的一半。

(4)采用固定循环,简化编程。

(5) 编程时,常认为车刀刀尖是一个点,而实际上为圆弧,因此,当编制加工程序时,需要考虑对刀具进行半径补偿。

二、数控车的坐标系统

加工坐标系应与机床坐标系的坐标方向一致,X轴对应径向,Z轴对应轴向,C轴(主轴)的运动方向则以从机床尾架向主轴看,逆时针为+C向,顺时针为-C向,如图2.1.1所示:

加工坐标系的原点选在便于测量或对刀的基准位置,一般在工件的右端面或左端面上。

三、直径编程方式

在车削加工的数控程序中,X轴的坐标值取为零件图样上的直径值,如图2.1.2所示:图中A点的坐标值为(30,80),B点的坐标值为(40,60)。采用直径尺寸编程与零件图样中的尺寸标注一致,这样可避免尺寸换算过程中可能造成的错误,给编程带来很大方便。

四、进刀和退刀方式

对于车削加工,进刀时采用快速走刀接近工件切削起点附近的某个点,再改用切削进给,以减少空走刀的时间,提高加工效率。切削起点的确定与工件毛坯余量大小有关,应以刀具快速走到该点时刀尖不与工件发生碰撞为原则。如图2.1.3所示。

五、绝对编程与增量编程

X、Z表示绝对编程,U、W表示增量编程,允许同一程序段中二者混合使用。

如图2.1.4所示,直线A→B ,可用:

绝对:G01 X100.0 Z50.0

相对: G01 U60.0 W-100.0

混用:G01 X100.0 W-100.0

或 G01 U60.0 Z50.0

第2节数控车床的基本编程方法

数控车削加工包括内外圆柱面的车削加工、端面车削加工、钻孔加工、螺纹加工、复杂外形轮廓回转面的车削加工等,在分析了数控车床工艺装备和数控车床编程特点的基础上,下面将结合配置FANUC-0i数控系统的数控车床重点讨论数控车床基本编程方法。

一、坐标系设定

编程格式G50 X~ Z~

式中X、Z的值是起刀点相对于加工原点的位置。G50使用方法与G92类似。

在数控车床编程时,所有X坐标值均使用直径值,如图2.1.5所示。

例:按图2.1.5设置加工坐标的程序段如下:

G50 X 121.8 Z 33.9

工件坐标系的选择指令G54~G59

例如,用G54指令设定如图所示的工件坐标系。

首先设置G54原点偏置寄存器:

G54 X0 Z85.0;

然后再在程序中调用:

N010 G54;

说明:

1、G54~G59是系统预置的六个坐标系,可根据需要选用。

2、G54~G59建立的工件坐标原点是相对于机床原点而言的,在程序运行前已设定好,在程序运行中是无法重置的。

3、G54~G59预置建立的工件坐标原点在机床坐标系中的坐标值可用 MDI 方式输入,系统自动记忆。

4、使用该组指令前,必须先回参考点。

5、G54~G59为模态指令,可相互注销。

二、基本指令G00、G01、G02、G03、G04、G28

1.快速点位移动G00

格式:G00X(U)_Z(W)_;

其中,X(U)_、Z(W)_为目标点坐标值。

2.直线插补G01

格式:G01 X(U)_Z(W)_ F_;

其中,X(U)、Z(W)为目标点坐标,F为进给速度。

机床执行G01指令时,如果之前的程序段中无F指令,在该程序段中必须含有F指令。G01和F都是模态指令。

3.圆弧插补G02、G03

顺时针圆弧插补用G02指令,逆时针圆弧插补用G03指令。

1) 用圆弧半径R和终点坐标进行圆弧插补

格式:G18 G02(G03)X(U)_Z(W)_ R _ F_;

其中:X(U)和Z(W)为圆弧的终点坐标值,

绝对值编程方式下用X和Z,增量值编程方式下用U和W。规定圆弧对应的圆心角小于等于180°时,用“+R”表示;反之,用“-R”表示。

F为加工圆弧时的进给量。

2) 用分矢量和终点坐标进行圆弧插补

格式:G18 G02(G03)X(U)_Z(W)_I _K _F_;

其中:

X(U)和Z(W)为圆弧的终点坐标值,绝对值编程方式下用X和Z,增量值编程方式下用U和W。

I、K分别为圆弧的方向矢量在X轴和Z轴上的投影(I为半径值)。当分矢量的方向与坐标轴的方向不一致时取负号。如图2.1.7所示,图中所示I和K均为负值。

4.暂停指令G04

格式:G04 X(P)_;

其中,X(P)为暂停时间。

X后用小数表示,单位为秒;

P后用整数表示,单位为毫秒。

如 :

G04 X2.0表示暂停2秒;

G04 P1000表示暂停1000毫秒。

5.返回参考点指令G28

G28指令可以使刀具从任何位置以快速点定位方式经过中间点返回参考点。

格式:G28 X _Z _;

其中,X、Z是中间点的坐标值。

三、有关单位设定

1、尺寸单位选择:

格式:G 20 英制输入制式 英寸输入

G 21 公制输入制式 毫米输入 (默认)

2、进给速度单位的设定

每转进给量 编程格式 G95 F~

F后面的数字表示的是主轴每转进给量,单位为mm/r。

例:G95 F0.2 表示进给量为0.2 mm/r。

每分钟进给量 编程格式G94 F~

F后面的数字表示的是每分钟进给量,单位为 mm/min。

例:G94 F100 表示进给量为100mm/min。