1/26/07

4.7 四連桿之解(2)

第二種解(B)


MATLAB的指令中,有一簡單的指令可以繪圖,即line(x,y)指令。只要利用four_link1()計算對應於桿2迴轉角之四點座標(即點B及C,A與B固定),將座標值餵入line(x,y)指令中之座標參數(x,y)內,即可進行繪圖。注意每一個位置之四連桿座標繪完後,必須回到原點,才能繪出閉路的連桿型式,例如A-B-C-D-A的程序。故原點A在座標輸入參數項內需輸入兩次。

程式內容


利用MATLAB撰寫的程式four_link2內容如下:

程式範例4.7
function four_link2(theta2,r,mode)
% Program 4.5.2 to draw sets of 4-bar linkage
%Inputs:
% theata2:angles of link 2, in degrees
% r:row matrix for link lengths={r1 r2 r3 r4]
% mode:+1/-1 for toggling position
% Example:
% four_link2(0:5:360,[4 2 4.2 2.6],1)
% Author:D.S. Fon, BIME, NTU, Date:March 8,2006.
%
rr=r.*r;
d2g=pi/180;
theta=theta2'*d2g;
nn=length(theta);
Bx=r(2)*cos(theta);By=r(2)*sin(theta);
if abs(Bx-r(1))>0.01
m=(rr(4)-rr(3)-rr(1)+rr(2))./(Bx-r(1))/2;
mm=(m-r(1)).^2;
p=By./(Bx-r(1));pp=p.*p;
rootin=mm.*pp-(pp+1).*(mm-rr(4));
arg=sqrt(rootin);
Cy=((m-r(1)).*p+mode*arg)./(pp+1);
Cx=m-p.*Cy;
else
if abs(By)>0.01
Cy=(rr(4)-rr(3)-rr(1)+rr(2))/(2*By);
else
Cy=0;
end
Cx=r(1)+mode*sqrt(rr(4)-Cy^2);
end
%theta3=atan2(Cy-By,Cx-Bx)/d2g;
%theta4=atan2(Cy,Cx-r(1))/d2g;
Bx=r(2)*cos(theta);By=r(2)*sin(theta);
for i=1:nn,
if isreal(Cy(i))
line([0 Bx(i) Cx(i) r(1) 0]',[0 By(i) Cy(i) 0 0]',...
'marker','o');
end
end
axis equal;


執行結果:

>>four_link2(0:10:360,[4 2 4.2 2.6],1)

圖4.15 執行four_link2(0:10:360,[4 2 4.2 2.6],1)之結果

由圖4.15可知,左側桿可以迴轉360度,右側桿則僅能作往返運動,故為曲柄搖桿機構。若使用grashof2函數進行測試,其結果如下:

>> [ans,b]=grashof2([4 2 4.2 2.6])
ans =
Crank-Rocker linkage with rotating crank.
b =
6

其結果與實際繪圖的情況一致。故通常在繪圖之前,可以利用grashop2這個函數進行測試。立即能收到事半功倍之效。

設利用上述之draw4links2指令,設桿二之水平角度為80度,則可執行得到如下之結果:

>> draw4links2(4,2,4.2,2.6,80);