2007年4月10日 星期二

作業5-2-2

第二小題

利用教學講義上面的兩個函式
function linkshape_n(A,B,dd)
if nargin==2,dd=1;
end;
d=abs(dd);
AB=(B(1)+j*B(2))-(A(1)+j*A(2));
D=abs(AB);
th=angle(AB);
t=linspace(pi/2,2.5*pi,20);
Cout=max(d/2,0.2)*exp(j*t');
Cin=Cout/2;
if dd>0, P=[0;Cin;Cout(1:10);D+Cout(11:20);
D+Cin;D+Cout(20);Cout(1)];
else P=[Cin;0;D;D+Cin];
end
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 equal

function link_angle(lens,angle,start,w)
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

%用來繪出手指運動情形的函式
function drawfingers(L1,th1,th2,th3)
d1=L1; %手掌長為輸入之L1
d2=1/3*L1; %第三指間長
d3=8*d2/9; %第二指間長
d4=3*d2/5; %第一指間長
%以迴圈來跑旋轉
for n=0:5:100,
clf;
axis equal;
%計算各個水平角度以便旋轉公式使用
if n<=th1,
theta1=n;
else
theta1=th1;
end;
if n<=th2;
theta2=theta1+n;
else
theta2=theta1+th2;
end;
if n<=th3;
theta3=theta2+n;
else
theta3=theta2+th3;
end;

lens=[d1,d2,d3,d4];
angle=[0,theta1,theta2,theta3];

link_angle(lens,angle,[0,0],2.5)%呼叫link_angle函式
pause(0.05);
end;

以手掌長為10,極限角分別為90,92,98
>> drawfingers(10,90,92,98)
執行結果如下

2 則留言:

不留白老人 提到...

這個手掌部份結果不錯,若能分析一些數據,過程會更充實

star*endli 提到...

因為原來的圖座摽軸會跟著動
所以我將圖修正後(固定座標軸)
重新放上