1/22/07

2.5 利用linkshape繪製連桿組

前節提出之linkshape函數可以依輸入之兩端點繪出具有厚度之單一連桿,本節則試利用這個函數繪出不定數目之連桿組,所得之連桿必須每桿頭尾相連,下面為輸入端點座標後連成之程式,稱為link_plot,這個函數必須呼叫linkshape,此函數已在本章第2.3節中討論過:

桿座標輸入



function link_plot(x,y,w)
%link_plot.m will call links.m
%draw connecting linkshape function
%Input:(x,y)are serial coordinates
% w:width of links
%Example: link_plot([0 3 5 1],[0 3 2 1],3)
%Author:DSFon, BIME,NTU. Date:Jan. 25, 2007
clf;
if nargin==2,w=1;end
for i=1:length(x)-1
linkshape([x(i) y(i)],[x(i+1) y(i+1)],w);
end


這個程式雖短,但只要有一組座標輸入即可繪出其連桿組外型。例如:連續四桿之座標分別為(0,0), (3,3), (5,2), (5,5)等四點,其輸入型式為:

>> link_plot([0 3 5 4],[0 3 2 5])


執行結果如下圖:



桿長度與角度輸入

前面程式link_plot之輸入為各桿端點之座標。但有些時候,一組連桿常僅知道桿長及桿與前桿所夾之角度。這種表示法普見於機器手臂之討論。本節提出之link_angle程式,就是實現這個想法。此時之輸入參數為各桿之長度(lens),對應水平角度(angle)及起點(start)與桿寬(w)等。

function link_angle(lens,angle,start,w)
%link_plot.m will call links.m
%draw connecting links
%Input:lens:lengths of links
% angle:link angles w/t the former link, degs
% w:width of links
% start:starting point(x0,y0)
%Example: link_angle([5 3 4 6],[30 60 90 145])
%Author:DSFon, BIME,NTU. Date:Jan. 25, 2007
if nargin<4,w=1;end;
if nargin<3,start=[0 0];end
lens=lens(:);angle=angle(:);
th=angle*pi/180;
x=cumsum([start(1);lens.*cos(th)]);
y=cumsum([start(2);lens.*sin(th)]);
for i=1:length(x)-1
linkshape([x(i) y(i)],[x(i+1) y(i+1)],w);
end



若使用桿長及水平角度輸入,則可使用下面之plot_angle程式進行,設桿長為5,3,4,6個單位,其對應水平角分別為30, 60, 90, 145度,則可執行如下:

>>link_angle([3 4 6],[60 90 145],[4.2,2.5])

執行結果如下圖: