《凸轮设计_c语言编程》由会员分享,可在线阅读,更多相关《凸轮设计_c语言编程(4页珍藏版)》请在金锄头文库上搜索。
1、一、编程:(注:程序中各个符号的含义)PI:常数 s0:理论廓线的基圆半径 s:各个角度的推杆位移 i:转角e:偏心距 rr:滚子半径 r0:基圆半径 h:行程 ya0:许用压力角 yah:弧度制压力角 yaj:角度制压力角 p:曲率半径st:推程段推杆位移 sy:远休段推杆位移 sh:回程段推杆位移 sj:近休段推杆位移dx_di:理论坐标 x 对转角 i 的一次导 dy_di:理论坐标 y 对转角 i 的一次导 d2x:理论坐标 x 对转角 i 的二次导 d2y:理论坐标 y 对转角 i 的二次导ds_di:推杆位移 s 对角度 i 的一次导 d2s:推杆位移 s 对转角 i 的二次导 x
2、li:理论坐标 x yli:理论坐标 y x:实际坐标想 y:实际坐标 ysink:凸轮廓线法向倾斜角 正弦 cosk:凸轮廓线法向倾斜角 余弦子函数 1:求 x、y 的实际坐标子函数 2:求转角 i 处的曲率半径子函数 3:求转角 i 处的压力角 #include “stdio.h“ #include “math.h“ #define PI 3.1415926 void zuobiao (float s0, float s,float ds_di,int i, int e,int rr); ;子函数 1 float qulv (float s0, float s,float ds_di,fl
3、oat d2s,int i, int e,int rr,int r0); ;子函数 2 float yalijiao (float s,float ds_di,int e,int r0); ;子函数 3 main() int e,rr,r0,h,i,ya0=30; float s0,ds_di,d2s,st,sy,sh,sj,yah,yaj,p; scanf(“%d%d%d%d“, printf(“e=%d,rr=%d,r0=%d,h=%dn“,e,rr,r0,h); s0=sqrt(r0*r0-e*e); for(i=0;i=rr) ;ifelse校核推程段曲率半径zuobiao(s0,st
4、,ds_di,i,e,rr); ;调用子函数 1,求 xy 坐标else printf(“chongxinshuru r0,rrn“); else printf(“chongxinshuru e,r0n“);printf(“%f,“,p); ;输出曲率半径printf(“%fn“,yaj); ;输出压力角 else if(i=rr) ;ifelse校核曲率半径zuobiao(s0,sy,ds_di,i,e,rr); ;调用子函数 1,求 xy 坐标else printf(“chongxinshuru r0,rrn“);printf(“%f,“,p); ;输出曲率半径printf(“%fn“,y
5、aj); ;输出压力角 else if(irr) ;ifelse校核曲率半径zuobiao(s0,sh,ds_di,i,e,rr); ;调用子函数 1,求 xy 坐标elseprintf(“chongxinshuru r0,rrn“); printf(“%f,“,p); ;输出曲率半径printf(“%fn“,yaj); ;输出压力角 else ;近休 for(i=211;irr) ;ifelse校核曲率半径zuobiao(s0,sj,ds_di,i,e,rr); ;调用子函数 1,求 xy 坐标elseprintf(“chongxinshuru r0,rrn“);printf(“%f,“,p
6、); ;输出曲率半径printf(“%fn“,yaj); ;输出压力角 void zuobiao (float s0, float s,float ds_di,int i, int e,int rr) float dx_di, dy_di,xli,yli,x,y,sink,cosk; xli=(s0+s)*sin(i*PI/180)+e*cos(i*PI/180); ;计算理论 x 坐标yli=(s0+s)*cos(i*PI/180)-e*sin(i*PI/180); ;计算理论 y 坐标dx_di=(ds_di-e)*sin(i*PI/180)+(s0+s)*cos(i*PI/180);dy
7、_di=(ds_di-e)*cos(i*PI/180)-(s0+s)*sin(i*PI/180); sink=dx_di/sqrt(dx_di*dx_di+dy_di*dy_di); cosk=-dy_di/sqrt(dx_di*dx_di+dy_di*dy_di); x=xli-rr*cosk; ;计算实际 x 坐标y=yli-rr*sink; ;计算实际 y 坐标printf(“%d:%f,%f,“,i,x,y); ;输出角度、xy 实际坐标return; float qulv (float s0, float s,float ds_di,float d2s,int i, int e,in
8、t rr,int r0) float dx_di,d2x,dy_di,d2y,p,q;dx_di=(ds_di-e)*sin(i*PI/180)+(s0+s)*cos(i*PI/180);dy_di=(ds_di-e)*cos(i*PI/180)-(s0+s)*sin(i*PI/180); d2x=(d2s-s0-s)*sin(i*PI/180)+(2*ds_di-e)*cos(i*PI/180);d2y=(d2s-s0-s)*cos(i*PI/180)-(2*ds_di-e)*sin(i*PI/180); q=dx_di*dx_di+dy_di*dy_di;p=sqrt(q*q*q)/fabs(dx_di*d2y-dy_di*d2x); ;计算曲率半径return p;float yalijiao (float s,float ds_di,int e,int r0) float yaj,yah;yah=fabs(atan(ds_di)-e)/(sqrt(r0*r0-e*e)+s); ;计算弧度制压力角yaj=180*yah/PI; ;计算角度制压力角return yaj;二、运行数据结果:e=20,rr=10,r0=50,h=50(注:每组数据依次是转角 i、坐标 x、坐标 y、曲率半径 p、压力角 yaj)