机械原理大作业一.docx
- 文档编号:1432619
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:16
- 大小:41.73KB
机械原理大作业一.docx
《机械原理大作业一.docx》由会员分享,可在线阅读,更多相关《机械原理大作业一.docx(16页珍藏版)》请在冰点文库上搜索。
机械原理大作业一
哈尔滨工业大学
机械原理大作业一
利用C语言进行连杆机构运动分析说明书
题目(16)
课程名称:
机械原理
学院:
外国语学院
姓名:
XX
班号:
XXX
学号:
XXX
一:
设计题目
二:
建立机构运动分析数学模型
首先,通过计算可以得出,假设以D为原点建立平面直角坐标系,则有定点坐标A(210,184),G(-192,201)。
这里注意,由于TurboC语言图形界面的原点为屏幕左上角,且范围是640*480,则屏幕中点坐标实为(320,240)。
以后设置(320,340)为坐标原点。
对于点(x,y),在TurboC图形界面转换的坐标为(320+x,340-y),但在计算时依旧按照原坐标系进行计算,仅是在出图时做一下转换,特此强调。
对于B点坐标的确定:
W=10rad/s,t为运动时间则B点坐标(Xb,Yb)与A点坐标的关系为
Xb=Xa+108*cos(W*t);
Yb=Ya+108*sin(W*t);
对于RRR杆组的分析:
已知LAC,LBC,Xa,Ya,Xb,Yb,则有aA为AC与水平线夹角,aB为BC与水平线夹角。
LAB=((Xb-Xa)^2+(Yb-Ya)^2))^(1/2);
A0=2*LAC*(Xb-Xa);
B0=2*LAC*(Yb-Ya);
C0=LAC*LAC+LAB*LAB-LBC*LBC;
注意,当C点如图示位置时
aA=2*atan((B0+sqrt(pow(A0,2)+pow(B0,2)-pow(C0,2)))/(A0+C0));}
当C点位于AB线段下面时
aA=2*atan((B0-sqrt(A0*A0+B0*B0-C0*C0))/(A0+C0));
aB=arctan((Yc-Yb)/(Xc-Xb));
Xc=Xa+LAC*cos(aA);
Yc=Ya+LAC*sin(aA);
对于E点坐标的确定:
由于LEC=LBC
所以Ex+Bx=2*Cx
Ey+By=2*Cy
因此有
Ex=2*Cx-Bx;
Ey=2*Cy-By;
对于构件5角位移的计算:
由点F与G的相对位置判定构件5的位置。
即为arctan((Yf-Yg)/(Xf-Xg))
再由G点的坐标判定具体角度的大小,其程序如下
其中,aG,F[1],F[2]均为弧度制,F[1]=Fx,F[2]=Fy
aG=atan((139-F[2])/(F[1]-128));
aG=(180/3.14)*aG;
if(F[2]<139){
if(aG<0){aG=aG+180;}
}
if(F[2]>139)
{if(aG>0){aG=180+aG;}
if(aG<0){aG=360+aG;}
}
if(F[2]==139)
{
if(F[1]>128){aG=0;}
if(F[1]<128){aG=180;}
}
AO=(180/3.14)*o*10;
aG=360-aG;
构件5角速度与角加速度分析:
V=ds/dw=(s1-s0)/delta(w)
A=dv/dw=(v1-v0)/delta(w)
随后再讲两个值以及delta按照适当的比例缩放。
三:
绘制计算流程框图
该机构可以被分为原动件AB杆,II级RRR杆组GFE,II级RRR杆组DCB所组成,因此该机构为II级机构。
对于该杆组,我们可以由原动件AB求得B运动副的运动参数,再根据BCD杆组求得C运动副运动参数。
对于构件5的运动参数,则根据构件5在每个角度对应的位置坐标求导得出。
四:
运用TurboC2.0编写程序
#include
#include
#include
#include
#include
doubleB[1];
doublec[2];
doubleAO;
intCHANGE;
voidinitsys(void)
{
intdriver=VGA,mode=VGAHI;
initgraph(&driver,&mode,"c:
\\tc\\bgi");
}
/****************theanaylseofB****************/
doubleAnlyB(doubleXa,doubleYa,doubleLAB,doublet)
{doubleXb,Yb;
intW=10;
Xb=Xa+108*cos(W*t);
Yb=Ya+108*sin(W*t);
B[0]=Xb;
B[1]=Yb;
returnB[1];
}
/***************theanaylseofthePositionof3Rbar*****************/
voidAnlyRRR(doubleXa,doubleYa,doubleXb,doubleYb,doubleLAC,doubleLBC)
{
doubleXc,Yc,A0,B0,C0,LAB,aA,aB;
LAB=sqrt(pow((Xb-Xa),2)+pow((Yb-Ya),2));
A0=2*LAC*(Xb-Xa);
B0=2*LAC*(Yb-Ya);
C0=LAC*LAC+LAB*LAB-LBC*LBC;
if(CHANGE==0){
aA=2*atan((B0+sqrt(pow(A0,2)+pow(B0,2)-pow(C0,2)))/(A0+C0));}
if(CHANGE==1){
aA=2*atan((B0-sqrt(A0*A0+B0*B0-C0*C0))/(A0+C0));
}
aB=atan((Yc-Yb)/(Xc-Xb));
Xc=Xa+LAC*cos(aA);
Yc=Ya+LAC*sin(aA);
c[2]=Yc;
c[1]=Xc;
}
/**delay***/
voiddelay1()
{
inta,b,c;
for(a=0;a<100;a++){c++;
for(b=0;b<10;b++){c--;
if(bioskey
(1)!
=0){
exit
(1);}
}
}
}
/*************drawxandy********/
voidface()
{
setfillstyle(SOLID_FILL,BLUE);
bar(0,342,640,338);/*x*/
bar(318,0,322,480);/*y*/
}
/*************themainfunction****************/
main()
{
intflag;
doubleo,C[2],F[2],E[2],aG,aGO,w5,wo5,AW5,AWO5;
o=0;
initsys();
do
{
printf("selectthefunction\n");
printf("1.simulatethetraceofthemechanism\n");
printf("2.showthetraceofpointE\n");
printf("3.showthegraphoftheangleofmechanismNO.5\n");
printf("4.showtheangularvelocityofmechanismNO.5\n");
printf("5.showtheangularaccerlationofmechanismNO.5\n");
printf("pressanykeytoexit\n");
scanf("%d",&flag);
}
while(flag<1||flag>5);
switch(flag)
{
case1:
cleardevice();/*case1*/
while
(1)
{
delay1();
setcolor(BLACK);
line(C[1],C[2],B[0],B[1]);/*clearlines*/
line(C[1],C[2],320,340);
line(E[1],E[2],C[1],C[2]);
line(B[0],B[1],530,156);
line(F[1],F[2],128,139);
line(F[1],F[2],E[1],E[2]);
circle(C[1],C[2],10);/*clearCIRCLEs*/
circle(B[0],B[1],10);
circle[E[1],E[2],10];
circle[F[1],F[2],10];
setcolor(WHITE);
line(E[1],E[2],E[1]+1,E[2]+1);
face();
o=o+0.01;
B[1]=AnlyB(210,184,108,o);/*getAB*/
CHANGE=0;
AnlyRRR(0,0,B[0],B[1],200,200);/*getBC*/
C[1]=c[1];
C[2]=c[2];
E[1]=2*C[1]-B[0];/*GETPOINTE*/
E[2]=2*C[2]-B[1];
CHANGE=1;
AnlyRRR(-192,201,E[1],E[2],114,114);
F[1]=c[1];
F[2]=c[2];
C[1]=C[1]+320;
C[2]=340-C[2];
B[0]=B[0]+320;
B[1]=340-B[1];
F[1]=320+F[1];
F[2]=340-F[2];
E[1]=320+E[1];
E[2]=340-E[2];
line(C[1],C[2],B[0],B[1]);
line(C[1],C[2],320,340);
line(E[1],E[2],C[1],C[2]);
line(B[0],B[1],530,156);
line(F[1],F[2],E[1],E[2]);
line(F[1],F[2],128,139);
line(E[1],E[2],E[1]+1,E[2]+1);
circle(C[1],C[2],10);/*clearlines*/
circle(B[0],B[1],10);
circle(E[1],E[2],10);
circle(F[1],F[2],10);
if(bioskey
(1)!
=0){
exit
(1);
}
}
case2:
cleardevice();
while
(1)
{
face();
o=o-0.01;
B[1]=AnlyB(210,184,108,o);/*getAB*/
CHANGE=0;
AnlyRRR(0,0,B[0],B[1],200,200);/*getBC*/
C[1]=c[1];
C[2]=c[2];
E[1]=2*C[1]-B[0];/*GETPOINTE*/
E[2]=2*C[2]-B[1];
CHANGE=1;
AnlyRRR(-192,201,E[1],E[2],114,114);
F[1]=c[1];
F[2]=c[2];
E[1]=320+E[1];
E[2]=340-E[2];
line(E[1],E[2],E[1]+1,E[2]+1);
if(bioskey
(1)!
=0){
exit
(1);
}
}
case3:
cleardevice();
while(o<=0.628){
o=o+0.00001;
B[1]=AnlyB(210,184,108,o);/*getAB*/
CHANGE=0;
AnlyRRR(0,0,B[0],B[1],200,200);/*getBC*/
C[1]=c[1];
C[2]=c[2];
E[1]=2*C[1]-B[0];/*GETPOINTE*/
E[2]=2*C[2]-B[1];
CHANGE=1;
AnlyRRR(-192,201,E[1],E[2],114,114);
F[1]=c[1];
F[2]=c[2];
F[1]=320+F[1];
F[2]=340-F[2];
aG=atan((139-F[2])/(F[1]-128));
aG=(180/3.14)*aG;
if(F[2]<139){
if(aG<0){aG=aG+180;}
}
if(F[2]>139)
{if(aG>0){aG=180+aG;}
if(aG<0){aG=360+aG;}
}
if(F[2]==139)
{
if(F[1]>128){aG=0;}
if(F[1]<128){aG=180;}
}
AO=(180/3.14)*o*10;
aG=360-aG;
line(AO+100,aG,AO+100.0001,0.0001+aG);
if(bioskey
(1)!
=0){
exit
(1);
}
}
case4:
cleardevice();
setcolor(YELLOW);
line(0,200,640,200);
while(o<=0.628){
setcolor(WHITE);
aGO=aG;
o=o+0.00001;
B[1]=AnlyB(210,184,108,o);/*getAB*/
CHANGE=0;
AnlyRRR(0,0,B[0],B[1],200,200);/*getBC*/
C[1]=c[1];
C[2]=c[2];
E[1]=2*C[1]-B[0];/*GETPOINTE*/
E[2]=2*C[2]-B[1];
CHANGE=1;
AnlyRRR(-192,201,E[1],E[2],114,114);
F[1]=c[1];
F[2]=c[2];
F[1]=320+F[1];
F[2]=340-F[2];
aG=atan((139-F[2])/(F[1]-128));
aG=(180/3.14)*aG;
if(F[2]<139){
if(aG<0){aG=aG+180;}
}
if(F[2]>139)
{if(aG>0){aG=180+aG;}
if(aG<0){aG=360+aG;}
}
if(F[2]==139)
{
if(F[1]>128){aG=0;}
if(F[1]<128){aG=180;}
}
AO=(180/3.14)*o*10;
aG=3.14*aG/180;
w5=(aG-aGO)/0.00001;
line(AO+100,200-w5,AO+100.0001,200.0001-w5);
if(bioskey
(1)!
=0){
exit
(1);
}
}
case5:
cleardevice();
line(0,300,640,300);
while(o<=0.628){
aGO=aG;
wo5=w5;
o=o+0.00001;
B[1]=AnlyB(210,184,108,o);/*getAB*/
CHANGE=0;
AnlyRRR(0,0,B[0],B[1],200,200);/*getBC*/
C[1]=c[1];
C[2]=c[2];
E[1]=2*C[1]-B[0];/*GETPOINTE*/
E[2]=2*C[2]-B[1];
CHANGE=1;
AnlyRRR(-192,201,E[1],E[2],114,114);
F[1]=c[1];
F[2]=c[2];
F[1]=320+F[1];
F[2]=340-F[2];
aG=atan((139-F[2])/(F[1]-128));
aG=(180/3.14)*aG;
if(F[2]<139){
if(aG<0){aG=aG+180;}
}
if(F[2]>139)
{if(aG>0){aG=180+aG;}
if(aG<0){aG=360+aG;}
}
if(F[2]==139)
{
if(F[1]>128){aG=0;}
if(F[1]<128){aG=180;}
}
AO=(180/3.14)*o*10;
aG=3.14/180*aG;
w5=(aG-aGO)/0.00001;
AW5=(w5-wo5)/0.00001;
line(AO+100,300-AW5/10,AO+100.0001,300.0001-AW5/10);
if(bioskey
(1)!
=0){
exit
(1);
}
}
}
}_
五:
计算结果及分析
用户选择功能界面
机构动画
轨迹
构件5角位移图
角速度图
角加速度图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 原理 作业