第五章 计算机辅助设计
5.0 概述
5.1 数表的计算机处理
5.2 线图的计算机处理
5.3 数表的公式化处理
5.4 数据库的基本原理与应用
5.0 概述设计数据数表 线图常数数表 普通线图列表函数程序化
(数组)
单个编程处理文件化 数据库离散为数组插值计算 函数拟合直接应用公式折线图带有公式处理方法数据类型设计数据类型及常用处理方法
5.1 数表的计算机处理技术
5.1.1 数表的数组化一维数表例:由三角胶带包角α查取修正系数k
α
用 2个一维数组进行程序化。
float alfa[8]={90.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0};
float kalfa[8]={0.68,0.74,0.79,0.83,0.86,0.89,0.92,0.95};
α 90 100 110 120 130 140 150 160
k
α
0.68 0.74 0.79 0.83 0.86 0.89 0.92 0.95
5.1.1 数表的数组化二维数表,齿轮传动工况系数K
A
用二维数组进行程序化
float a[3][3]={{1.0,1.25,1.75},{1.25,1.5,3.0},{1.5,1.75,3.25}};
工作平稳 中等冲击 较大冲击工况系数KK[i][j ]
j=0 j=1 j=2
工作平稳 I=0
1.00 1.25 1.75
轻度冲击 I=1
1.25 1.50 3.00
中等冲击 I=2
1.50 1.75 3.25
检索齿轮传动工况系数C 语言程序,
#include <stdio.h>
main()
{ int i,j;
float ka[3][3]={{1.0,1.25,1.75},{1.25,1.5,3.0},{1.5,1.75,3.25}};
while(1)
{ printf(“输入原动机载荷特性 (0,1,2):,);
scanf(,%d”,&i) ;
if(i>=0&&i<=2) break;
}
while(1)
{ printf(“输入工作机载荷特性 (0,1,2):,);
scanf(,%d”,&j) ;
if(j>=0&&j<=2) break;
}
printf(“得到的齿轮工况系数为 %f,”,ka[i][j]);
}
多维数表,齿形公差 f
f
用三维数组表示 ff[4][6][12]
多维数表,控制量个数大于2的数表,可用多维数组表示。
如齿轮齿形公差表的三维组:
float ff[4][6][12]={ {{3.1,3.6,…,90},{3.4,3.0,…,125},{3.5,3.4,…,140}},
{{3.4,3.0,…,112},{3.5,3.2,…,140},{…},{…},{3.4,…,280}},
{{3.6,3.4,…,160},{3.8,3.8,…,180},{…},{…},{…},{4.5,…,450}},
{{3.0,4.2,…,224},{3.2,4.5,…,250},{…},{…},{…},{5.0,…,500}}
};
5.1.2 数表的文件化数表数组化表示存在的不足:
1)使程序膨胀、累赘,仅适合于小型数表;
2)数据的独立性较差数表文件化,
– 可使程序简练;
– 使数表与应用程序分离;
– 一个数表文件可供多个应用程序使用;
– 提高数据系统的可维护性。
平键数表文件化建立数表文件 C语言程序,
#include <stdio.h>
#define num=12
struct key_GB{ float d1,d2,b,h,t,t1;
} key;
void main()
{ int i;
FILE *fp;
If((fp=fopen(“key.dat”,”w”))==NULL)
{ printf(“Cannot open the data file”);
exit();
}
for(i=0;i<num;i++)
{ printf(“record%d,d1,d2,b,h,t,t1=”,i);
scanf(“%f,%f,%f,%f,%f,%f”,&key.d1,&key.d2,&key.b,&key.h,
&key.t,&key.t1);
fwrite(&key,sizeof(struct key_GB),1,fp);
}
fclose(fp);
}
给定轴径 d尺寸,从,key.dat”文件检索键槽尺寸,
#include <stdio.h>
#define num=12
struct key_GB{ float d1,d2,b,h,t,t1; } key;
void main()
{ int i; FILE *fp;
while(1)
{ printf(“Input the shaft diameter d=”);
scanf(“%f”,&d);
if(d>8&&d<=130) break;
else printf(“The diameter d is not in range,input again!”);
}
for(i=0;i<num;i++)
{ fseek(fp,i*sizeof(struct key_GB),0);
fread(&key,sizeof(struct key_GB),1,fp);
if(d>key.d1&&d<=key.d2)
{ printf(“The key,b=%f,h=%f,t=%f,t1=%f”,key.b,key.h,key.t,key.t1);
break; }
} fclose(fp);
}
5.2 线图的计算机处理技术线图一般处理方法,
附有公式的线图:将公式直接编写到程序中;
一般线图,先将线图离散为数表,进行程序化处理;
复杂线图,分别编程处理。
一般线图的处理当量齿数Z
v
12 14 16 18 22 26 30 40 50
齿形系数Y
3.48 3.22 3.03 3.91 3.73 3.60 3.52 3.40 3.32
x=0时渐开线齿轮当量齿数和齿形系数关系曲线分割离散原则:各分割点间的函数值不致相差很大。
复杂线图的处理对数坐标直线边方程:
CN
y
=lg
C
y
N 10=
2
2
21
21
N NN
pP
N
PP
y
x
lglg
lglg
lglg
lglg
=
若给出 P
x
值,可求得 lgN
y。
可得:
V型皮带选型折线图
void belt(int n,float p,int *k)
{float c;
c=log10(490.0)+(log10(p)-log10(0.8))*(log10(4900.0)-log10(490.0))
/(log10(3.8)-log10(0.8))
if(n>=4900||n>=10**c)
*k=0 ;O型带
else
{ c=log10(100.0)+(log10(p)-log10(1.0))*(log10(3400.0)-log10(100.0))
/(log10(10.5)-log10(1.0))
if(n>=3400||n>=10**c)
*k=1 ;A型带
else
{
……
}
}
}
C语言实现:
5.3 数表的公式化处理
1
11
1
)(
+
++
+
+
=
i
ii
i
i
ii
i
y
xx
xx
y
xx
xx
xg
)()(
1
1
i
ii
ii
i
xx
xx
yy
yxg?
+=
+
+
改写成为:
可见,g(x)是两个基本插值多项式的线性组合。
线性插值 (两点插值)
X x1 x2 x3 ………,x
n
Y y1 y2 y3 ………,y
n
列表函数线性插值 C语言函数程序
float inter(float x,float x1,float x2,float y1,float y2)
{
float y;
y=y1+(y2-y1)/(x2-x1)*(x-x1);
return(y);
}
抛物线插值(三点插值)
3
2313
21
2
3212
131
1
3121
32
))((
))((
))((
))((
))((
))((
)( y
xxxx
xxxx
y
xxxx
xxxx
y
xxxx
xxxx
xg


+


+


=
拉格朗日插值(多点插值)
k
n
k
nkkkkkkk
nkk
y
xxxxxxxxxx
xxxxxxxxxx
xg

=
+?
+?


=
1
1121
1121
))...()()...()((
))...()()...()((
)(
k
n
k
jk
j
kj
j
y
xx
xx
∑∏
=
=
=
=
11
)(
5.3.3 函数拟合

函数插值存在的不足:
①严格通过每个结点,复印了原有的结点误差;
②仍需将各结点数据进行存贮,占用存贮空间。
函数拟合,曲线不要求通过已知结点,仅反映数据变化趋势。
1,拉格朗日 插值曲线
2、函数拟合曲线最小二乘法函数拟合:曲线到各结点误差平方和最小。
步骤:
1)在坐标纸上绘出各结点,根据其趋势绘制曲线图形;
2)确定近似函数,可为多项式、对数函数或指数函数等;
3)用最小二乘法求出待定系数。
0= aφ
0= bφ

=?+ 0)(2
ii
ybxa

=?+ 0).(2.x
i ii
ybxa
xbya?=


=
)(
)(
xxx
yyx
b
ii
ii
∑∑∑
===
+=?==
n
i
ii
n
i
ii
n
i
i
ybxayxfe
1
2
1
2
1
2
)())((φ
例:直线段 f(x)=a+bx的拟合,
误差函数,
求导数,
解方程求得方程系数 a,b:
指数函数最小二乘法拟合:
y=ab
x
对上式两边取对数,转化为线性函数,
lgy=lga+xlgb
令,y ’=lgy,u=lga,v=lgb,则:
y’=u+vx
求出线性方程系数u和v,再根据u,v求出a和b,可得:
y=ab
x
5.4 数据库在CAD/CAM作业中的应用
Visual FoxPro数据库管理系统
是一种关系型模式,为目前应用最广泛的微机型系统,
被称之为大众型数据库管理系统;
提供友好的集成环境,具有Windows 窗口功能;
可通过系统菜单、工具条或命令窗口进行数据库的创建、
维护和各种应用操作,包括数据记录的输入、修改、插入、删除、剪切、拷贝、粘贴等作。
有较强的数据管理功能、丰富的开发工具,用户可利用编辑器、设计器、项目管理器等工具,开发功能齐全的应用程序。
FoxPro数据类型
—字符型 (character):用于表示包括汉字和各类字符在内的字符型变量数值,一个字符占用一个字节,字符型变量最多为254个字节。
—数字型(numeral),用于表示包括正号、负号、小数点及0-9的数字型变量的数值,占用8个字节的内存。
—日期型 (Data):用于表示月、日、年的日期型变量的数值,占8个字节。
—逻辑型 (logical):用于表示由逻辑真或逻辑假构成的逻辑型变量的数值,只用1个字节。
—备注型 (Memory),用于存放由可变长度的ASCⅡ码组成的字段的数值,用10字节引用备注文件。
—货币型(Current),用于表示货币值的变量数值,占用8个字节。
— 通用型 (General),用于存放OLE对象的数值,占用10字节。
数据库的应用实例支承块(GB2235-80)数据库表文件数据库的应用实例轴承型号尺寸/mm 安装尺寸 mm
额定动负荷kN
额定静负荷kN
极限转速
r/min
D D B D1 D3
200 10 30 9 15 25 4.70 2.70 26000
201 12 32 10 17 27 4.80 2.70 24000
202 15 35 11 20 30 6.00 3.55 22000
203 17 40 12 22 35 7.50 4.50 20000
204 20 47 14 26 41 10.00 6.30 18000
205 25 52 15 31 46 11.00 7.10 16000
206 30 62 16 36 56 15.20 10.20 13000
207 35 72 17 42 65 20.10 13.90 11000
208 40 80 18 47 73 25.60 18.10 10000
209 45 85 19 52 78 25.60 18.10 9000
210 50 90 20 57 83 27.50 20.20 8500
深沟球轴承数据库结构定义:
数据记录输入:
APPEND
或,EDIT
或,BROWSE
轴承型号:
内径d:
外径 D:
宽度 B:
轴肩 D1:
孔径 D3:
动负荷: