B94611008 生機二 徐嘉鴻
5.1.1
axis equal
L1=30; %上手臂長度
R1=L1*2/9;
arm1X=[0.5*cosd(0:5:180),R1*cosd(180:-5:50), 1.75*R1+1.75*R1*cosd(100:-5:-100),R1*cosd(-50:-5:-180),0.5*cosd(-180:5:0),3*R1+0.5*cosd(180:-5:0),3.5*R1,3*R1+0.5*cosd(0:-5:-180)];
arm1Y=[0.5*sind(0:5:180),R1*sind(180:-5:50), 0+0.88*R1*sind(100:-5:-100),R1*sind(-50:-5:-180),0.5*sind(-180:5:0), 0+0.5*sind(180:-5:0), 0 , 0+0.5*sind(0:-5:-180)];
arm1=line(arm1X,arm1Y);
L2=30; %下手臂長度
R2=L2/5.7;
arm2X=[0.5*cosd(0:5:180),R2*cosd(180:-5:90),4*R2+0.7*R2*cosd(90:-5:-90),R2*cosd(-90:-5:-180),0.5*cosd(-180:5:0),4.5*R2+0.5*cosd(180:-5:0),4.7*R2,4.5*R2+0.5*cosd(0:-5:-180)];
arm2Y=[0.5*sind(0:5:180),R2*sind(180:-5:90), 0+0.7*R2*sind(90:-5:-90),R2*sind(-90:-5:-180),0.5*sind(-180:5:0), 0+0.5*sind(180:-5:0), 0 , 0+0.5*sind(0:-5:-180)];
arm2X=arm2X+3*R1; %平移下手臂位置
arm2=line(arm2X,arm2Y);
L3=20; %手掌長度
R3=L3/2;
palmX=[0.5*cosd(-180:5:180),0.8*R3+ R3*cosd(180:-5:90), R3+0.1*R3*cosd(90:-5:-90), R3+0.4*R3*cosd(90:-5:0),R3+0.4*R3*cosd(0:-5:-90),0.8*R3+ R3*cosd(-90:-5:-180)];
palmY=[0.5*sind(-180:5:180), 0+0.5*R3*sind(180:-5:90),0.4*R3+0.1*R3*sind(90:-5:-90), 0.3*R3*sind(90:-5:0), 0.5*R3*sind(0:-5:-90), 0.5*R3*sind(-90:-5:-180)];
palmX=palmX+3*R1+4.5*R2; %平移手掌位置
palm=line(palmX,palmY);

5.1.2
function body(L1,L2,L3,theta1,theta2,theta3)
axis equal
limit=L1+L2+L3;
axis ([-limit limit -limit limit])
theta1=-theta1;
%利用L1繪製上手臂
R1=L1*2/9;
arm1X=[0.5*cosd(0:5:180),R1*cosd(180:-5:50), 1.75*R1+1.75*R1*cosd(100:-5:-100),R1*cosd(-50:-5:-180),0.5*cosd(-180:5:0),3*R1+0.5*cosd(180:-5:0),3.5*R1,3*R1+0.5*cosd(0:-5:-180)];
arm1Y=[0.5*sind(0:5:180),R1*sind(180:-5:50), 0+0.88*R1*sind(100:-5:-100),R1*sind(-50:-5:-180),0.5*sind(-180:5:0), 0+0.5*sind(180:-5:0), 0 , 0+0.5*sind(0:-5:-180)];
arm1=line(arm1X,arm1Y);
%旋轉上手臂與X軸夾theta1角
rotate(arm1,[0 0 1],theta1,[0 0 0]);
%利用L2繪製下手臂
R2=L2/5.7;
arm2X=[0.5*cosd(0:5:180),R2*cosd(180:-5:90),4*R2+0.7*R2*cosd(90:-5:-90),R2*cosd(-90:-5:-180),0.5*cosd(-180:5:0),4.5*R2+0.5*cosd(180:-5:0),4.7*R2,4.5*R2+0.5*cosd(0:-5:-180)];
arm2Y=[0.5*sind(0:5:180),R2*sind(180:-5:90), 0+0.7*R2*sind(90:-5:-90),R2*sind(-90:-5:-180),0.5*sind(-180:5:0), 0+0.5*sind(180:-5:0), 0 , 0+0.5*sind(0:-5:-180)];
%平移下手臂位置
arm2X=arm2X+3*R1*cosd(theta1);
arm2Y=arm2Y+3*R1*sind(theta1);
%旋轉下手臂與上手臂夾theta2角 由於我的初始設定上手臂與下手臂是夾180度角 所以必須修正
arm2=line(arm2X,arm2Y);
rotate(arm2,[0 0 1],theta1+theta2-180,[3*R1*cosd(theta1),3*R1*sind(theta1),0])
%利用L3繪製手掌
R3=L3/2;
palmX=[0.5*cosd(-180:5:180),0.8*R3+ R3*cosd(180:-5:90), R3+0.1*R3*cosd(90:-5:-90), R3+0.4*R3*cosd(90:-5:0),R3+0.4*R3*cosd(0:-5:-90),0.8*R3+ R3*cosd(-90:-5:-180)];
palmY=[0.5*sind(-180:5:180), 0+0.5*R3*sind(180:-5:90),0.4*R3+0.1*R3*sind(90:-5:-90), 0.3*R3*sind(90:-5:0), 0.5*R3*sind(0:-5:-90), 0.5*R3*sind(-90:-5:-180)];
%平移手掌位置
palmX=palmX+3*R1*cosd(theta1)+4.5*R2*cosd(theta1+theta2-180);
palmY=palmY+3*R1*sind(theta1)+4.5*R2*sind(theta1+theta2-180);
%旋轉手掌與下手臂夾theta3角 由於我的初始設定手掌與下手臂是夾180度角 所以必須修正
palm=line(palmX,palmY);
rotate(palm,[0 0 1],theta1+theta2+theta3-360,[3*R1*cosd(theta1)+4.5*R2*cosd(theta1+theta2-180),3*R1*sind(theta1)+4.5*R2*sind(theta1+theta2-180),0])
5.1.3
body(29,28,20,90,-45,-30)

5.1.4
clf
pause(3);
L1=29; L2=28; L3=20;
theta2=-45;
theta3=-30;
for theta1=-90:1.5:-75
theta2=theta2+1;
theta3=theta3+2;
clf
body(29,28,20,theta1,theta2,theta3);
pause(0.5);
end
1 則留言:
手臂若能由伸直慢慢移動到敬禮的姿勢會更好,希望你能再做一個這樣的動畫,你的手臂一線畫尚稱不錯,頗傳神的。手掌部位的動作著墨較少
張貼留言