首页/文章/ 详情

空间粒子运动图美化

2年前浏览3365

image.png

 过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,qq:927550334

QQ图片20210424105303.png

过冷水在往期文章中曾经给出了三维空间的粒子运动图。

lxx.gif

 可以很明显的看出来,用Matlab绘制出来的图也太不美观了,一直思索如何让Matlab绘制的三维图稍微好看一点,最终还是找到了图像美化命令,本期过冷水就和大家分享如何让你的图像好看起来。

未标题-1.jpg

先来看一下之前绘图命令

clear
tic
height=11.1087999344000004;width=11.1087999344000004;long=11.1087999344000004;
N=52;
load('data.mat')
for i=1:length(a)/N
   b= a(1 (N*(i-1)):N*i,:);
   Centers{i,1}=b;
end
gg = 1;
figure1 =figure('Position',[395 86 894  700],'Name','Mg原子三维空间运动轨迹','NumberTitle','off','Color','w','Menubar','figure','WindowState','maximized');
axes1 = axes('Parent',figure1);
view(axes1,[-37.5 30]);
for k=1:length(Centers)
    centers=Centers{k,1};
    fill3([0 14 14 0],[0 0 14 14],[0 0 0 0],[0 1 1],'Parent',axes1);
    hold(axes1,'on');
    fill3([0 14 14 0],[14 14 14 14],[0 0 14 14],[0 0 1],'Parent',axes1);
    fill3([14 14 14 14],[0 0 14 14],[0 14 14 0],[1 0 0],'Parent',axes1);
    plot3(centers(:,1),centers(:,2),centers(:,3),'Parent',axes1,'MarkerFaceColor',[0 1 1],'MarkerEdgeColor',[0 0.447058826684952 0.74117648601532],'MarkerSize',8,'Marker','o','LineStyle','none');
    hold(axes1,'off');
    str1=['01';'02';'03';'04';'05';'06';'07';'08';'09';'10';'11';'12';'13';'14';'15';'16';'17';'18';'19';'20';'21';'22';'23';'24';'25';'26';'27';'28';'29';'30';'31';'32';'33';'34';'35';'36';'37';'38';'39';'40';'41';'42';'43';'44';'45';'46';'47';'48';'49';'50';'51';'52'];
    text(axes1,centers(:,1),centers(:,2),centers(:,3),str1,'FontSize',14,'fontname','楷体','Color','red');
    fmat(:,k)=getframe;           %拷贝祯到矩阵fmat中
    im = frame2im(getframe);
    [I,map] = rgb2ind(im,256);
    if gg == 1
        imwrite(I,map,'lxx.gif','GIF', 'Loopcount',inf,'DelayTime',0.05);
        gg = gg   1;
    else
        imwrite(I,map,'lxx.gif','WriteMode','append','DelayTime',0.05);
    end
end

该绘图命令没有太特殊的地方,就是简单的提取数据,使用plot3在空间中绘制一系列点,这是最简单的方式,过冷水在Matlab光源材质设置技巧一文中给出了这样的一张图

20210726221935-image.png

这就是光源设置技巧,同时也给予了图像修改思路。

1绘制粒子点可以改为绘制球体,因为球体可以设置属性,进行美观设置;

2 之前粒子用来表示三维空间的办法是以平面填充做背景,其实过冷水本身想要的效果时小球在盒子里做运动的图像,当时不知道怎么操作,其实就是绘制一个盒子然后进行透明度设置就可以了,并不是十分复杂。

3 对球体大小和盒子的大小进行合理设置就可以得到一张美观的空间中小球在盒子中运动的图像了。

clear
tic
height=11.1087999344000004;width=11.1087999344000004;long=11.1087999344000004;
N=52;
vert = [0 0 0;0 200 0;200 200 0;200 0 0;0 0 200;...
           0 200 200;200 200 200;200 0 200];
fac = [1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
[x0,y0,z0] = sphere;
load('data.mat')
for i=1:length(a)/N
   b= a(1 (N*(i-1)):N*i,:);
   Centers{i,1}=b;
end
gg = 1;

figure1 = figure;
axes1 = axes('Parent',figure1);
set(axes1,'Color','none');
axis off
for k=1:length(Centers)
    centers=Centers{k,1};
    fill3([0 0 0 0],[0 0 0 0],[0 0 0 0],[0 0 0],'Parent',axes1);
    axis off
    xlim(axes1,[0 11]);ylim(axes1,[0 11]);zlim(axes1,[0 11]);
    patch('Parent',axes1,'FaceLighting','phong','FaceAlpha',0.25,'Vertices',vert*0.05,'Faces',fac,'FaceColor',[0 1 0]);
    hold(axes1,'on');
    for i=1:52
        x=centers(i,1) 0.25*x0;y = centers(i,2)   0.25*y0; z =centers(i,3)   0.25*z0;
        surf(x,y,z,'Parent',axes1,'linestyle','none','FaceColor','r','EdgeColor','none')
    end
    light('Parent',axes1,'Position',[0.87002629614908 -0.876158217991139 0.703884722521496]);
    view(axes1,[-37.5 30]);
    hold(axes1,'off');
    set(axes1,'DataAspectRatio',[1 1 1]);
    fmat(:,k)=getframe;           %拷贝祯到矩阵fmat中
    im = frame2im(getframe);
    [I,map] = rgb2ind(im,256);
    if gg == 1
        imwrite(I,map,'M.gif','GIF', 'Loopcount',inf,'DelayTime',0.05);
        gg = gg   1;
    else
        imwrite(I,map,'M.gif','WriteMode','append','DelayTime',0.05);
    end
end

最终得到的图像如下图所示,有点美中不足的地方是图片的配景不能够设置成为透明,这样比如把其导入到图片ppt就会很难看,所以图片还行一点背景图片Ps技术,这超过过冷水专业范畴,有探索兴趣的读者可以自行摸索,本期过冷水主要目的就是分享一段绘制好看的三维空间粒子运动的程序。

M.gif

图片

        过冷水发表于仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。

精品回顾

matlab绘制农夫过河动态图

分子动力学的原子空间运动轨迹演示编程

过冷水带你用matlab制作演示动画

python批量移动文件&重命名代码分享

过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享

image.png

附件

50积分粒子三维空间运动图.rar
MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-10-08
最近编辑:2年前
过冷水
博士 | 讲师 讨论号:927550334
获赞 356粉丝 176文章 109课程 11
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈