2007年6月10日 星期日

作業五(改)

5.1
以人體為例,其手臂的動作可以視為三支桿,分別由上手臂,下手臂及手掌等三部份組成。其連結點分別為BCD,上手臂長為L1,下手臂長為L2,手掌長為L3,分別為三連桿,其連結點均屬旋轉結。

1. 試分別以一線畫繪出上手臂,下手臂及手掌的外形,令其座標組合名稱分別為arm1, arm2, palm,各組合之起點與終點分別為其連結點(注意:每人所做的應該不同,請勿抄襲)。
2. 寫出一程式函數function body(L1,L2,L3,theta1,theta2,theta3),令其繪出整個手臂的外型。其對應角度除第一個上手臂之水平角度為theta1 外,theta2為下手臂對上手臂的角度,theta3為手掌對下手臂之夾角,後二者反時針方向為正,順時針方向為負。其連桿連結角度關係如圖二。試就所撰寫之程式結構作一說明。
3. 試量自己的手臂尺寸作為輸入,當theta1=90度,theta2=-45度,theta3=-30度時,其位置如何。
4. 設theta1角度在-90度與-75度間變動,theta2在-45度至-35度間變動,而theta3則在-30度至-10度間變動。試將其變動區間分為十等分,模擬其動畫,並在部落格中顯示其動作。

圖一 人體手臂之相關位置圖

圖二 連桿與結間之角度關係

先建立兩程式
palm.m
linkage.m

palm.m:
function palm(A,th)
%P為手掌函式
%令xx為P之實部
%令yy為P之虛部
P = [1+2.5i;2.1+3.7i;3.9+4.6i;5.1+5.3i;5.8+5.5i;8.2+5i;11.4+5.6i;12.6+6i;...
12.7+5.3i;12.5+4.7i;12+4.2i;11.2+3.6i;10+3.1i;10.2+2.9i;18+3.1i;...
18.7+2.8i;18.9+2.1i;18.4+1.6i;19.5+1.7i;20+1.4i;20.1+0.6i;19.5+0.2i;18;...
18.5-0.5i;18.4-1.1i;18.1-1.4i;15-1.7i;15.4-2.3i;15.2-3i;...
14.4-3.4i;4.7-4.1i;3.5-3.9i;2.5-3.4i;-1.5i];
xx = real(2*P/3);
yy = imag(6*P/7);
x = xx*cos(th)-yy*sin(th)+A(1);
y = xx*sin(th)+yy*cos(th)+A(2);
line(x,y);
axis([-10 50 -40 50]);
title('Press Ctl-C to stop');

linkage.m:
function linkshape(A,B,d,f)
AB = (B(1)+j*B(2))-(A(1)+j*A(2));
D = abs(AB);
th = angle(AB);
t = linspace(pi/2,2.5*pi,200);
b_C = d*exp(j*t')/2;
s_C = b_C/2;
b_b_C = f*exp(j*t')/2;
s_s_C = b_b_C/2;
P = [s_C;b_C(1:100);D+b_b_C(101:200);D+s_s_C;D+b_b_C(200);b_C(1)];
xx = real(P);
yy = imag(P);
x = xx*cos(th)-yy*sin(th)+A(1);
y = xx*sin(th)+yy*cos(th)+A(2);
line(x,y);
axis([-10 50 -40 50]);
title('Press Ctl-C to stop');

今令
d=手臂與肩膀接合處之寬度半徑
e=手肘的寬度半徑
f=手腕的寬度半徑
A點=起始座標
q1=theta1
q2=theta3
q3=theta3

執行程式
d = 6;
e = 4;
f = 2.5;
A = [0 40];
q1 = (pi/180)*linspace(-90,-75,10);
q2 = (pi/180)*linspace(-45,-35,10);
q3 = (pi/180)*linspace(-30,-10,10);
for i = 1:10
for j = 1:10
for k = 1:10
%B點座標之定位,且旋轉平移
%C點的座標定位
B = 30*[cos(q1(i)) sin(q1(i))+1];
C = 27*[cos(q2(j)) sin(q2(j))];
plot(0,40);
%將AB連桿做圖
%將BC連桿做圖
%將CD連桿做圖
linkage(A,B,d,f);drawnow;
linkage(B,C,d,e);drawnow;
palm(C,q3(k));drawnow;
%歸一化座標軸
axis([-10 50 -40 50]);
%設定動畫時間間隔
pause(0.00000001);
title('Press Ctl-C to stop');
end;
end;
end;
動畫:


5.2
1. 就人的手指頭關節而言,可以將其解析成為下列之三連桿。試參考第二章及第三章中利用連桿與旋轉結的觀念,分析一個手掌的指頭在同一平面上作移動的情形。請詳明分析過程中所可以涉及之假設。
2. 就你自己的手掌尺寸為輸入,並請繪出四根指頭(大姆指除外)所可能展示的極限位置。
3. 當一個棒球投手(例如王建民)將球用手投出時,其各手指之速度及加速度如何(請參考第三章最後一節dyad_draw之函式所得的結果,並與手指運動時作對照。


先建立兩程式
finger.m
linkage2.m

finger.m:
function finger(A,d,l,w)
%令q1角度為theta1
%令q2角度為theta2
%假令q3角度為theta3
q1 = (pi/180)*linspace(0,-75,10);
q2 = (pi/180)*linspace(0,-90,10);
q3 = (pi/180)*linspace(0,-100,10);
for i = 1:10
for j = 1:10
for k = 1:10
%B點座標之旋轉
%C點座標之旋轉再加上B點之座標
%D點座標之旋轉再加上A,B兩點之座標
B = l(1)*[cos(q1(i)) sin(q1(i))] + A;
C = l(2)*[cos(q1(i)+q2(j)) sin(q1(i)+q2(j))] + B;
D = l(3)*[cos(q1(i)+q2(j)+q3(k)) sin(q1(i)+q2(j)+q3(k))] + C;
plot(10,10);
%呼叫連桿以畫出連桿一
%呼叫連桿以畫出連桿二
%呼叫連桿以畫出連桿三
linkshape2(A,B,d(1),d(2),w); drawnow;
linkshape2(B,C,d(2),d(3),w); drawnow;
linkshape2(C,D,d(3),d(4),w); drawnow;
axis([-5 15 -8 5]);
%歸一化座標軸範圍
pause(0.00000025);
title('Press ctrl-C to stop')
end;
end;
end;

linkshape2.m:
function linkshape2(A,B,d,f,c)
AB = (B(1)+j*B(2))-(A(1)+j*A(2));
D = abs(AB);
th = angle(AB);
t = linspace(pi/2,2.5*pi,200);
b_C = d*exp(j*t')/2;
s_C = b_C/2;
b_b_C = f*exp(j*t')/2;
s_s_C = b_b_C/2;
P = [s_C;b_C(1:100);D+b_b_C(101:200);D+s_s_C;D+b_b_C(200);b_C(1)];
xx = real(P);
yy = imag(P);
x = xx*cos(th)-yy*sin(th)+A(1);
y = xx*sin(th)+yy*cos(th)+A(2);
if (c == 1)
line(x,y,'Color','r');
end;
if (c == 2)
line(x,y,'Color','g');
end;
if (c == 3)
line(x,y,'Color','b');
end;
if (c == 4)
line(x,y,'Color','k');
end;
title('Press ctrl-C to stop');
axis([-5 15 -8 5]);

畫出食指:
finger([2 0],[2.4 1.6 1.6 1],[5.5 3 2.5],1);
畫出中指:
finger([2.5 0],[3 2 1.8 1],[6 3.5 2.5],2);
畫出無名指:
finger([1.5 0],[2 1.8 1.6 1.2],[5.5 3.3 2.5],3);
畫出小姆指:
finger([1 0],[2 1.6 1.2 1],[5 2.5 2.2],4);

動畫(食指):


假設投球時球由手至投出歷經時間為0.6秒,其角度根據手指實際彎曲角度所設置
可得:
速度(cm/s) 加速度(cm/s^2)
食指 13.7395 21.5837
中指 13.8284 22.4690
無名指 12.7566 16.5353
小拇指 11.1980 17.6780

此為手指的速度以及加速度,是根據手指長短及彎曲角度推測而得

1 則留言:

紫丁香 提到...

b94607012 生機(二) 楊善喬

內容非常詳盡