📄 planer.cpp
字号:
/*********************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 + -