2007年4月10日 星期二

機動學第五次作業之二


function finger(L1,th1)


finger=[-L1/3 0;0 L1/6;L1 L1/6;L1*4/3 0;L1 -L1/6;0 -L1/6;-L1/3 0];
f=line(finger(:,1),finger(:,2));
rotate(f,[0 0 1],th1,[0 0 0]);

function finger2(L1,L2,th1,th2)
finger2=[ L1*cosd(th1)-L2*1/3 L1*sind(th1);
   L1*cosd(th1) L1*sind(th1)+L2*1/6;
   L1*cosd(th1)+L2 L1*sind(th1)+L2*1/6;
   L1*cosd(th1)+L2*4/3 L1*sind(th1);
L1*cosd(th1)+L2 L1*sind(th1)-L2*1/6;
L1*cosd(th1) L1*sind(th1)-L2*1/6;
L1*cosd(th1)-L2*1/3 L1*sind(th1)];
f2=line(finger2(:,1),finger2(:,2));
rotate(f2,[0 0 1],th1+th2,[L1*cosd(th1) L1*sind(th1) 0]);


function fingertip(L1,L2,L3,th1,th2,th3)
finger=[L1*cosd(th1)+L2*cosd(th1+th2)-L3*1/3 L1*sind(th1)+L2*sind(th1+th2);
L1*cosd(th1)+L2*cosd(th1+th2) L1*sind(th1)+L2*sind(th1+th2)+L3*1/6;
L1*cosd(th1)+L2*cosd(th1+th2)+L3 L1*sind(th1)+L2*sind(th1+th2+L3*1/6;
L1*cosd(th1)+L2*cosd(th1+th2)+L3*4/3 L1*sind(th1)+L2*sind(th1+th2);
L1*cosd(th1)+L2*cosd(th1+th2)+L3 L1*sind(th1)+L2*sind(th1+th2)-L3*1/6;
L1*cosd(th1)+L2*cosd(th1+th2) L1*sind(th1)+L2*sind(th1+th2)-L3*1/6;
L1*cosd(th1)+L2*cosd(th1+th2)-L3*1/3 L1*sind(th1)+L2*sind(th1+th2)];

f=line(finger(:,1),finger(:,2));
rotate(f,[0 0 1],th1+th2+th3, [L1*cosd(th1)+L2*cosd(th1+th2) L1*sind(th1)+L2*sind(th1+th2) 0]);

function body2(L1,L2,L3,th1,th2,th3)
finger(L1,th1);
finger2(L1,L2,th1,th2);
fingertip(L1,L2,L3,th1,th2,th3);

p5-2.3
以三根連桿大概表示出手指頭的三節,如何有最大的極限動作,
假設在座標原點(0,0)是手指固定的那一端我的假設是關節的部
分都是尖的,因為要畫出接近弧形的關節必須要描很多點,所以
在這裡我就用比較方正的畫法,可以減少描點的數量




p5-2.4

假設棒球選手的球速投出時有144km/h,換算成公制單位也就是40m/s,假設在投出的時候之速度就等於
手指向下的切線速度,那麼我們會發現向心加速度(假設手指大約10公分長)
a=v.v/r=40*40/0.1=16000m/s.s 這個加速度假如乘上質量(設手大約200克重)得到的結果
就有3200牛頓,大約接近300公斤的力,由這裡我們很明顯看出來棒球選手投球絕對不只有用到手指
,用手臂可以讓r變大,讓所承受的力變小,如果要再加上腰力或是腿的全身平衡就更複雜了,超出這次的範圍在這裡就不討論了

機動學第五次作業之一

p5-1.1

function arm1(L1,th1) %建立一個叫做arm1的函數
axis equal; %裡面有L1及th1分別代表上臂長和其轉動角度
for i=90:1:270 %大致上畫出肩膀的球窩關節
arm1upx=5*cosd(i); %量自己的手發現寬度的一半大約為五公分
arm1upy=5*sind(i);
arm1upx1=5*cosd(i)*cosd(-th1)-5*sind(i)*sind(-th1);
arm1upy1=5*cosd(i)*sind(-th1)+5*sind(i)*cosd(-th1);
line(arm1upx1,arm1upy1);
end;
for j=-90:1:90
arm1lowx=3*cosd(j)+L1; %這是手肘部分的關節
arm1lowy=3*sind(j); %與肩膀關節假設差不多,只是寬度不同
arm1lowx1=(3*cosd(j)+L1)*cosd(-th1)-3*sind(j)*sind(-th1);
arm1lowy1=(3*cosd(j)+L1)*sind(-th1)+3*sind(j)*cosd(-th1);
line(arm1lowx1,arm1lowy1);
end;
%分別寫出連接幾個點的
%X和Y座標,把手的部分
%跟上面關節的部分接起來
p1x=5*cosd(90)*cosd(-th1)-5*sind(90)*sind(-th1);
p1y=5*cosd(90)*sind(-th1)+5*sind(90)*cosd(-th1);
p2x=5*cosd(270)*cosd(-th1)-5*sind(270)*sind(-th1);
p2y=5*cosd(270)*sind(-th1)+5*sind(270)*cosd(-th1);
p3x=(3*cosd(-90)+L1)*cosd(-th1)-3*sind(-90)*sind(-th1);
p3y=(3*cosd(-90)+L1)*sind(-th1)+3*sind(-90)*cosd(-th1);
p4x=(3*cosd(90)+L1)*cosd(-th1)-3*sind(90)*sind(-th1);
p4y=(3*cosd(90)+L1)*sind(-th1)+3*sind(90)*cosd(-th1);

qua=[p1x p1y;p2x p2y;p3x p3y;p4x p4y;p1x p1y]; %一筆劃線
line(qua(:,1),qua(:,2));
function arm2(L1,L2,th1,th2) %這是下臂的函數
axis equal; %假設大致與上臂相同,比較不一樣的地方
for i=90:1:270 %在因為下臂必須跟手肘連接,所以要用到
arm2upx=3*cosd(i)+L1; %有關上臂的參數像L1,th1
arm2upy=3*sind(i);
arm2upx1=arm2upx*cosd(-th2)-arm2upy*sind(-th2);
arm2upy1=arm2upx*sind(-th2)+arm2upy*cosd(-th2);
line(arm2upx1,arm2upy1);%end;%for j=-90:1:90
arm2lowx=2*cosd(j)+L2+L1;
arm2lowy=2*sind(j);
arm2lowx1=arm2lowx*cosd(-th2)-arm2lowy*sind(-th2);
arm2lowy1=arm2lowx*sind(-th2)+arm2lowy*cosd(-th2);
line(arm2lowx1,arm2lowy1);
end;

p1x=(3*cosd(90)+L1)*cosd(-th1)-3*sind(90)*sind(-th1);
p1y=(3*cosd(90)+L1)*sind(-th1)+3*sind(90)*cosd(-th1);
p2x=(3*cosd(270)+L1)*cosd(-th1)-3*sind(270)*sind(-th1);
p2y=(3*cosd(270)+L1)*sind(-th1)+3*sind(270)*cosd(-th1);
p3x=(2.5*cosd(-90)+L2+L1)*cosd(-th1)-2.5*sind(-90)*sind(-th1);
p3y=(2.5*cosd(-90)+L2+L1)*sind(-th1)+2.5*sind(-90)*cosd(-th1);
p4x=(2.5*cosd(90)+L2+L1)*cosd(-th1)-2.5*sind(90)*sind(-th1);
p4y=(2.5*cosd(90)+L2+L1)*sind(-th1)+2.5*sind(90)*cosd(-th1);
qua=[p1x p1y;p2x p2y;p3x p3y;p4x p4y;p1x p1y];
%最後畫出下臂的外形

h=line(qua(:,1),qua(:,2));
rotate(h,[0 0 1],th2,[L1*cosd(-th1) L1*sind(-th1) 0])
%加了rotate就可以讓
%下臂繞著手肘旋轉

function palm(L1,L2,L3,th1,th2,th3) %手掌的函數
%手掌要跟下臂連接,所以起始點連接是
%手腕的部分
p1x=L1*cosd(-th1)+L2*cosd(-90+th2);
p1y=L1*sind(-th1)+L2*sind(-90+th2);
%大致上假設大拇指根部在1/3手掌長的地方
%其他描點大約都按照手掌比例而成
p2x=p1x+L3/3;
p2y=p1y;
p3x=p1x+2/3*L3;
p3y=p1y+L3/4;
p4x=p1x+L3/2;
p4y=p1y;
p5x=p1x+L3;
p5y=p1y;
p6x=p1x+L3;
p6y=p1y-1;
p7x=p1x+L3/2;
p7y=p1y-1;
p8x=p1x+L3/2;
p8y=p1y-1.3;
p9x=p1x+L3;
p9y=p1y-1.3;
p10x=p1x+L3;
p10y=p1y-2.3;
p11x=p1x+L3/2;
p11y=p1y-2.3;
p12x=p1x+L3/2;
p12y=p1y-2.6;
p13x=p1x+L3;
p13y=p1y-2.6;
p14x=p1x+L3;
p14y=p1y-3.6;
p15x=p1x+L3/2;
p15y=p1y-3.6;
p16x=p1x+L3/2;
p16y=p1y-3.9;
p17x=p1x+L3;
p17y=p1y-3.9;
p18x=p1x+L3;
p18y=p1y-5;
p19x=p1x;
p19y=p1y-5;
hand=[p1x p1y;p2x p2y;p3x p3y;p4x p4y;p5x p5y;p6x p6y;p7x p7y;p8x p8y;p9x p9y;p10x p10y;p11x p11y;p12x p12y;p13x p13y;p14x p14y;p15x p15y;p16x p16y;p17x p17y;p18x p18y;p19x p19y;p1x p1y];

h=line(hand(:,1),hand(:,2));
rotate(h,[0 0 1],th3,[p1x p1y 0])
%最後把線全部連起來
%同樣這個函數讓圖形旋轉
axis equal



p5-1.2

%一個body的函數要能畫出三部分,就要有對應的參數
%上臂只需要上臂長,自己旋轉的角度 下臂和手掌需要
%它們上面的function的參數,因為轉動會影響座標的變化
function body(L1,L2,L3,th1,th2,th3)
arm1(L1,th1);
arm2(L1,L2,th1,th2);
palm(L1,L2,L3,th1,th2,th3);

由於手掌及arm2的位置都會受到arm1的影響,所以其中所含有的變數必須包含前面的變數,例如L1,L2th1,th2等等



p5-1.3

由於手掌的角度不可能彎成作業平台上所示的-30度,所以我個人認為教授所敘述的應該是相對於arm2的30度,也就是以手往前延伸當作水平線來算,手掌往逆時針方向旋轉30度,如我認知錯誤,煩請教授指正


p5-1.4
我根據上一題的解釋,所畫出的人類手臂的轉動的模式