3.用C语言(或其他语言)生成程序的数据主体
某产品,其外形是一个很复杂的曲线方程,用宏程序很难(甚至不可能)把它写出来,而Mastercam则无法输入函数方程。此时,借助C语言来生成数据主体。
例3:车工曲线方程如下:
0≤x≤22.1
Y=200.2+140.653√b
b=0.008754(x/168)+6.1455(x/168)2
-4.87544(x/168)3+0.568749(x/168)4
+0.76587(x/168)5
它很难在Mastercam中绘制。用C语言来计算其离散点,过程如下:
#include”math.h”
#include”conio.h”
#include”stdio.h”
Main ()
{
double a,b,d,c,i,e;
FILE*fp;
fp=fopen(”d:\s77.txt”,”w+”);
for(i=0;i<22.1;i=i+0.1)/*③*/
{
c=i/168;
b=0.008754*c+6.1455*c*c-4.87544*c*c*c+
0.568749*c*c*c*c+0.76587*c*c*c*c*c;
d=0.3333*log(b);
e=exp(d);/*①*/
a=200.2+140.65*e;/*②*/
printf(“Z=%.4f”,i);
printf(“X=%.4f\n”,a);
fprintf(fp,”z%.3fX%.3f\n”,i,a);
结果输出到文件S77.TXT*/
}
Printf (”ok”);
getch ()
}
程序①②两句用到了一个公式a=eIna,b开3次方即是6的1/3方。此程序在TC2.0下通过。
运行此程序得到s771.txt文件,用编辑器(任何一个,如记事本)打开,只要在头尾加上功能句,就是一个可用的程序。它的原理是:任何曲线可以分成无数很短的曲线,每个很短的曲线可以近似地认为是一段直线。当每段曲线的长度趋于零时,与直线的误差也趋于零。足够多的直线连起来可以替代一段曲线,这样就把曲线转化成有限段的直线。直线的程序很容易实现,问题得到简化。为了尽可能的减小曲线误差,每段曲线长度要尽可能的短,所以程序中的循环步长(控制曲线长度,注③i=i+0.1中的0.1)可以取得很小。但这样做成的程序会很大,有大量的冗余数据产生。曲率与误差成正比,因为步长固定,在曲率小的地方误差小,曲率为零(即直线)时则有大量的无用数据(完全可以弃掉而不影响程序),而在曲线曲率大的地方误差较大。新生代机床其数控系统容量都很大,所以不必过多考虑程序的大小,以保证曲线精度(线轮廓度)为第一要务。如果要生成一个没有冗余的短小程序,要用到二次求导等数学知识,非常复杂,在此处不作讨论。