⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 planer.cpp

📁 机械原理课程设计,牛头刨床的动力学分析
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*********************RRPF***************************************/
void rrpf(  int n1,int n2,int n3,
			int ns1, int ns2, int nn1, int nn2, int nexf,
			int k1,int k2,
			double p[20][2],double vp[20][2],double ap[20][2],
			double t[10],double w[10],double e[10],double fr[20][2],double Pr)

{
static double fi[20][2],ti[10],fe[20][2],f[20][2],fk[20][2],
pk[10][2];
double p13x,p13y,ps13x,ps13y,pn13x,pn13y,si1,si2,sgm1,sgm2,fim13;
double fnm13,ff,cc,dd,ps23x,ps23y,pn23x,pn23y,fim23,fnm23,aa,pk3x,
pk3y;
fiti(ns1,ns2,k1,k2,ap,e,fi,ti);
if(nexf!=0)
	{
	extf(p,vp,ap,t,w,e,nexf,fe,Pr);
	}
f[nn1][1]=-fr[nn1][1];
f[nn1][2]=-fr[nn1][2];
f[nn2][1]=-fr[nn2][1];
f[nn2][2]=-fr[nn2][2];
if(nexf==nn1)
	{
f[nn1][1]=fe[nexf][1];
f[nn1][2]=fe[nexf][2];
	}
if(nexf==nn2)
	{
f[nn2][1]=fe[nexf][1];
f[nn2][2]=fe[nexf][2];
	}
p13x=p[n1][1]-p[n3][1];
p13y=p[n1][2]-p[n3][2];
ps13x=p[ns1][1]-p[n3][1];
ps13y=p[ns1][2]-p[n3][2];
pn13x=p[nn1][1]-p[n3][1];
pn13x=p[nn1][1]-p[n3][1];
pn13y=p[nn1][2]-p[n3][2];
si1=(fi[ns1][1]+f[nn1][1]+fi[ns2][1]+f[nn2][1])*cos(t[k2]);
si2=(fi[ns1][2]+f[nn1][2]+fi[ns2][2]+f[nn2][2])*sin(t[k2]);
sgm1=-(si1+si2);
fim13=ps13x*fi[ns1][2]-ps13y*fi[ns1][1];
fnm13=pn13x*f[nn1][2]-pn13y*f[nn1][1];
sgm2=-(fim13+fnm13+ti[k1]);
ff=p13x*cos(t[k2])+p13y*sin(t[k2]);
cc=sgm1*p13x-sgm2*sin(t[k2]);
dd=sgm1*p13y+sgm2*cos(t[k2]);
fr[n1][1]=cc/ff;
fr[n1][2]=dd/ff;
fr[n3][1]=fi[ns1][1]+fr[n1][1]+f[nn1][1];
fr[n3][2]=fi[ns1][2]+fr[n1][2]+f[nn1][2];
fk[k2][1]=-(fi[ns2][1]+fr[n3][1]+f[nn2][1]);
fk[k2][2]=-(fi[ns2][2]+fr[n3][2]+f[nn2][2]);
ps23x=p[ns2][1]-p[n3][1];
ps23y=p[ns2][2]-p[n3][2];
pn23x=p[nn2][1]-p[n3][1];
pn23y=p[nn2][2]-p[n3][2];
fim23=ps23x*fi[ns2][2]-ps23y*fi[ns2][1];
fnm23=pn23x*f[nn2][2]-pn23y*f[nn2][1];
aa=-(fim23+fnm23+ti[k2]);
if(t[k2]==(2.0*atan(1.0)))
	{
pk[k2][1]=p[n3][1];
pk[k2][2]=-aa/fk[k2][1];
	}
	else
	{
pk3x=aa/(fk[k2][2]-fk[k2][1]*sin(t[k2])/cos(t[k2]));
pk3y=pk3x*sin(t[k2])/cos(t[k2]);
pk[k2][1]=pk3x+p[n3][1];
pk[k2][2]=pk3y+p[n3][2];
       }
fr[n2][1]=fk[k2][1];
fr[n2][2]=fk[k2][2];
p[n2][1]=pk[k2][1];
p[n2][2]=pk[k2][2];
}
/*************************RPRF**************************************/
void rprf(  int n1,int n2,
			int ns1, int ns2, int nn1, int nn2, int nexf,
			int k1,int k2,
			double p[20][2],double vp[20][2],double ap[20][2],
			double t[10],double w[10],double e[10],
			double fr[20][2],double fk[20][2],double pk[10][2],double Pr)

{
static double fi[20][2],ti[10],fe[20][2],f[20][2];
double p21x,p21y,ps21x,ps21y,pn21x,pn21y;
double ps11x,ps11y,pn11x,pn11y,si21,si22;
double si11,si12,si1,si2,aa,bb,sgm1,sgm2;
double ff,cc,dd,ps22x,ps22y,pn22x,pn22y;
double fsm22,fnm22,fm2,pk2x,pk2y;
fiti(ns1,ns2,k1,k2,ap,e,fi,ti);
if(nexf!=0)
	{
extf(p,vp,ap,t,w,e,nexf,fe,Pr);
	}
f[nn1][1]=-fr[nn1][1];
f[nn1][2]=-fr[nn1][2];
f[nn2][1]=-fr[nn2][1];
f[nn2][2]=-fr[nn2][2];
if(nexf==nn1)
	{
f[nn1][1]=fe[nexf][1];
f[nn1][2]=fe[nexf][2];
	}
if(nexf==nn2)
	{
f[nn2][1]=fe[nexf][1];
f[nn2][2]=fe[nexf][2];
	}
p21x=p[n2][1]-p[n1][1];
p21y=p[n2][2]-p[n1][2];
ps21x=p[ns2][1]-p[n1][1];
ps21y=p[ns2][2]-p[n1][2];
pn21x=p[nn2][1]-p[n1][1];
pn21y=p[nn2][2]-p[n1][2];
ps11x=p[ns1][1]-p[n1][1];
ps11y=p[ns1][2]-p[n1][2];
pn11x=p[nn1][1]-p[n1][1];
pn11y=p[nn1][2]-p[n1][2];
si21=ps21x*fi[ns2][2]-ps21y*fi[ns2][1];
si22=pn21x*f[nn2][2]-pn21y*f[nn2][1]+ti[k2];
si11=ps11x*fi[ns1][2]-ps11y*fi[ns1][1];
si12=pn11x*f[nn1][2]-pn11y*f[nn1][1]+ti[k1];
si1=si11+si12;
si2=si21+si22;
aa=fi[ns2][1]+f[nn2][1];
bb=fi[ns2][2]+f[nn2][2];
sgm1=-(aa*cos(t[k1])+bb*sin(t[k1]));
sgm2=-(si1+si2);
ff=p21x*cos(t[k1])+p21y*sin(t[k1]);
cc=p21x*sgm1-sgm2*sin(t[k1]);
dd=p21y*sgm1+sgm2*cos(t[k1]);
fr[n2][1]=cc/ff;
fr[n2][2]=dd/ff;
fr[n1][1]=-(fi[ns1][1]+f[nn1][1]+aa+fr[n2][1]);
fr[n1][2]=-(fi[ns1][2]+f[nn1][2]+bb+fr[n2][2]);
fk[k2][1]=-(fi[ns2][1]+f[nn2][1]+fr[n2][1]);
fk[k2][2]=-(fi[ns2][2]+f[nn2][2]+fr[n2][2]);
ps22x=p[ns2][1]-p[n2][1];
ps22y=p[ns2][2]-p[n2][2];
pn22x=p[nn2][1]-p[n2][1];
pn22y=p[nn2][2]-p[n2][2];
fsm22=ps22x*fi[ns2][2]-ps22y*fi[ns2][1];
fnm22=pn22x*f[nn2][2]-pn22y*f[nn2][1];
fm2=-(fsm22+fnm22+ti[k2]);
pk2x=fm2/(fk[k2][2]-fk[k2][1]*sin(t[k1])/cos(t[k1]));
pk2y=pk2x*sin(t[k1])/cos(t[k1]);
pk[k2][1]=p[n2][1]+pk2x;
pk[k2][2]=p[n2][2]+pk2y;
}
/************************PRPF***************************************/
void prpf(  int n1,int n2,int n3,
			int ns1, int ns2, int nn1, int nn2, int nexf,
			int k1,int k2,int k3,int k4,
			double p[20][2],double vp[20][2],double ap[20][2],
			double t[10],double w[10],double e[10],
			double fr[20][2],double fk[20][2],double pk[10][2],double Pr)


{
static double fi[20][2],ti[10],fe[20][2],f[20][2];
double  ps13x,ps13y,pn13x,pn13y,ps23x,ps23y,pn23x,pn23y;
double bb1,bb2,bb,e3,tan3,si1,si2,sgm1,pk13x,pk13y,si3,si4;
double sgm2,e4,tan4,pk23x,pk23y;
fiti(ns1,ns2,k1,k2,ap,e,fi,ti);
if(nexf!=0)
	{
extf(p,vp,ap,t,w,e,nexf,fe,Pr);
	}
f[nn1][1]=-fr[nn1][1];
f[nn1][2]=-fr[nn1][2];
f[nn2][1]=-fr[nn2][1];
f[nn2][2]=-fr[nn2][2];
if(nexf==nn1)
{
f[nn1][1]=fe[nexf][1];
f[nn1][2]=fe[nexf][2];
	}
if(nexf==nn2)
	{
f[nn2][1]=fe[nexf][1];
f[nn2][2]=fe[nexf][2];
	}
ps13x=p[ns1][1]-p[n3][1];
ps13y=p[ns1][2]-p[n3][2];
pn13x=p[nn1][1]-p[n3][1];
pn13y=p[nn1][2]-p[n3][2];
ps23x=p[ns2][1]-p[n3][1];
ps23y=p[ns2][2]-p[n3][2];
pn23x=p[nn2][1]-p[n3][1];
pn23y=p[nn2][2]-p[n3][2];
bb1=(fi[ns1][2]+f[nn1][2]+fi[ns2][2]+f[nn2][2])*sin(t[k4]);
bb2=(fi[ns1][2]+f[nn1][1]+fi[ns2][1]+f[nn2][1])*cos(t[k4]);
bb=-(bb1+bb2);
e3=fabs(cos(t[k3]));
if(e3<0.0001)
{
fk[k1][2]=0;
fk[k1][1]=bb/cos(t[k4]);
	}
	else
	{
tan3=sin(t[k3])/cos(t[k3]);
fk[k1][2]=bb/(sin(t[k4])-tan3*cos(t[k4]));
fk[k1][1]=-fk[k1][2]*tan3;
	}
fr[n3][1]=fk[k1][1]+fi[ns1][1]+f[nn1][1];
fr[n3][2]=fk[k1][2]+fi[ns1][2]+f[nn1][2];
fk[k2][1]=-(fr[n3][1]+fi[ns2][1]+f[nn2][1]);
fk[k2][2]=-(fr[n3][2]+fi[ns2][2]+f[nn2][2]);
si1=ps13x*fi[ns1][2]-ps13y*fi[ns1][1];
si2=pn13x*f[nn1][2]-pn13y*f[nn1][1];
sgm1=-(si1+si2+ti[k1]);
if(e3<0.0001)
	{
pk13x=0;
pk13y=-sgm1/fk[k1][1];
	}
else
	{
pk13x=sgm1/(fk[k1][2]-fk[k1][1]*tan3);
pk13y=pk13x*tan3;
	}
pk[k1][1]=p[n3][1]+pk13x;
pk[k1][2]=p[n3][2]+pk13y;
si3=ps23x*fi[ns2][2]-ps23y*fi[ns2][1];
si4=pn23x*f[nn2][2]-pn23y*f[nn2][1];
sgm2=-(si3+si4+ti[k2]);
e4=fabs(cos(t[k4]));
if(e4<0.0001)
	{
	pk23x=0.0;
	pk23y=-sgm2/fk[k2][1];
	}
	else
	{
tan4=sin(t[k4])/cos(t[k4]);
pk23x=sgm2/(fk[k2][2]-fk[k2][1]*tan4);
pk23y=pk23x*tan4;
	}
pk[k2][1]=p[n3][1]+pk23x;
pk[k2][2]=p[n3][2]+pk23y;
fr[n1][1]=fk[k1][1];
fr[n1][2]=fk[k1][2];
fr[n2][1]=fk[k2][1];
fr[n2][2]=fk[k2][2];
p[n1][1]=pk[k1][1];
p[n1][2]=pk[k1][2];
p[n2][1]=pk[k2][1];
p[n2][2]=pk[k2][2];
}
/****************************RPPF***************************************/
void rppf(  int n1,int n2,int n3,int n4,
			int ns1, int ns2, int nn1, int nn2, int nexf,
			int k1,int k2,int k3,
			double p[20][2],double vp[20][2],double ap[20][2],
			double t[10],double w[10],double e[10],
			double fr[20][2],double fk[20][2],double pk[10][2],double Pr)

{
static double  fe[20][2],f[20][2],fi[20][2],ti[10];
double bb,e3,tan2,tan3,sgm1,sgm2,e2;
double si1,si2,si3,si4,si5,si6;
double p13x,p13y,ps13x,ps13y,pn13x,pn13y,pk13x,pk13y;
double ps24x,ps24y,pn24x,pn24y,pk14x,pk14y,pk24x,pk24y;
fiti(ns1,ns2,k1,k2,ap,e,fi,ti);
if(nexf!=0)
	{
	extf(p,vp,ap,t,w,e,nexf,fe,Pr);
	}
f[nn1][1]=-fr[nn1][1];
f[nn1][2]=-fr[nn1][2];
f[nn2][1]=-fr[nn2][1];
f[nn2][2]=-fr[nn2][2];
if(nexf==nn1)
	{
	f[nn1][1]=fe[nexf][1];
	f[nn1][2]=fe[nexf][2];
	}
	if(nexf==nn2)
	{
	f[nn2][1]=fe[nexf][1];
	f[nn2][2]=fe[nexf][2];
	}
bb=-((fi[ns2][2]+f[nn2][2])*sin(t[k2])+(fi[ns2][1]+f[nn2][1])
     *cos(t[k2]));
e3=fabs(cos(t[k3]));
if(e3<0.0001)
	{
	fk[k2][2]=0;
	fk[k2][1]=bb/cos(t[k2]);
	}
	else
	{
	tan3=sin(t[k3])/cos(t[k3]);
	fk[k2][2]=bb/(sin(t[k2])-tan3*cos(t[k2]));
	fk[k2][1]=-fk[k2][2]*tan3;
	}
	fk[k1][1]=-(fk[k2][1]+fi[ns2][1]+f[nn2][1]);
	fk[k1][2]=-(fk[k2][2]+fi[ns2][2]+f[nn2][2]);
	fr[n1][1]=fk[k1][1]-fi[ns1][1]-f[nn1][1];
	fr[n1][2]=fk[k1][2]-fi[ns1][2]-f[nn1][2];
	p13x=p[n1][1]-p[n3][1];
	p13y=p[n1][2]-p[n3][2];
	ps13x=p[ns1][1]-p[n3][1];
	ps13y=p[ns1][2]-p[n3][2];
	pn13x=p[nn1][1]-p[n3][1];
	pn13y=p[nn1][2]-p[n3][2];
	si1=p13x*fr[n1][2]-p13y*fr[n1][1];
	si2=ps13x*fi[ns1][2]-ps13y*fi[ns1][1];
	si3=pn13x*f[nn1][2]-pn13y*f[nn1][1];
	sgm1=si1+si2+si3+ti[k1];
	e2=fabs(cos(t[k2]));
	if(e2<0.0001)
	{
	pk13x=0;
	pk13y=-sgm1/fk[k1][1];
	}
	else
	{
	tan2=sin(t[k2])/cos(t[k2]);
	pk13x=sgm1/(fk[k1][2]-fk[k1][1]*tan2);
	pk13y=pk13x*tan2;
	}
	pk[k1][1]=p[n3][1]+pk13x;
	pk[k1][2]=p[n3][2]+pk13y;
	ps24x=p[ns2][1]-p[n4][1];
	ps24y=p[ns2][2]-p[n4][2];
	pn24x=p[nn2][1]-p[n4][1];
	pn24y=p[nn2][2]-p[n4][2];
	pk14x=pk[k1][1]-p[n4][1];
	pk14y=pk[k1][2]-p[n4][2];
	si4=ps24x*fi[ns2][2]-ps24y*fi[ns2][1];
	si5=pn24x*f[nn2][2]-pn24y*f[nn2][1];
	si6=pk14x*fk[k1][2]-pk14y*fk[k1][1];
	sgm2=-(si4+si5+si6+ti[k2]);
	if(e3<0.0001)
	{
	pk24x=0;
	pk24y=-sgm2/fk[k2][1];
	}
	else
	{
	pk24x=sgm2/(fk[k2][2]-fk[k2][1]*tan3);
	pk24y=pk24x*tan3;
	}
	pk[k2][1]=p[n4][1]+pk24x;
	pk[k2][2]=p[n4][2]+pk24y;
	fr[n2][1]=fk[k2][1];
	fr[n2][2]=fk[k2][2];
	p[n2][1]=pk[k2][1];
	p[n2][2]=pk[k2][2];
}

/*************-end-***********************/

planer::planer()
{
}

planer::~planer()
{
}

void planer::Creat(double nn,double kk,double hh,double lo2o3,
	   double b1,double b2,double b3,
	   double Xs,double Ys,double Yp, double G3,double G4,double G5,
	   double js3,	double js4,	double Pr)
{
   static double p[20][2],vp[20][2],ap[20][2],del;
   static double t[10],w[10],e[10];
   static double fr[20][2],fk[20][2],pk[20][2],fe[20][2];
   static int ic;
   double fr1,fr2,fr3,fr4,fr5; 
   double r2,vr2,ar2,r5,vr5,ar5,tb,tb1,we1,we2,we3;
   int i;
   double pi,k,n,Q,dr,xh;
   FILE *fp;
   k=kk;n=nn;xh=hh;
   sm[3]=G3/9.8;sm[4]=G4/9.8;sm[5]=G5/9.8;
   sj[3]=js3;sj[4]=js4;
   pi=4.0*atan(1.0);
   dr=pi/180.0;
   Q=((k-1)/(k+1))*pi;
   w[1]=(n*2*pi)/60;
   e[1]=0;
   r13=lo2o3;
   r12=r13*sin(Q/2);
   r34=0.5*xh/sin(Q/2);
   r36=r34*b1;
   r45=r34*b2;
   r47=r45*b3;
   x5=Xs;
   y5=Ys;
   del=5.0;
   p[1][2]=r13;
   p[9][1]=xh;
   p[9][2]=(r34+r34*cos(Q/2))/2;
 if((fp=fopen("textout2.txt","w"))==NULL)
     {  printf("can't open this file.\n");
     exit(0);
     }
  fprintf(fp,"\n thekinrto-static analysis of a six-bar linkase\n");
 // fprintf(fp,"\n\np[1][1]=%.4f  p[1][2]=%.4f  p[3][1]=%.4f  p[3][2]=%.4f  p[9][1]=%.4f  p[9][2]=%.4f\n\n",p[1][1],p[1][2],p[3][1],p[3][2],p[9][1],p[9][2]);
  fprintf(fp,"\nr12=%.4f, r13=%.4f, r36=%.4f  \nr34=%.4f\n  r45=%.4f, r47=%.4f\n\n",r12,r13,r36,r34,r45,r47);
  fprintf(fp,"\n i     fr1     fr2     fr3     fr4     fr5      p[5][1]     vp[5][1]     ap[5][1]    tb  tb1");
 
   for(i=0;i<=360;i++)
   {
   t[1]=(double)(i)*dr+pi+Q/2;
   bark(1,2,0,1,r12,0.0,0.0,t,w,e,p,vp,ap,Pr);
   rprk(1,3,2,3,2,0.0,&r2,&vr2,&ar2,t,w,e,p,vp,ap,Pr);
   bark(3, 4, 6, 3, r34,r36, 0.0, t,w,e,p,vp,ap,Pr);
   rrpk(1,4,9,5,4,5,6,r45,&r5,&vr5,&ar5,t,w,e,p,vp,ap,Pr);
   bark(4,7,0,4,r47,0.0,0.0,t,w,e,p,vp,ap,Pr);
   p2[i][1]=p[2][1];	   p2[i][2]=p[2][2];
   	p4[i][1]=p[4][1];	   p4[i][2]=p[4][2];
   p5[i][1]=p[5][1];	   p5[i][2]=p[5][2];
   t3[i]=t[3];
   p[8][1]=p[5][1]+x5;
   p[8][2]=p[5][2]+y5;
   vp[8][1]=vp[5][1];
   ap[8][1]=ap[5][1];
   ap[8][2]=ap[5][2];
   rrpf(4,11,5,7,8,10,0,10,4,5,p,vp,ap,t,w,e,fr,Pr);
   rprf(3,2,6,2,4,0,0,3,2,p,vp,ap,t,w,e,fr,fk,pk,Pr);
   barf(1,1,2,1,p,ap,e,fr,&tb,Pr);
   fr1=sqrt(fr[1][1]*fr[1][1]+fr[1][2]*fr[1][2]);
   fr2=sqrt(fr[2][1]*fr[2][1]+fr[2][2]*fr[2][2]);
   fr3=sqrt(fr[3][1]*fr[3][1]+fr[3][2]*fr[3][2]);
   fr4=sqrt(fr[4][1]*fr[4][1]+fr[4][2]*fr[4][2]);
   fr5=sqrt(fr[5][1]*fr[5][1]+fr[5][2]*fr[5][2]);
   we1=-(ap[6][1]*vp[6][1]+(ap[6][2]+9.8)*vp[6][2])*sm[3]-e[3]*w[3]*sj[3];
   we2=-(ap[7][1]*vp[7][1]+(ap[7][2]+9.8)*vp[7][2])*sm[4]-e[4]*w[4]*sj[4];
   we3=-ap[5][1]*vp[5][1]*sm[5]+fe[5][1]*vp[5][1];
   tb1=-(we1+we2+we3)/w[1];
   if(i%5==0&&i>150) //
   fprintf(fp,"\n %2d %8.1f %8.1f %8.1f %8.1f %8.1f %8.3f %8.3f %8.3f %8.3f %8.3f", i,fr1,fr2,fr3,fr4,fr5,p[5][1],vp[5][1],ap[5][1],tb,tb1);
   
   pdraw[i]=p[5][1];
   vpdraw[i]=vp[5][1];
   apdraw[i]=ap[5][1];
   tbdraw[i]=tb;
   tb1draw[i]=tb1;
   }

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -