MATLAB旋转动图的绘制

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
相关推荐
小年糕是糕手5 分钟前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
豐儀麟阁贵7 分钟前
8.2异常的抛出与捕捉
java·开发语言·python
权泽谦9 分钟前
PHP 版羊了个羊完整开发实战:逻辑解析 + 三消算法 + 全套接口(附源码)
开发语言·php
程序员西西13 分钟前
SpringBoot无感刷新Token实战指南
java·开发语言·前端·后端·计算机·程序员
Coding_Doggy26 分钟前
链盾shieldchiain | 团队功能、邀请成员、权限修改、移除成员、SpringSecurity、RBAC权限控制
java·开发语言·数据库
机器学习之心27 分钟前
SSA-SVMD麻雀算法优化逐次变分模态分解(15种不同的适应度)MATLAB代码
matlab·ssa-svmd·麻雀算法优化逐次变分模态分解
三维空间35 分钟前
在MATLAB中对基因表达数据进行数据预处理
matlab
f***24111 小时前
java学习进阶之路,如果从一个菜鸟进阶成大神
java·开发语言·学习
88号技师1 小时前
2025年9月一区SCI-孤行尺蠖觅食优化算法Solitary Inchworm Foraging-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
Yue丶越1 小时前
【Python】基础语法入门(四)
linux·开发语言·python