MATLAB旋转动图的绘制
文章目录
利用matlab实现三维旋转动图的绘制。
1、动图效果
2、matlab代码
close all
clear
clc
f=@(x,y,z)(x.^2+ (9./4).*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3;
[x,y,z]=meshgrid(linspace(-3,3));
val=f(x,y,z);
[p,v]=isosurface(x,y,z,val,0);
patch('faces',p,'vertices',v,'facevertexcdata',jet(size(v,1)),'facecolor','w','edgecolor','flat');
view(3);grid on;axis equal;
% f=@(x,y,z)(x.^2+ (9./4).*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3;
% [x,y,z]=meshgrid(linspace(-1.5,1.5));
% val=f(x,y,z);
% isosurface(x,y,z,val,0);
% axis equal;view(3);colormap([1 0.2 0.2])
%
spinningGIF('心形图1.gif');
% el=-45; %设置仰角为30度。
% for az=0:1:1080 %让方位角从0变到360,绕z轴一周
% view(az,el);
% drawnow;
% end
% az= 345; %设置方位角为0
% for el=0:1:360*1000 %仰角从0变到360
% view(az,el);
% drawnow;
% end
% spinningGIF(fname): makes a spinning GIF of the current plot and saves it
% Usage: make your 3D plot (using plot3(...) or scatter3(...) etc.) and
% then call SpinningGIF with the file name that you want
function spinningGIF(fname)
% axis off
% view(0,10)
center = get(gca, 'CameraTarget');
pos = get(gca, 'CameraPosition');
radius = norm(center(1:2) - pos(1:2));
angles = 0.5*pi:0.02*pi:1.5*pi;
for ii=1:length(angles)
angle = angles(ii);
set(gca, 'CameraPosition', [center(1) + radius * cos(angle),...
center(2) + radius * sin(angle),...
pos(3)]);
drawnow;
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if ii == 1
imwrite(imind,cm,fname,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,fname,'gif','WriteMode','append','DelayTime', 0.25);
end
end
end
t = 0:0.5:10; % 设置间隔
filename = 'test.gif'; % 打开或者创建一个gif文件
for i = 1:length(t)
% 动画效果
c = (1+0.3*cos(2*t(i)));
th=0: pi/50: pi;
phi=0: pi/50:2* pi;
[Th, Phi]=meshgrid(th, phi);
X=0.9* abs(Th).* sin(Th).* cos(Phi)*c;
Y=abs(Th).* sin(Th).* sin(Phi)*c;
Z=abs(Th).* cos(Th)*c;
surf(X,Y,Z)
axis equal
axis([-3 3 -3 3 -4 1]);
shading interp
colormap([1 0 0])
light('Position',[2 1 2])
% 写入gif过程
CurrFrame = getframe; % 获取像素,否则无法显示动画
im = frame2im(CurrFrame); %
[A,map] = rgb2ind(im,256); % 将RGB图像转换为索引图像
if i == 1
imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.1); % DelayTime表示写入的时间间隔
else
imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.1);
end
end