2007年4月10日 星期二

作業5-1-4

第四小題

%修改function body內容後如下

L1=33;L2=31;L3=15; %上手臂,下手臂,手掌的長度
theta1=-90; theta2=-45;theta3=-30; %題目圖示之角度輸入
dA1=10; %用以設定各個連桿連結點的直徑
dA2=6;
dB1=6;
dB2=4;
dC1=4;
dfinger=0.5; %用來繪製手指形狀
t=linspace(pi/2,2.5*pi,20);
Cfinger=dfinger*exp(j*t');
dthumb=0.8; %用來繪製拇指形狀
tt=linspace(0,2*pi,20);
Cthumb=dthumb*exp(j*tt');
L1x=L1; %設定連桿連結中心的初始座標
L1y=0;
L2x=L2;
L2y=0;
CoutA1=max(dA1/2,0.2)*exp(j*t'); %用來計算各連桿中心內外圓的直徑
CinA1=CoutA1/2;
CoutA2=max(dA2/2,0.2)*exp(j*t');
CinA2=CoutA2/2;
CoutB1=max(dB1/2,0.2)*exp(j*t');
CinB1=CoutB1/2;
CoutB2=max(dB2/2,0.2)*exp(j*t');
CinB2=CoutB2/2;
CoutC1=max(dC1/2,0.2)*exp(j*t');
CinC1=CoutC1/2;

x1=zeros(1,11);y1=zeros(1,11); %用來放置旋轉後之座標的矩陣
x2=zeros(1,11);y2=zeros(1,11);
x3=zeros(1,11);y3=zeros(1,11);
%各個連桿座標設定並設定以擦式模式之線繪出
arm1=[0;CinA1;CoutA1(1:10);L1+CoutA2(11:20);
L1+CinA2;L1+CoutA2(20);CoutA1(1)];
xx1=real(arm1);
yy1=imag(arm1);
h1=line(x1,y1,'erasemode','xor','color','r','linewidth',2);
x1=get(h1,'xdata');y1=get(h1,'ydata');
arm2=[0;CinB1;CoutB1(1:10);L2+CoutB2(11:20);
L2+CinB2;L2+CoutB2(20);CoutB1(1)];
xx2=real(arm2);
yy2=imag(arm2);
h2=line(x2,y2,'erasemode','xor','color','r','linewidth',2);
x2=get(h2,'xdata');y2=get(h2,'ydata');

arm3=[0;CinC1;CoutC1(1:10);L3/2-3i;
L3*4/5-2.5i+Cfinger(11:20);L3/2-2.2i+Cfinger(20);
L3*15/16-i+Cfinger(11:20);L3/2-0.2i+Cfinger(20);
L3+1.5i+Cfinger(11:20);L3/2+1.7i+Cfinger(20);
L3*9/10+3.5i+Cfinger(11:20);L3/3+3i+Cfinger(20);
L3*2/5+7.5i+Cthumb(1:10);L3/4+3i+Cthumb(10);
CoutC1(1)];
xx3=real(arm3);
yy3=imag(arm3);
h3=line(x3,y3,'erasemode','xor','color','r','linewidth',2);
x3=get(h3,'xdata');y3=get(h3,'ydata');
%以迴圈來進行旋轉
for n=0:1:10
th1=0;th2=0;th3=0; %清空,使各初始值為0
th1=theta1+n*2.5; %計算旋轉後的圖式角度
th2=theta2+n;
th3=theta3+n*2;

th1p=-th1; %計算旋轉後各水平角
th2p=th2-th1+180;
th3p=th2-th1+th3;

%各個連桿的旋轉平移
x1=xx1*cosd(th1p)-yy1*sind(th1p);
y1=xx1*sind(th1p)+yy1*cosd(th1p);
arm1px=L1x*cosd(th1p)-L1y*sind(th1p);
arm1py=L1x*sind(th1p)+L1y*cosd(th1p);

x2=xx2*cosd(th2p)-yy2*sind(th2p)+arm1px;
y2=xx2*sind(th2p)+yy2*cosd(th2p)+arm1py;
arm2px=L2x*cosd(th2p)-L2y*sind(th2p)+arm1px;
arm2py=L2x*sind(th2p)+L2y*cosd(th2p)+arm1py;

x3=xx3*cosd(th3p)-yy3*sind(th3p)+arm2px;
y3=xx3*sind(th3p)+yy3*cosd(th3p)+arm2py;

%輸出並繪製連桿
axis equal

axis([-25,25,-10,40]);
set(h1,'xdata',x1,'ydata',y1);
set(h2,'xdata',x2,'ydata',y2);
set(h3,'xdata',x3,'ydata',y3);

pause(0.01);

end;
%跳出迴圈
執行結果如下(畫面要等久一點才會出現動畫)

2 則留言:

不留白老人 提到...

好像沒有連接得很好

star*endli 提到...

已將程式碼修正(紅色部分)
並放上新的圖