2007年3月24日 星期六

機動學第四次作業

p.4-1
axis equal;
L=48+10;
AXIS([-90 90 -110 110])
x=[L/2 0 -1*L/2 L/2];
y=[0 (3)^(1/2)*L/2 0 0];
a=line(x,y)
for n=1:90
rotate(a,[0 0 1],4,[L/2 0 0])
pause(0.001)end
for n=1:90
rotate(a,[0 0 1],4,[0 (3)^(1/2)*(L)/2 0])
pause(0.001)
end
for n=1:90
rotate(a,[0 0 1],4,[-1*L/2 0 0])
pause(0.001)
end;


p.4-2

此為function的部分︰
function linkshape(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

主程式部分
linkshape([10 0],[0,0],2)
x=10;
y=0;
x1=[15];
y1=[0];
for n=1:10:360;
x2=x*cosd(n)+y*sind(n);
y2=-x*sind(n)+y*cosd(n);
linkshape([x2,y2], [0,0], 2)
line([x1,x2],[y1,y2]);
end




p.4-3



x1=0;
y1=0;
x2=3;
y2=4;
x3=13;
y3=4;
x4=10;
y4=0;
linkshape([x2 y2],[x1,y1],2);
linkshape([x3 y3],[x2,y2],3);
linkshape([x4 y4],[x3,y3],1.5);
linkshape([x1 y1],[x4,y4],2);
for n=0:1:12;
a=x2*cosd(30*n)+y2*sind(30*n);
b=-x2*sind(30*n)+y2*cosd(30*n);
c=x3+(a-x2);
d=b;
linkshape([a b],[x1,y1],2);
linkshape([c d],[a,b],3);
linkshape([x4 y4],[c,d],1.5);
linkshape([x1 y1],[x4,y4],2);
end;

1 則留言:

不留白老人 提到...

實際上若主程式不做成函數型式是無法執行的。所以下面應該是第三題的用法,其桿厚度也不必使用太寬。
做這種題目應稍有一些討論內容才不會空洞無物。

function b94611048
%b94611048 張志鵬
x1=0;
y1=0;
x2=3;
y2=4;
x3=13;
y3=4;
x4=10;
y4=0;
linkshape([x2 y2],[x1,y1]);
linkshape([x3 y3],[x2,y2]);
linkshape([x4 y4],[x3,y3]);
linkshape([x1 y1],[x4,y4]);
for n=0:1:12;
a=x2*cosd(30*n)+y2*sind(30*n);
b=-x2*sind(30*n)+y2*cosd(30*n);
c=x3+(a-x2);
d=b;
linkshape([a b],[x1,y1]);
linkshape([c d],[a,b]);
linkshape([x4 y4],[c,d]);
linkshape([x1 y1],[x4,y4]);
end;

function linkshape(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