2007年4月11日 星期三

機動學第五次作業

p.5.1.1
%L1是上手臂的長度
%L1是下手臂的長度
%L1是手腕的長度
L1=35;
L2=30;
L3=10;
r1=L1/6;
r2=L1/12;
r3=L3/2;
r4=L2/11;
%以下是我設計的外型
arm1x=[0 r1*cosd(150)+r1 r1*cosd(120)+r1 r1 11*r2 r2*cosd(60)+11*r2 r2*cosd(30)+11*r2 r2*cosd(0)+11*r2 r2*cosd(-30)+11*r2 r2*cosd(-60)+11*r2 11*r2 r1 r1*cosd(240)+r1 r1*cosd(210)+r1 0 L1];

arm1y=[0 r1*sind(150) r1*sind(120) r1 r2 r2*sind(60) r2*sind(30) r2*sind(0) r2*sind(-30)r2*sind(-60) -r2 -r1 r1*sind(240) r1*sind(210) 0 0];

arm2x=[L1 r4*cosd(30)+L1-L2+10*L2/11 r4*cosd(60)+L1-L2+10*L2/11 L1-L2+10*L2/11 L1-L2+L2/11 r4*cosd(120)+L1-L2+L2/11 r4*cosd(150)+L1-L2+L2/11 r4*cosd(180)+L1-L2+L2/11 r4*cosd(210)+L1-L2+L2/11 r4*cosd(240)+L1-L2+L2/11 L1-L2+L2/11 L1-L2+10*L2/11 r4*cosd(-60)+L1-L2+10*L2/11 r4*cosd(-30)+L1-L2+10*L2/11 r4*cosd(0)+L1-L2+10*L2/11 L1-L2];

arm2y=[0 r4*sind(30) r4*sind(60) r4 r4 r4*sind(120) r4*sind(150) r4*sind(180) r4*sind(210) r4*sind(240) -r4 -r4 r4*sind(-60) r4*sind(-30) r4*sind(0) 0];

palmx=[L1-L2 L1-L2 L1-L2+L3 L1-L2 L1-L2 L1-L2+L3];

palmy=[0 r4 0 -r4 0 0];

axis equal
line(arm1x,arm1y);
line(arm2x,arm2y);
line(palmx,palmy);

以是是我在零度時的圖


p.5-1-2

%function body 的設計

function body(L1,L2,L3,theta1,theta2,theta3)
r1=L1/6;
r2=L1/12;
r3=L3/2;
r4=L2/11;


arm1x=[0 r1*cosd(150)+r1 r1*cosd(120)+r1 r1 11*r2 r2*cosd(60)+11*r2 r2*cosd(30)+11*r2 r2*cosd(0)+11*r2 r2*cosd(-30)+11*r2 r2*cosd(-60)+11*r2 11*r2 r1 r1*cosd(240)+r1 r1*cosd(210)+r1 0 L1];

arm1y=[0 r1*sind(150) r1*sind(120) r1 r2 r2*sind(60) r2*sind(30) r2*sind(0) r2*sind(-30) r2*sind(-60) -r2 -r1 r1*sind(240) r1*sind(210) 0 0];

arm2x=[L1 r4*cosd(30)+L1-L2+10*L2/11 r4*cosd(60)+L1-L2+10*L2/11 L1-L2+10*L2/11 L1-L2+L2/11 r4*cosd(120)+L1-L2+L2/11 r4*cosd(150)+L1-L2+L2/11 r4*cosd(180)+L1-L2+L2/11 r4*cosd(210)+L1-L2+L2/11 r4*cosd(240)+L1-L2+L2/11 L1-L2+L2/11 L1-L2+10*L2/11 r4*cosd(-60)+L1-L2+10*L2/11 r4*cosd(-30)+L1-L2+10*L2/11 r4*cosd(0)+L1-L2+10*L2/11 L1-L2];

arm2y=[0 r4*sind(30) r4*sind(60) r4 r4 r4*sind(120) r4*sind(150) r4*sind(180) r4*sind(210) r4*sind(240) -r4 -r4 r4*sind(-60) r4*sind(-30) r4*sind(0) 0];

palmx=[L1-L2 L1-L2 L1-L2+L3 L1-L2 L1-L2 L1-L2+L3];

palmy=[0 r4 0 -r4 0 0];

axis equal
line(arm1x,arm1y);
line(arm2x,arm2y);
line(palmx,palmy);
clf


%這個for loop 在這裡沒用 在第四小題才有用
for n=1:1;
axis equal
AXIS([-80 80 -70 70]);
x1=arm1x*cosd(-theta1(n))-arm1y*sind(-theta1(n));
y1=arm1x*sind(-theta1(n))+arm1y*cosd(-theta1(n));
line(x1,y1)
theta2(n)=180+theta1(n)-theta2(n);
x2=arm2x*cosd(-theta2(n))-arm2y*sind(-theta2(n))+x1(16)-(L1-L2)*cosd(-theta2(n));
y2=arm2x*sind(-theta2(n))+arm2y*cosd(-theta2(n))+y1(16)-(L1-L2)*sind(-theta2(n));
line(x2,y2)
theta3(n)=180+theta2(n)-theta3(n);
x3=palmx*cosd(-theta3(n))-palmy*sind(-theta3(n))+x2(15)-(L1-L2)*cosd(-theta3(n));
y3=palmx*sind(-theta3(n))+palmy*cosd(-theta3(n))+y2(15)-(L1-L2)*sind(-theta3(n));
line(x3,y3)
end;

p.5-1-3

將數值輸入body(35,30,10,90,-45,-30)

下面是我theta1=90 theta2=-45 theta3=-30 時的圖





p.5-1-4

L1=35;
L2=30;
L3=10;
r1=L1/6;
r2=L1/12;
r3=L3/2;
r4=L2/11;

arm1x=[0 r1*cosd(150)+r1 r1*cosd(120)+r1 r1 11*r2 r2*cosd(60)+11*r2 r2*cosd(30)+11*r2 r2*cosd(0)+11*r2 r2*cosd(-30)+11*r2 r2*cosd(-60)+11*r2 11*r2 r1 r1*cosd(240)+r1 r1*cosd(210)+r1 0 L1];
arm1y=[0 r1*sind(150) r1*sind(120) r1 r2 r2*sind(60) r2*sind(30) r2*sind(0) r2*sind(-30) r2*sind(-60) -r2 -r1 r1*sind(240) r1*sind(210) 0 0];
arm2x=[L1 r4*cosd(30)+L1-L2+10*L2/11 r4*cosd(60)+L1-L2+10*L2/11 L1-L2+10*L2/11 L1-L2+L2/11 r4*cosd(120)+L1-L2+L2/11 r4*cosd(150)+L1-L2+L2/11 r4*cosd(180)+L1-L2+L2/11 r4*cosd(210)+L1-L2+L2/11 r4*cosd(240)+L1-L2+L2/11 L1-L2+L2/11 L1-L2+10*L2/11 r4*cosd(-60)+L1-L2+10*L2/11 r4*cosd(-30)+L1-L2+10*L2/11 r4*cosd(0)+L1-L2+10*L2/11 L1-L2];
arm2y=[0 r4*sind(30) r4*sind(60) r4 r4 r4*sind(120) r4*sind(150) r4*sind(180) r4*sind(210) r4*sind(240) -r4 -r4 r4*sind(-60) r4*sind(-30) r4*sind(0) 0];
palmx=[L1-L2 L1-L2 L1-L2+L3 L1-L2 L1-L2 L1-L2+L3];
palmy=[0 r4 0 -r4 0 0];
axis equal
line(arm1x,arm1y);
line(arm2x,arm2y);
line(palmx,palmy);
clf

%將每個角度分成十份
theta1=linspace(-90,-75,10)
theta2=linspace(-45,-35,10)
theta3=linspace(-30,-10,10)
for n=1:10;
axis equal
AXIS([-70 70 -70 40]);
x1=arm1x*cosd(-theta1(n))-arm1y*sind(-theta1(n));
y1=arm1x*sind(-theta1(n))+arm1y*cosd(-theta1(n));
line(x1,y1)
theta2(n)=180+theta1(n)-theta2(n);
x2=arm2x*cosd(-theta2(n))-arm2y*sind(-theta2(n))+x1(16)-(L1-L2)*cosd(-theta2(n));
y2=arm2x*sind(-theta2(n))+arm2y*cosd(-theta2(n))+y1(16)-(L1-L2)*sind(-theta2(n));
line(x2,y2)
theta3(n)=180+theta2(n)-theta3(n);
x3=palmx*cosd(-theta3(n))-palmy*sind(-theta3(n))+x2(15)-(L1-L2)*cosd(-theta3(n));
y3=palmx*sind(-theta3(n))+palmy*cosd(-theta3(n))+y2(15)-(L1-L2)*sind(-theta3(n));
line(x3,y3)
pause(0.5)
clf
end;
這網站是我做出來的動畫
http://www.youtube.com/watch?v=ZEM30bnEnPY

p.5.2.1
手指可分為三節每一節只能旋轉90度若手腕為一桿,一端為定點,加上手指的連結點,就是有三個接點在平的角度來看,自由度總和為1+1+1=3;
p.5.2.2
%下面是手指的function 內部有用到linkshape
function finger1(P,theta1,theta2,theta3)
L3=P*(2.5/17);
L2=P*(2/17);
L1=P*(2.5/17);
f1x=[0 L1]
f1y=[0 0]
f2x=[L1 L1-L2]
f2y=[0 0]
f3x=[L1-L2 L1-L2+L3]
f3y=[0 0]
axis equal
AXIS([-10 10 -10 10])
linkshape([f1x(1) f1y(1)],[f1x(2) f1y(2)], 1)
linkshape([f2x(1) f2y(1)],[f2x(2) f2y(2)], 1)l
inkshape([f3x(1) f3y(1)],[f3x(2) f3y(2)], 1)
clfaxis equalAXIS([-8 8 -8 8])
x1=f1x*cosd(-theta1)-f1y*sind(-theta1);
y1=f1x*sind(-theta1)+f1y*cosd(-theta1);
linkshape([x1(1) y1(1)],[x1(2) y1(2)], 1)
theta2=180+theta1-theta2;
x2=f2x*cosd(-theta2)-f2y*sind(-theta2)+x1(2)-(L1-L2)*cosd(-theta2);
y2=f2x*sind(-theta2)+f2y*cosd(-theta2)+y1(2)-(L1-L2)*sind(-theta2);
linkshape([x2(1) y2(1)],[x2(2) y2(2)], 1)
theta3=180+theta2-theta3;
x3=f3x*cosd(-theta3)-f3y*sind(-theta3)+x2(1)-(L1-L2)*cosd(-theta3);
y3=f3x*sind(-theta3)+f3y*cosd(-theta3)+y2(1)-(L1-L2)*sind(-theta3);
linkshape([x3(1) y3(1)],[x3(2) y3(2)], 1)
每一根手指的極限位置
theta1=linspace(0,90,10)
theta2=linspace(150,90,10)
theta3=linspace(150,90,10)
for n=1:10
finger1(17,theta1(n),theta2(n),theta3(n))
pause(0.05)end;for n=1:10 f
inger2(17,theta1(n),theta2(n),theta3(n))
pause(0.05)
end;
for n=1:10
finger3(17,theta1(n),theta2(n),theta3(n))
pause(0.05)end;
for n=1:10
finger4(17,theta1(n),theta2(n),theta3(n))
pause(0.05)
end;





p.5-2-3
假設球的速度為A那在球離開手的那一刻
手的速度也該為A
w=vr r為手半徑 w為angular velocity
a=br a為手當時的加速度 b是angular accelerationand
v=at t是從手開始動到球離開的時間
所以 w,b 都可以求出來



2 則留言:

不留白老人 提到...

做的很好,但請多加過程說明.

不留白老人 提到...

程式寫作最好多採用function的格式,其使用彈性較大,只要輸入參數不必更改內容。