满意答案
daocitiwen
2014.03.16
采纳率:59% 等级:12
已帮助:9668人
下面为C语言画凸轮形状程序
#include"stdarg.h"
#include"stdio.h"
#include"graphics.h"
#include"math.h"
#define H 60 /*最大行程*/
#define W 7.5 /*角速度(度/秒)*/
#define K 5 /*循环步骤*/
#define A1 45 /*各段角度*/
#define A2 210
#define A3 240
#define A4 360
#define X0 400 /*凸轮转轴坐标*/
#define Y0 280
#define pi 3.14159
#define t pi/180 /*度--》弧度*/
main() /*主程序*/
{float e,ro,rr,p,so,dx,dy,st,ct,C3,C4,C5; /*变量说明*/
float s[200],ds[200],dv[200],da[200],x[200],y[200],xp[200],yp[200];
int a=DETECT,b,i=0,w=0;
/*----------------------------------------*/
initgraph(&a,&b,"");
e=10; /*偏心距*/
ro=90; /*基圆半径*/
rr=20; /*滚子半径*/
so=sqrt(ro*ro-e*e);
/*-------------------------------------------*/
C3=(300-5*(A1/W))/pow((pi/4),3);/*五次方高斯方和三个参数*/
C4=((26.25(A1/W))-1350)/(pow(pi/4),4);/*五次方高斯方和三个参数*/
C5=(180-3.75(A1/W))/pow((pi/4),5);/*五次方高斯方和三个参数*/
for(p=0;p<=A4;p+=K)
{if(p<=A1)/*第一段:等加速等减速运动*/
{s[i]=C3*pow(p,3)+C4*pow(p,4)+C5*pow(p,5);
ds[i]=3*C3*W*pow(p,2)+4*C4*W*pow(p,3)+5*C5*pow(p,4);
dv[i]=6*C3*W*W*p+12*C4*W*W*pow(p,2)+20*C5*w*w*pow(p,4);
}
if(p>A1&&p<=A2)/*第二段:直线运动*/
{s[i]=30+27.5*(p-A1)/(A2-A1);
ds[i]=27.5*W/(A2-A1);
dv[i]=0;
}
if(p>A2&&p<=A3)/*第三段:正弦加速的减速半段(前三段为推程)*/
{s[i]=57.5+5*((p-A2)/2/(A3-A2)-sin(pi*(p-A2)/(A3-A2))/(2*pi));
ds[i]=5*W(1-cos(pi*(p-A2)/(A3-A2))/2/(A3-A2));
dv[i]=5*pow(W,2)*2*pi*sin(pi*(p-A2)/(A3-A2))/4/(A3-A2)/(A3-A2);
}
if(p>A3)/*第四段:正弦加速(回程)*/
{s[i]=H*(1-(p-A3)/120+sin(pi*(p-A3)/60)/2/pi);
ds[i]=H*W/(A4-A3)*(cos(2*pi*(p-A3)/(A4-A3))-1);
dv[i]=-2*pi*H*W*W/pow((A4-A3),2)*sin(2*pi*(p-A3)/(A4-A3));
}
da[i]=(atan((ds[i]/(W*t)-e)/(so+s[i])))/(t); /*压力角*/
x[i]=X0+(so+s[i])*sin(p*t)+e*cos(p*t); /*理论廓线坐标*/
y[i]=Y0+(so+s[i])*cos(p*t)-e*sin(p*t);
dx=(ds[i]-e)*sin(p*t)+(so+s[i])*cos(p*t); /*x微分*/
dy=(ds[i]-e)*cos(p*t)-(so+s[i])*sin(p*t); /*y微分*/
st=dy/sqrt(dx*dx+dy*dy); /*sin值*/
ct=dx/sqrt(dx*dx+dy*dy); /*cos值*/
xp[i]=x[i]+rr*st; /*外实际廓线坐标*/
yp[i]=y[i]-rr*ct;
i++;
}
/*----------------------------------------------------------*/
circle(X0,Y0,ro); /*画基圆*/
circle(X0,Y0,e); /*画偏距圆*/
for(w=0;w
{ line(x[w],y[w],x[w+1],y[w+1]); /*画理论廓线*/
line(xp[w],yp[w],xp[w+1],yp[w+1]); /*画外实际廓线*/
circle(x[w],y[w],rr); /*画滚子*/
}
circle(x[0],y[0],rr); /*滚子*/
circle(x[0],y[0],5); /*滚轴*/
circle(x[A1/K],y[A1/K],5); /*滚轴*/
circle(x[A2/K],y[A2/K],5);/*滚轴*/
circle(x[A3/K],y[A3/K],5);/*滚轴*/
circle(x[A4/K],y[A4/K],5);/*滚轴*/
line(X0+e,Y0,x[0],y[0]+50);/*3条导路方向线*/
line(X0+e*cos(60*t),Y0-e*sin(60*t),x[60/K],y[60/K]);
line(X0+e*cos(240*t),Y0-e*sin(240*t),x[240/K],y[240/K]);
arc(X0,Y0,0,50,100);/*凸轮转向*/
line(X0+100,Y0,X0+100-5,Y0-15);/*转向箭头*/
line(X0+100,Y0,X0+100+3,Y0-15);/*转向箭头*/
getch();
/*----------------------运动线图---------------------------------------*/
line(0,180,360,180);
line(0,240,360,240);
line(0,360,360,360);
line(0,0,0,480);
line(A1,0,A1,480);
line(A3,0,A3,480);
line(360,0,360,480);
for(w=0;w
{line(w*K,180-s[w],(w+1)*K,180-s[w+1]);
line(w*K,240-ds[w]*4,(w+1)*K,240-ds[w+1]*4);
line(w*K,360-dv[w]*10,(w+1)*K,360-dv[w+1]*10);
getch();
/*--------------------------------数据列表--------------------------------*/
printf(" p s ds dv a \n");
printf("=============================\n");
for(w=0;w<=A4/K;w=w+3)
{printf("%4d%10.2f%8.2f%8.2f%10.2f\n",w*K,s[w],ds[w],dv[w],da[w]);}
getch();
}
}
00分享举报