绘制动态矢量场

二维:quiver,并保存视频文件

%%
clc; clear; close all;

% 创建网格
[x, y] = meshgrid(-5:1:5, -5:1:5);

% 创建初始矢量场
u = -y;
v = x;

% 打开图形窗口并绘制初始矢量场
ax = gca;
grid on;
box off
hold on
ax.XLim = [-6, 6];
ax.YLim = [-6, 6];
ax.LineWidth = 1;
ax.XMinorTick = 'on';
ax.YMinorTick = 'on';
ax.GridLineStyle = ':';
ax.FontSize = 14;
ax.FontName = 'Times New Roman';

h = quiver(x, y, u, v,'Color', 'r','LineWidth',1.5);

title('Rotating Vector Field');

% 创建MP4视频对象
videoObj = VideoWriter('vector_field.mp4', 'MPEG-4');
open(videoObj);

% 捕获初始帧并初始化GIF
frame = getframe(gcf);
im = frame2im(frame);
[A, map] = rgb2ind(im, 256);
imwrite(A, map, 'vector_field.gif', 'LoopCount', inf, 'DelayTime', 0.1);

% 循环绘制旋转的矢量场
for theta = 0:pi/20:3*pi
    % 旋转矩阵
    R = [cos(theta), -sin(theta); sin(theta), cos(theta)];
    uv = R * [u(:)'; v(:)'];
    
    % 更新矢量场
    h.UData = reshape(uv(1,:), size(u));
    h.VData = reshape(uv(2,:), size(v));
    drawnow;
    
    % 捕获当前帧并追加到GIF
    frame = getframe(gcf);
    im = frame2im(frame);
    A = rgb2ind(im, map);
    imwrite(A, map, 'vector_field.gif', 'WriteMode', 'append', 'DelayTime', 0.1);

    % 将帧写入MP4视频
    writeVideo(videoObj, frame);
end

% 关闭MP4视频文件
close(videoObj);

二维动态矢量场

%% 绘制动态矢量场
clc;          % 清除命令窗口
clear;        % 清除工作空间中的所有变量
close all;    % 关闭所有图形窗口

% 创建一个新的图形窗口
figure;

% 初始化gif
gifFileName = 'quiver3_animation.gif';

% 定义一个网格
[x, y, z] = meshgrid(-5:5, -5:5, -5:5);

% 定义一个用于循环的角度变量
angle = 0;

% 循环10次创建动态效果
for frame_num = 1:50
    % 计算3D向量场的分量
    u = sin(angle + x);
    v = cos(angle + y);
    w = sin(angle + z);

    % 使用quiver3绘制3D箭头图
    quiver3(x, y, z, u, v, w, 'LineWidth', 1, 'Color', 'blue');
    xlim([-6, 6]); ylim([-6, 6]); zlim([-6, 6]); % 设置轴限制
    view(3); % 设置3D视图
    drawnow; % 立即更新图形窗口

    % 从当前图形窗口捕获帧
    frame = getframe; 

    % 捕获当前帧并保存为GIF
    im = frame2im(frame);
    [A,map] = rgb2ind(im,256); 
    if frame_num == 1 
        imwrite(A,map,gifFileName,'gif','LoopCount',Inf,'DelayTime',0.1);
    else 
        imwrite(A,map,gifFileName,'gif','WriteMode','append','DelayTime',0.1);
    end

    % 更新角度变量,以便在下一帧中旋转向量场
    angle = angle + pi/10;
    clf; % 清除当前图形
end

close; % 关闭图形窗口

三维动态矢量场

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Matlab中绘制矢量图,你可以使用quiver函数。这个函数可以根据给定的坐标和矢量绘制箭头,表示矢量的方向和大小。 首先,你需要定义要绘制的坐标和矢量。你可以使用meshgrid函数创建网格坐标,并计算出每个坐标点上的矢量值。例如,以下代码创建了一个网格坐标和一个与之对应的梯度矢量: [X,Y] = meshgrid(-2:.2:2); Z = X.*exp(-X.^2 - Y.^2); [DX,DY] = gradient(Z,.2,.2); 然后,你可以使用contour函数绘制函数的等势线,以显示函数的曲面形状: figure contour(X,Y,Z) 接下来,你可以使用quiver函数绘制矢量图。quiver函数接受四个参数,分别是x坐标,y坐标,x方向上的矢量分量,y方向上的矢量分量。例如,以下代码绘制了梯度矢量图: hold on quiver(X,Y,DX,DY) hold off 最后,你可以使用hold on和hold off来在同一个图形窗口中同时显示等势线和矢量图。 综上所述,要在Matlab中绘制矢量图,你可以先使用meshgrid函数创建坐标和计算矢量,然后使用contour函数绘制等势线,最后使用quiver函数绘制矢量图。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【MATLAB】绘制矢量图](https://blog.csdn.net/qq_44960956/article/details/107519225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [MATLAB画矢量箭头图(含MATLAB代码)](https://blog.csdn.net/weixin_46204734/article/details/125542796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值