之前做了个matlab制作gif的视频,现在把代码写一下,便于大家复制。
大概就是这种效果:
二维正态函数
生成gif图部分:
%By HDTT%
f_num=1;%帧数索引
%画图部分%
for rho=0:0.02:0.9%选取的动态参数
normal_2d(0,0,rho);%自定义画图函数。要包含能画出图的函数%
%加标注%
xlabel x;ylabel y;zlabel z;
title([num2str((rho))]);
F=getframe(gcf);%截取帧
I=frame2im(F);%从单个影片帧 F 返回真彩色 (RGB) 图像。
[I,map]=rgb2ind(I,256);%使用具有256种量化颜色的最小方差量化法并加入抖动
%将 RGB 图像转换为索引图像I,关联颜色图为map。
if f_num == 1%如果不存在该图片,则创建
imwrite(I,map,'normal2d.gif','gif', 'Loopcount',inf,'DelayTime',0.1);
else%如果已经存在该图片,则添加
imwrite(I,map,'normal2d.gif','gif','WriteMode','append','DelayTime',0.1);
end
f_num=f_num+1;%帧数索引+1
end
内置的二维正态函数部分:
function [ p ] = normal_2d( mu_x,mu_y, rho )
close all;
mu=[mu_x,mu_y];% 均值向量
Sigma=[1 rho;rho 1];% 协方差矩阵
[X,Y]=meshgrid(-3:0.1:3,-3:0.1:3);%在XOY面上,产生网格数据
p=mvnpdf([X(:) Y(:)],mu,Sigma);%求取联合概率密度,相当于Z轴
p=reshape(p,size(X));%将Z值对应到相应的坐标上
figure
set(gcf,'Position',get(gcf,'Position').*[1 1 1.3 1])
subplot(2,3,[1 2 4 5])
surf(X,Y,p),axis tight,title('二维正态分布图')
zlim([0 0.4])
subplot(2,3,3)
surf(X,Y,p),view(2),axis tight,title('在XOY面上的投影')
subplot(2,3,6)
surf(X,Y,p),view([0 0]),axis tight,title('在XOZ面上的投影')
最后再附上生成视频的代码:
以及一些画图的小trick:
你知道怎么把这三张图像下图一样排布吗?