1/26/07

4.2 機構之元件

機構之元件


機構之元件除前節所述之桿形(linkshape)外,其餘如滑塊、接地結、球結、圓筒結等都是常見的型態。本節就各種型狀再進一步論述。

接地結(ground)


接地結通常可以提供滑塊、圓筒結等在運動時與地接觸之表示法。通常接地結除繪一橫線表示地面外,為表示其不動的狀態,在其橫線下,用許多斜線表示接地。此接地結會將其相對應之值繪出,然後輸出其相對之座標。若僅想取其座標,不事先繪圖,則可以設dd值為負值。此處dd值代表由接地之原點往前與往後延伸之距離。

此函數ground執行時,必須有旋轉點(x0,y0)之資料,以及旋轉之角度theta。此外,尚有參數dd作為以旋轉點往兩側延伸之距離。其使用例將配合其他元件使用。


function [x,y]=ground(x0,y0,dd,theta)
% The ground line
% Inputs:
% x0,y0:the pivot point
% dd:distance on both sides
% theta:inclined angle, deg
% Example: ground(0,0,5,30)
d=abs(dd);d8=d/8;
xm=[-d/2:d/8:d/2];
xu=[xm;-d/16+xm;xm];xu=xu(:);
ym=zeros(size(xm));
yu=[ym;ym-d/8;ym];yu=yu(:);
x1=[-d;xu;d]+x0;y1=[0;yu;0]+y0;
th=-theta*pi/180;
x=x1*cos(th)-y1*sin(th);
y=x1*sin(th)+y1*cos(th);
if dd<0,
line(x,y,'linewidth',3);
axis equal;
end

此程式將配合後面之範例應用。

底座(anchor)


底座anchor函數為配合其他連桿結端點必須固定時,所需顯示之固定座。其外圍之圓弧半徑為rr,中心點(x0,y0)為桿端之連結位置,也是旋轉之迴轉中心。

此程式若直接接地,則會呼叫上述之ground函數,為使其僅傳回座標,參數rr值可設為正值,若要繪圖則設為負值。但rr之正負值並不影響圓弧之半徑。底座需要旋轉時,可以利用theta調整,其單位以度數表示。

function [x,y]=anchor(rr,x0,y0,theta)
% The anchor of a joint
% Inputs:r:outer radius of anchor
% x0,y0:center point
% theta:inclined angle, ang
% Example: anchor(5,0,0,30)
r=abs(rr);
th=0:pi/50:2*pi;r15=r*1.5;
x1=r*cos(th);y1=r*sin(th);
xx=x1/5;yy=y1/5;
th=-theta*pi/180;
[xm,ym]=ground(0,-r15,-r15,0);
x1=[0 xx x1 r15 xm' -r15 x1(50) 0]+x0;
y1=[0 yy y1 -r15 ym' -r15 y1(50) 0]+y0;
x=x1*cos(th)-y1*sin(th);
y=x1*sin(th)+y1*cos(th);
if rr<0,line(x,y);axis equal;end

此程式使用例與後面之範例合併。

滑塊(sldblk)


滑塊是方塊的物件,必須在一個平滑的面上移動。因此必須配合前述之接地結ground使用。但為使程式活用,本函數sldblk並沒有直接呼叫ground,因此必須由外部合併呼叫。其中LL,W分別為方塊之長與寬度,LL同時作為是否立即繪圖之指標,若使用負值,則會同時繪圖,否則僅傳回其外型之座標值。

方塊之中心(x0,y0)為參考點,可由連桿之端點在此連接。若方塊必須旋轉在某一方向,則方塊將以此點為旋轉中心,其旋轉角度為theta。


function [x,y]=sldblk(LL,W,x0,y0,theta)
% circular motion
% Inputs:LL,W:length and width of slider
% x0,y0:center point
% theta:inclined angle, degrees
% Example: sldblk(3,2,0,0,30)
L=abs(LL);th=0:pi/50:2*pi;
xx=W/5*cos(th);yy=W/5*sin(th);
th=-theta*pi/180;
%The coordinates of the blok
x1=[0 xx L/2 L/2 -L/2 -L/2 0 L/2 L/2]+x0;
y1=[0 yy 0 W/2 W/2 -W/2 -W/2 -W/2 0]+y0;
%Rotating the block by an angle th in radians
x=x1*cos(th)-y1*sin(th);
y=x1*sin(th)+y1*cos(th);
if LL<0,line(x,y);axis equal;end

執行例



% demo1.m
clf;
anchor(-0.6,0,0,0);%設底座,rr=-0.6表示要繪出圖形
linkxy([0 0],[2,2],-1);%繪第一桿
linkxy([2 2],[7,-1],-1);%繪第二桿
[x,y]=sldblk(-1.5,1,7,-1,30);%繪滑塊
ground(x(end-2),y(end-2),-2,30);%繪接地結



% demo2.m
clf;
anchor(-0.7,0,0,270);%繪底座一
linkxy([0 0],[-1,3],-1);%繪桿一
linkxy([-1 3],[-4 3],-1);%繪桿二
linkxy([-4 3],[-6 8],-1);%繪桿三
anchor(-0.7,-6,8,180);%繪底座二




滾動結(rolls)


滾動為一圓在另一平面上滾動。圓心則與另一桿相連,而圓周則在一平面上滾動。此平面可能為傾斜面,亦可能為平面,由前面的接地結函數ground決定。但是為符合滾動的原則,圓與地應有一起始點,以表示與接地結有一定的關係,為此可以在圓上畫一半徑,作為起點標示之用。

若地為水平狀態,圓之半徑與地垂直,成為最基本但也最簡單的狀態。若滾動接觸的地面傾斜某一角度時,此時必須連將圓與其一個半徑迴轉同一角度。程式之圓筒半徑為r,其中心點為(x0,y0),同時地面之傾斜角度為theta。

function [x,y]=rolls(r,x0,y0,theta)
% circular motion
% Inputs:r:radius of circle
% x0,y0:center of the circle
% theta:inclined angle, ang
% Example: rolls(5,0,0,30)
th=-pi/2:pi/50:1.5*pi;
xx=r*cos(th);yy=r*sin(th);
xi=xx/5;yi=yy/5;
th=theta*pi/180;
%x1,y1 are coordinates of circle and radius
x1=[0 xx xi 0];y1=[0 yy yi 0];
x=x1*cos(th)-y1*sin(th)+x0;
y=x1*sin(th)+y1*cos(th)+y0;
line(x,y);axis equal

執行例



% demo3.m
clf;
anchor(-0.7,-6,8,180);%上方底座
linkxy([-4 3],[-6 8],-1);%第一連桿
linkxy([0 0],[-4,3],-1);%第二連桿
[x,y]=rolls(2,0,0,30);%滾輪接地成30度
ground(x(2),y(2),-2,30);%接地結,與地成30度