(随手点个赞,养成好习惯)
基本杆组法
将平面连杆机构拆分成多个基本杆组,利用基本杆组的子函数集,求解运动副(其实就是个点)和杆件的运动(也就是点的位移,速度,加速度;构件的初始角位置和角速度,角加速度)。
实例分析
例题及要求
代码实现
人机交互部分,用来录入数据,分步录入,较少输入错误。
printf("请输入模式系数M:\n");
scanf("%lf",&M);
printf("请输入原动件的初始角(rad)和角速度(rad/s),并用逗号分隔:\n");
scanf("%lf,%lf",&theta1,&theta1d);
printf("请输入固定铰链A的坐标,并用逗号分隔:\n");
scanf("%lf,%lf",&xa,&ya);
printf("请输入固定铰链D的坐标,并用逗号分隔:\n");
scanf("%lf,%lf",&xd,&yd);
xdd = 0,xddd = 0;
ydd = 0,yddd = 0;
printf("请输入AB,BC,CD,EC,EF的长度(mm),并用逗号分隔:\n");
scanf("%lf,%lf,%lf,%lf,%lf",&l1,&l2,&l31,&l32,&l4);
调用函数:
1.调用曲柄子函数求解节点B;
2.调用RRR子函数求解节点C,构件2和构件3的方位角;
3.调用曲柄子函数求解节点E;
4.调用RRP子函数求解节点F,构件4的方位角;
QB(xa,xad,xadd,ya,yad,yadd,theta1,theta1d,theta1dd,&xb,&xbd,&xbdd,&yb,&ybd,&ybdd,&vb,&gammab,&ab,&betab);
RRR(xb,xbd,xbdd,yb,ybd,ybdd,xd,xdd,xddd,yd,ydd,yddd,l2,l31,M,&theta2,&theta2d,&theta2dd,&theta3,&theta3d,&theta3dd,&xc,&xcd,&xcdd,&yc,&ycd,&ycdd,&vc,&gammac,&ac,&betac);
QB(xd,xdd,xdd,yd,ydd,yddd,theta3,theta3d,theta3dd,&xe,&xed,&xedd,&ye,&yed,&yedd,&ve,&gammae,&ae,&betae);
RRP(xe,xed,xedd,ye,yed,yedd,xd,xdd,xddd,yd,ydd,yddd,O,O,O,l4,M,&xf,&xfd,&xfdd,&yf,&yfd,&yfdd,&vf,&gammaf,&af,&betaf,&theta4,&theta4d,&theta4dd,&s,&sd,&sdd);
输出运算结果
printf("B点的坐标为(%lf,%lf),速度为%lf mm/s,速度方位角为%lf rad,加速度为%lf rad/(s^2),加速度方位角为%lf rad。\n",xb,yb,vb,gammab,ab,betab);
printf("C点的坐标为(%lf,%lf),速度为%lf mm/s,速度方位角为%lf rad,加速度为%lf mm/s,加速度方位角为%lf rad。\n",xc,yc,vc,gammac,ac,betac);
printf("E点的坐标为(%lf,%lf),速度为%lf mm/s,速度方位角为%lf rad,加速度为%lf mm/s,加速度方位角为%lf rad。\n",xe,ye,ve,gammae,ae,betae);
printf("F点的坐标为(%lf,%lf),速度为%lf mm/s,速度方位角为%lf rad,加速度为%lf mm/s,加速度方位角为%lf rad。\n",xf,yf,vf,gammaf,af,betaf);
printf("构件2的方位角为%lf rad,方位角速度为%lf rad/s,方位角加速度为%lf rad/(s^2)\n",theta2,theta2d,theta2dd);
printf("构件3的方位角为%lf rad,方位角速度为%lf rad/s,方位角加速度为%lf rad/(s^2)\n",theta3,theta3d,theta3dd);
printf("构件4的方位角为%lf rad,方位角速度为%lf rad/s,方位角加速度为%lf rad/(s^2)\n",theta4,theta4d,theta4dd);
return 0;
运行结果及测试
(完结撒花,请大家多多支持,随手点个赞)