博主分享一下自己写的matlab折叠桌动态图代码,画的比较简陋,凑合着看吧
b站专栏没法显示动图啊
代码如下,我就不一一解释每条命令了。 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