平面六杆机构的运动分析.docx

上传人:b****6 文档编号:3656725 上传时间:2022-11-24 格式:DOCX 页数:28 大小:238.92KB
下载 相关 举报
平面六杆机构的运动分析.docx_第1页
第1页 / 共28页
平面六杆机构的运动分析.docx_第2页
第2页 / 共28页
平面六杆机构的运动分析.docx_第3页
第3页 / 共28页
平面六杆机构的运动分析.docx_第4页
第4页 / 共28页
平面六杆机构的运动分析.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

平面六杆机构的运动分析.docx

《平面六杆机构的运动分析.docx》由会员分享,可在线阅读,更多相关《平面六杆机构的运动分析.docx(28页珍藏版)》请在冰豆网上搜索。

平面六杆机构的运动分析.docx

平面六杆机构的运动分析

机械原理大作业

(一)

平面六杆机构的运动分析

 

班级:

学号:

姓名:

同组者:

完成时间:

 

一.题目

1.1说明

 

如图所示为一片面六杆机构各构件尺寸如表格1所示,又知原动件1以等角速度ω=1rad/s沿逆时针方向回转,试求各从动件的角位移、角加速度以及E点的位移、速度及加速度的变化情况。

1.2数据

组号

L1

L2

L’2

L3

L4

L5

L6

xG

yG

1-A

26.5

105.6

65.0

67.5

87.5

34.4

25.0

600

153.5

41.7

表格1条件数据

1.3要求

三人一组,编程计算出原动件从0~360º时(计算点数N=36)所要求各运动变量的大小,并绘制运动线图及点的轨迹曲线。

 

二.解题步骤

由封闭图形ABCD可得:

由封闭图形AGFECD可得

于是有:

对以上1到4导可得-

 

写做矩阵形式:

对上述矩阵求导可得:

E点横坐标及对应的速度和加速度:

E点纵坐标及对应的速度和加速度:

 

三.计算程序框图

 

 

 

四.源程序

1.#include"stdlib.h"

#include"math.h"

#include"stdio.h"

intagaus(a,b,n)

intn;

doublea[],b[];

{int*js,l,k,i,j,is,p,q;

doubled,t;

js=malloc(n*sizeof(int));

l=1;

for(k=0;k<=n-2;k++)

{d=0.0;

for(i=k;i<=n-1;i++)

for(j=k;j<=n-1;j++)

{t=fabs(a[i*n+j]);

if(t>d){d=t;js[k]=j;is=i;}

}

if(d+1.0==1.0)l=0;

else

{if(js[k]!

=k)

for(i=0;i<=n-1;i++)

{p=i*n+k;q=i*n+js[k];

t=a[p];a[p]=a[q];a[q]=t;

}

if(is!

=k)

{for(j=k;j<=n-1;j++)

{p=k*n+j;q=is*n+j;

t=a[p];a[p]=a[q];a[q]=t;

}

t=b[k];b[k]=b[is];b[is]=t;

}

}

if(l==0)

{free(js);printf("fail\n");

return(0);

}

d=a[k*n+k];

for(j=k+1;j<=n-1;j++)

{p=k*n+j;a[p]=a[p]/d;}

b[k]=b[k]/d;

for(i=k+1;i<=n-1;i++)

{for(j=k+1;j<=n-1;j++)

{p=i*n+j;

a[p]=a[p]-a[i*n+k]*a[k*n+j];

}

b[i]=b[i]-a[i*n+k]*b[k];

}

}

d=a[(n-1)*n+n-1];

if(fabs(d)+1.0==1.0)

{free(js);printf("fail\n");

return(0);

}

b[n-1]=b[n-1]/d;

for(i=n-2;i>=0;i--)

{t=0.0;

for(j=i+1;j<=n-1;j++)

t=t+a[i*n+j]*b[j];

b[i]=b[i]-t;

}

js[n-1]=n-1;

for(k=n-1;k>=0;k--)

if(js[k]!

=k)

{t=b[k];b[k]=b[js[k]];b[js[k]]=t;}

free(js);

return

(1);

}

 

2.程序二求解各杆的角度和E点坐标(杆四的角度始终为零,程序中不再求解)

/*输出文件Output.txt*/

#include"stdio.h"

#include

#include"dnetn.c"

#include"agaus.c"

#include

#definePI3.14159265358979

#defineANGLE(PI/180)

#defineALPHA(PI*60/180)

/*初始杆长:

*/

staticdoubledLen[7]={65.0,26.5,105.6,67.5,87.5,34.4,25.0};

/*G点的坐标*/

staticdoubledGxy[2]={153.5,41.7};

staticdoublex0=0*ANGLE;

main()

{

inti,k;

doubleeps,t,h,xe,ye;

intnTemp=0;

FILE*pf;

/*各角位移的初始估计值*/

staticdouble

x[4]={36.80*ANGLE,69.57*ANGLE,119.00*ANGLE,48.92*ANGLE};

pf=fopen("Output.txt","w");

t=0.1;h=0.1;eps=0.00000001;k=100;

for(nTemp=0;nTemp<=36;nTemp++)

{

x0=nTemp*10*ANGLE;

i=dnetn(4,eps,t,h,x,k);

printf("\ni=%d\n",i);

printf("x0=%lf\n",x0);

fprintf(pf,"%d\t",10*nTemp);

for(i=0;i<=3;i++)

{

printf("x(%d)=%13.7lf\n",i,x[i]/ANGLE);

fprintf(pf,"%lf\t",x[i]/ANGLE);

}

xe=dLen[1]*cos(x0)+dLen[2]*cos(x[0])+dLen[0]*cos(ALPHA-(x[0]));

ye=dLen[1]*sin(x0)+dLen[2]*sin(x[0])-dLen[0]*sin(ALPHA-(x[0]));

printf("xe=%13.7lf\nye=%13.7lf\n",xe,ye);

fprintf(pf,"\n");

printf("\n");

}

fclose(pf);

getch();

}

/*建立牛顿法矩阵*/

voiddnetnf(x,y,n)intn;

doublex[],y[];

{

y[0]=dLen[1]*cos(x0)+dLen[2]*cos(x[0])-dLen[3]*cos(x[1])

-dLen[4];

y[1]=dLen[1]*sin(x0)+dLen[2]*sin(x[0])-dLen[3]*sin(x[1]);

y[2]=dLen[1]*cos(x0)+dLen[2]*cos(x[0])+dLen[5]

*cos(x[2])-dLen[6]*cos(x[3])-dGxy[0]+dLen[0]*cos(ALPHA-(x[0]));

y[3]=dLen[1]*sin(x0)+dLen[2]*sin(x[0])+dLen[5]

*sin(x[2])-dLen[6]*sin(x[3])-dGxy[1]-dLen[0]*sin(ALPHA-(x[0]));

n=n;

return;

}

3.程序三求解各杆的角速度和E点速度(杆四的角速度始终为零,程序中不再求解)

/*输出文件Output2.txt*/

#include"stdio.h"

#include"math.h"

#include"agaus.c"

#include

#definePI3.14159265358979

#defineANGLE(PI/180)

#defineALPHA(PI*35/180)

/*初始杆长:

依次为*/

staticdoubledLen[7]={65.0,26.5,105.6,67.5,87.5,34.4,25.0};

/*G点的坐标*/

staticdoubledGxy[2]={153.5,41.7};

staticdoublex0=0*ANGLE;

staticdoublew1=1.0;

doubleVex,Vey;

main()

{

inti,j,nTime;

FILE*fInput;

FILE*fOutput2;

intnX0,nCounter;

doubledTemp[4]={0};

staticdoublea[4][4]={0.};

staticdoubleb[4]={0.};

/*将agu_01.C的输出文件output.txt作为输入文件,继续计算*/

fInput=fopen("output.txt","r");

fOutput2=fopen("output2.txt","w");

for(nTime=0;nTime<=36;nTime++)

{

fscanf(fInput,"%d",&nX0);

x0=nX0*ANGLE;

printf("x0=%lf\n",x0);

for(nCounter=0;nCounter<4;nCounter++)

{

fscanf(fInput,"%lf",&dTemp[nCounter]);

}

for(nCounter=0;nCounter<4;nCounter++)

{

dTemp[nCounter]=dTemp[nCounter]*ANGLE;

}

/*建立高斯方程组矩阵*/

a[0][0]=-dLen[2]*sin(dTemp[0]);

a[0][1]=dLen[3]*sin(dTemp[1]);

a[0][2]=0.;

a[0][3]=0.;

a[1][0]=dLen[2]*cos(dTemp[0]);

a[1][1]=-dLen[3]*cos(dTemp[1]);

a[1][2]=0.;

a[1][3]=0.;

a[2][0]=dLen[2]*sin(dTemp[0])-dLen[0]*sin(ALPHA-(dTemp[0]));

a[2][1]=0.;

a[2][2]=dLen[5]*sin(dTemp[2]);

a[2][3]=-dLen[6]*sin(dTemp[3]);

a[3][0]=dLen[2]*cos(dTemp[0])+dLen[0]*cos(ALPHA-(dTemp[0]));

a[3][1]=0.;

a[3][2]=dLen[5]*cos(dTemp[2]);

a[3][3]=-dLen[6]*cos(dTemp[3]);

b[0]=dLen[1]*sin(x0)*w1;

b[1]=-dLen[1]*cos(x0)*w1;

b[2]=-dLen[1]*sin(dTemp[0])*w1;

b[3]=-dLen[1]*cos(dTemp[0])*w1;

if(agaus(a,b,4)!

=0)

for(i=0;i<=3;i++)

{

printf("w%d=%lf\n",i,b[i]);

fprintf(fOutput2,"%lf",b[i]);

Vex=-dLen[1]*sin(x0)*w1-dLen[2]*sin(dTemp[0])*b[0]+

dLen[0]*sin(ALPHA-(dTemp[0]))*b[0];

Vey=dLen[1]*cos(x0)*w1+dLen[2]*cos(dTemp[0])*b[0]+

dLen[0]*cos(ALPHA-(dTemp[0]))*b[0];}

printf("Vex=%lf\nVey=%lf\n",Vex,Vey);

fprintf(fOutput2,"\n");

printf("\n");

 

}

fclose(fInput);

fclose(fOutput2);

getch();

}

4.程序四求解各杆和点E的角加速度(杆四角加速度始终为零,这里不再求解)

/*输出文件Output3.txt*/

#include"stdio.h"

#include"math.h"

#include"agaus.c"

#include

#definePI3.14159265358979

#defineANGLE(PI/180)

#defineALPHA(PI*35/180)

/*初始杆长:

依次为*/

staticdoubledLen[7]={65.0,26.5,105.6,67.5,87.5,47.2,37.8};

/*G点的坐标*/

staticdoubledGxy[2]={153.5,41.7};

staticdoublex0=0*ANGLE;

staticdoublew1=1.0;

main()

{

inti,nTime;

FILE*fInput2;

FILE*fOutput3;

intnX0,nCounter;

doubleAex,Aey;

doubledSeta[5]={0.};

doubledOmiga[4]={0.};

staticdoublea[4][4]={0.};

staticdoubleb[4]={0.};

/*将agu_02.C的输出文件output2.txt作为输入文件,继续计算*/

fInput2=fopen("output2.txt","r");

fOutput3=fopen("output3.txt","w");

for(nTime=0;nTime<=36;nTime++)

{

fscanf(fInput2,"%d",&nX0);

/*读入角度值*/

for(nCounter=0;nCounter<5;nCounter++)

{

fscanf(fInput2,"%lf",&dSeta[nCounter]);

}

/*读入角速度值*/

for(nCounter=0;nCounter<4;nCounter++)

{

fscanf(fInput2,"%lf",&dOmiga[nCounter]);

}

/*建立高斯方程组矩阵,dSeta[0]=x1(角度我们草稿的),dSeta[1]=x2,dSeta[2]=x3,dSeta[3]=x5,dSeta[4]=x6

dOmiga[0]=w2,dOmiga[1]=w3,dOmiga[2]=w5,dOmiga[3]=w6*/

a[0][0]=-dLen[2]*sin(dSeta[1]);

a[0][1]=dLen[3]*sin(dSeta[2]);

a[0][2]=0.;

a[0][3]=0.;

a[1][0]=dLen[2]*cos(dSeta[1]);

a[1][1]=-dLen[3]*cos(dSeta[2]);

a[1][2]=0.;

a[1][3]=0.;

a[2][0]=-dLen[0]*sin(ALPHA-(dSeta[1]))+dLen[2]*sin(dSeta[1]);

a[2][1]=0.;

a[2][2]=dLen[5]*sin(dSeta[3]);

a[2][3]=-dLen[6]*sin(dSeta[4]);

a[3][0]=dLen[0]*cos(ALPHA-(dSeta[1]))+dLen[2]*cos(dSeta[1]);

a[3][1]=0.;

a[3][2]=dLen[5]*cos(dSeta[3]);

a[3][3]=-dLen[6]*cos(dSeta[4]);

b[0]=-(-dLen[2]*cos(dSeta[1])*dOmiga[0]*dOmiga[0]

+dLen[3]*cos(dSeta[2])*dOmiga[1]*dOmiga[1])+dLen[1]*

cos(dSeta[0])*w1*w1;

b[1]=-(-dLen[2]*sin(dSeta[1])*dOmiga[0]*dOmiga[0]

+dLen[3]*sin(dSeta[2])*dOmiga[1]*dOmiga[1])+dLen[1]*

sin(dSeta[0])*w1*w1;

b[2]=-w1*w1*dLen[1]*cos(dSeta[0])-dOmiga[0]*

dOmiga[0]*(dLen[2]*cos(dSeta[1])+dLen[0]*cos(ALPHA-(dSeta[1])))+dOmiga[3]*

dOmiga[3]*dLen[6]*cos(dSeta[4])-dLen[5]*

cos(dSeta[3])*dOmiga[2]*dOmiga[2];

b[3]=w1*w1*dLen[1]*sin(dSeta[0])-dOmiga[0]*

dOmiga[0]*(dLen[2]*sin(dSeta[1])-dLen[0]*sin(ALPHA-(dSeta[1])))-dOmiga[3]*

dOmiga[3]*dLen[6]*sin(dSeta[4])+dLen[5]*

sin(dSeta[3])*dOmiga[2]*dOmiga[2];

if(agaus(a,b,4)!

=0)

for(i=0;i<=3;i++)

{printf("a[%d]=%lf\n",i,b[i]);

fprintf(fOutput3,"%lf",b[i]);

Aex=-dLen[2]*sin(dSeta[1])*b[0]+dLen[0]*sin(ALPHA-(dSeta[1]))*b[0]-dLen[1]*cos(dSeta[0])*w1*

w1-dLen[2]*cos(dSeta[1])*dOmiga[0]*dOmiga[0]-dLen[0]*cos(ALPHA-(dSeta[1]))*dOmiga[0]*dOmiga[0];

Aey=dLen[2]*cos(dSeta[1])*b[0]+dLen[0]*cos(ALPHA-(dSeta[1]))*b[0]-dLen[1]*sin(dSeta[0])*w1*

w1-dLen[2]*sin(dSeta[1])*dOmiga[0]*dOmiga[0]+dLen[0]*sin(ALPHA-(dSeta[1]))*dOmiga[0]*dOmiga[0];

};

printf("Aex=%lf\nAey=%lf",Aex,Aey);

fprintf(fOutput3,"%lf%lf",Aex,Aey);

printf("\n\n");

fprintf(fOutput3,"\n");

}

fclose(fInput2);

fclose(fOutput3);

getch();

}

5.#include"stdlib.h"

#include"math.h"

#include"stdio.h"

intdnetn(n,eps,t,h,x,k)

intn,k;

doubleeps,t,h,x[];

{externvoiddnetnf();

externintagaus();

inti,j,l;

doubleam,z,beta,d,*y,*a,*b;

y=malloc(n*sizeof(double));

a=malloc(n*n*sizeof(double));

b=malloc(n*sizeof(double));

l=k;am=1.0+eps;

while(am>=eps)

{dnetnf(x,b,n);

am=0.0;

for(i=0;i<=n-1;i++)

{z=fabs(b[i]);

if(z>am)am=z;

}

if(am>=eps)

{l=l-1;

if(l==0)

{free(y);free(b);free(a);

printf("fail\n");return(0);

}

for(j=0;j<=n-1;j++)

{z=x[j];x[j]=x[j]+h;

dnetnf(x,y,n);

for(i=0;i<=n-1;i++)a[i*n+j]=y[i];

x[j]=z;

}

if(agaus(a,b,n)==0)

{free(y);free(a);free(b);return(-1);}

beta=1.0;

for(i=0;i<=n-1;i++)beta=beta-b[i];

if(fabs(beta)+1.0==1.0)

{free(y);free(a);free(b);

printf("fail\n");return(-2);

}

d=h/beta;

for(i=0;i<=n-1;i++)x[i]=x[i]-d*b[i];

h=t*h;

}

}

free(y);free(a);free(b);

return(k-l);

}

五.计算结果

Ø1(单位:

度)

Ø2(单位:

度)

Ø3(单位:

度)

Ø5(单位:

度)

Ø6(单位:

度)

0

36.79905

69.57313

122.46277

92.66544

10

32.70947

66.00299

106.49971

67.79857

20

29.27761

64.07317

97.17544

52.86279

30

26.59737

63.73103

90.38343

44.24919

40

24.63591

64.75511

84.24782

39.67266

50

23.30108

66.86468

77.84116

37.31607

60

22.49012

69.79004

70.48144

35.41957

70

22.11297

73

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1