2007年4月11日 星期三

機動學 作業五

作業五 b94611042 王志豪
5.1.1














手臂外型
繪出手臂外型的程式,如下:
L1=30;
L2=25;
L3=10;
arm1=[0 0;L1/6 -L1/5;L1*(5/6) -L1/6;L1 0;L1*(5/6) L1/6;L1/6 L1/5;0 0;L1 0]
arm2=[L1 0;L2/6+L1 -L2/6;L2*(5/6)+L1 -L2/6;L1+L2 0;L2*(5/6)+L1 L2/6;L2/6+L1 L2/6;L1 0;L1+L2 0]
palm=[L1+L2 0;L3/3+L1+L2 -L3/3;L1+L2+L3 0;L1+L2 0;]
axis equal
line(arm1(:,1),arm1(:,2));
line(arm2(:,1),arm2(:,2));
line(palm(:,1),palm(:,2));

5.1.2
程式函數function body,其程式約略介紹如下:

function body(L1,L2,L3,theta1,theta2,theta3)
%上手臂.下手臂及手掌的長度分別輸入於前三項,後三項則為所欲之角度

arm1=[0 0;L1/6 -L1/5;L1*(5/6) -L1/6;L1 0;L1*(5/6) L1/6;L1/6 L1/5;0 0;L1 0];
arm2=[L1 0;L2/6+L1 -L2/6;L2*(5/6)+L1 -L2/6;L1+L2 0;L2*(5/6)+L1 L2/6;L2/6+L1 L2/6;L1 0;L1+L2 0];
palm=[L1+L2 0;L3/3+L1+L2 -L3/3;L1+L2+L3 0;L1+L2 0;];
%建立起手臂及手掌的矩陣
axis equal
line(arm1(:,1),arm1(:,2));
line(arm2(:,1),arm2(:,2));
line(palm(:,1),palm(:,2));
%繪出手臂外型

clf
axis equal
AXIS([-70 70 -70 40]);
a1=arm1(:,1)*cosd(-theta1)-arm1(:,2)*sind(-theta1);
b1=arm1(:,1)*sind(-theta1)+arm1(:,2)*cosd(-theta1);
line(a1,b1);
theta2=180+theta1-theta2;
a2=arm2(:,1)*cosd(-theta2)-arm2(:,2)*sind(-theta2)+a1(4)-(L1)*cosd(-theta2);
b2=arm2(:,1)*sind(-theta2)+arm2(:,2)*cosd(-theta2)+b1(4)-(L1)*sind(-theta2);
line(a2,b2);
theta3=180+theta2-theta3;
a3=palm(:,1)*cosd(-theta3)-palm(:,2)*sind(-theta3)+a2(4)-(L1+L2)*cosd(-theta3);
b3=palm(:,1)*sind(-theta3)+palm(:,2)*cosd(-theta3)+b2(4)-(L1+L2)*sind(-theta3);
line(a3,b3);
%在這裡,主要就是開始讓手臂和手掌開始旋轉.
%這邊的概念,是先將每個手臂和手掌物件先作旋轉的動作,然後再作平移.
%由於程式執行速度極快,所以肉眼是分辨不出來的,故可直接得到轉動後的圖形.

5.1.3














圖片

5.1.4

動畫連結

動畫主程式大致如下:

%主程式
theta1=linspace(90,75,10)
theta2=linspace(-45,-35,10)
theta3=linspace(-30,-10,10)
for n=1:10
body(30,25,10,theta1(n),theta2(n),theta3(n))
pause(0.5)
end
%主程式這邊是利用先前所建立的function body,直接在外部做迴圈,使之變為動畫.


5.2.1
基本上,每個人每雙手的五根手指頭,除了大拇指之外,其餘者均為三連桿的結構.當中第二與第三指節應該是只能勉強彎曲至90度,而與手掌相連的第一指節,其所能彎曲的角度個人是秉持保留態度,畢竟過去看過不少人曾做出蠻令人驚訝的彎曲角度,應該也能算它是球型關節吧.
好,回歸機動學課本上所述,一個手掌的指頭在同一平面上作移動的情形,以自由度來講,把手掌視為接地的一端,指節分別為第二.第三.四桿,總桿數共計為四.而由於題目要我們探討於同一平面上的情形,故第一指節的球型關節便限於同一平面,所以會共有三個節,其自由度總和為三.
此時,便可使用課本所介紹的古魯伯公式,M=3(N-J-1)+sum(f)=3(4-3-1)+3=3 ,所以可以得到自由度為三的結論,並由三個指節來分別作為驅動桿.

5.2.2
%大抵而言,這個手指的function是用function body 所修改過來的,邏輯大致差不多,只有外型有變化而已.
function finger(L1,L2,L3,theta1,theta2,theta3)

arm1=[0 0;L1/6 -L1/5;L1*(5/6) -L1/6;L1 0;L1*(5/6) L1/6;L1/6 L1/5;0 0;L1 0];
arm2=[L1 0;L2/6+L1 -L2/6;L2*(5/6)+L1 -L2/6;L1+L2 0;L2*(5/6)+L1 L2/6;L2/6+L1 L2/6;L1 0;L1+L2 0];
palm=[L1+L2 0;L3/3+L1+L2 -L3/3;L1+L2+L3 0;L3/3+L1+L2 L3/3;L1+L2 0;];
%建立起三節手指的矩陣
axis equal
line(arm1(:,1),arm1(:,2));
line(arm2(:,1),arm2(:,2));
line(palm(:,1),palm(:,2));
%繪出手指外型
axis equal
a1=arm1(:,1)*cosd(-theta1)-arm1(:,2)*sind(-theta1);
b1=arm1(:,1)*sind(-theta1)+arm1(:,2)*cosd(-theta1);
line(a1,b1);
theta2=180+theta1-theta2;
a2=arm2(:,1)*cosd(-theta2)-arm2(:,2)*sind(-theta2)+a1(4)-(L1)*cosd(-theta2);
b2=arm2(:,1)*sind(-theta2)+arm2(:,2)*cosd(-theta2)+b1(4)-(L1)*sind(-theta2);
line(a2,b2);
theta3=180+theta2-theta3;
a3=palm(:,1)*cosd(-theta3)-palm(:,2)*sind(-theta3)+a2(4)-(L1+L2)*cosd(-theta3);
b3=palm(:,1)*sind(-theta3)+palm(:,2)*cosd(-theta3)+b2(4)-(L1+L2)*sind(-theta3);
line(a3,b3);

%小指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(4,2.5,2.5,theta1(n),theta2(n),theta3(n)) %小指
pause(0.5)
%基本上就是利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置
end














小指的圖

%無名指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(5.5,3.5,2.7,theta1(n),theta2(n),theta3(n)) %無名指
pause(0.5)
end
%利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置














無名指的圖

%中指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(6.2,3.7,2.8,theta1(n),theta2(n),theta3(n)) %中指
pause(0.5)
end
%利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置














中指的圖

%食指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(2.6,2.5,2.6,theta1(n),theta2(n),theta3(n)) %食指
pause(0.5)
end
%利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置














食指的圖

5.2.3
坦白講,我個人實在不大清楚這題所要求的東西.簡單來說,每個投手的姿勢都不盡相同,每個人的手長也各不同,我不知道王建民的各手指長度,所以在一開始,就已經不知如何下手.其二,每次投球出去的時候,隨著力道大小方向的不同,各種加速度也不盡相同,再者不同的球路所造成手指在運動時的加速度以及速度也會不同,直球.滑球.指叉球......等各式球路,變因太多,實不知該如何計算其各手指的加速度以及速度.
話說回來,單純探討各手指之速度及加速度如何,大抵應該就是在出手時,手指的速度以及加速度會與球相同.當然,這是總計的結果.假設如果要把各手指的分量精密計算的話,變數便會大幅增加.考慮到第一指節是球狀關節,所以在純粹的向前加速度與速度中,它可以加入轉動的數值,各手指對球的旋轉所造成的加速度總和,便可以讓球產生變化.
至於與上面單純探討四隻手指在同一平面所能做出的最大變動範圍,即是可以影響球路的高低.當四隻手指越往下扣,球路就會壓的越低,反之亦然.而在此時,就四隻手指單純的速度向量分析,關鍵點於脫手時,四隻手指對於跟球路同方向之速度以及加速度,會在剎那間達到相等.此時必須先排除因摩擦力所造成球產生另外一軸的轉動分量,單純分析相同方向的速度與加速度才是.
不過球員執球時,通常不會五指均緊貼著球.大部分的時候,均只有大拇指.食指.中指有接觸,其餘無名指與小指則未與球有接觸的機會.此時若要探究無名指與小指的速度與加速度,大致來說,應該是會跟手臂揮動之速度與加速度相等,然後再考慮一些手腕的轉動,大致就可以求得了.
單純手指速度與加速度的分析,大抵就是這樣吧.
至於有關講義第三章的dyad_draw函式,由於得不到確切的球員指長數據,故無法有個精確明顯的數字可以直接代入分析,所以這題我便採用理論分析的方式而已.
(附註:若要簡單分析,可假設球投出的瞬間,手掌和接手掌指節的角速度是和角加速度是W和a,然後指節長度是R,故切線加速度即為aR,而法線加速度便是w*w*R)

沒有留言: