博主刚参加完比赛,分享一下自己写的matlab折叠桌动态图代码,画的比较简陋,凑合着看吧http://s12/mw690/003cvAxDzy6MjFxV9G33b&690
代码如下,我就不一一解释每条命令了。
clc
clear
filename='mygif';
ri=zeros(1,10);
theta=zeros(1,10);
ai=zeros(1,10); bi=zeros(1,10);
di=zeros(1,10);
%定义变量
ai(1)=1.25;
b0=sqrt(625-(25-ai(1))^2);
l=120/2-b0; l0=l/2;
bi(1)=0; ri(1)=l0;
for ii =0:0.05*asin(50/l):asin(50/l)
fai=ii;
theta(1)=fai;
%计算最外那根木条参数
for i=2:10
ai(i)=2.5*i-1.25;
bi(i)=sqrt(625-(25-ai(i))^2)-b0;
ri(i)=sqrt(l0^2+bi(i)^2-2*bi(i)*l0*cos(fai));
theta(i)=acos((l0^2-bi(i)^2+ri(i)^2)/(2*ri(i)*l0))+fai;
di(i)=b0+ri(i)+bi(i)-l0;
end
li=zeros(1,10);
xi=zeros(1,40);
yi=zeros(1,40);
zi=zeros(1,40);
x=zeros(1,10);
y=zeros(1,10);
z=zeros(1,10);
li(:)=60-b0-bi(:);
x(:)=25-ai(:);
y(:)=bi(:)+b0+li(:).*cos(theta(:));
z(:)=li(:).*sin(theta(:));
for j=1:10
xi(j)=x(j);yi(j)=y(j);zi(j)=z(j);
end
for j=11:20
xi(j)=-xi(21-j);yi(j)=yi(21-j);zi(j)=zi(21-j);
end
for j=21:30
xi(j)=xi(41-j);yi(j)=-yi(41-j);zi(j)=zi(41-j);
end
for j=31:40
xi(j)=xi(41-j);yi(j)=-yi(41-j);zi(j)=zi(41-j);
end
beta=acos(xi/25);
for i=21:40
beta(i)=2*pi-beta(41-i);
end
zz=zeros(1,40);
yy=25*sin(beta);
for i=1:40
x1=[xi(i),xi(i)];
y1=[yi(i),yy(i)];
z1=[-zi(i),-zz(i)];
plot3(x1,y1,z1,'color',[0.6297,0.3070,0.0633],'LineWidth',3)%咖啡色
hold on;
end
xlabel('x')
ylabel('y')
t=0:pi/20:2*pi;
X=25*cos(t);Y=25*sin(t);
plot(X,Y,'color',[0.6297,0.3070,0.0633],'LineWidth',5)
area(X,Y,'FaceColor',[0.6297,0.3070,0.0633]);
shg;
axis off
axis equal
hold off
pause(0.01)
f =
getframe(gcf);
imind =
frame2im(f);
[imind,cm] =
rgb2ind(imind,256);
if ii ==
0
imwrite(imind,cm,filename,'gif',
'Loopcount',inf,'DelayTime',0.2);
else
imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.2);
end
end
加载中,请稍候......