主要内容

用2D动画传热可视化

此示例说明了Simulink®3D动画™MATLAB®接口的使用来创建2万博1manbetxD离线动画文件。

通过设置适当的VRWORLD和VRFIGURE对象属性来控制离线动画录制机制。创新动画的推荐方式是使用Simulink 3D动画查看器GUI。万博1manbetx还可以直接控制录制。

在此示例中,我们使用VRHeat示例中使用的热分布数据来创建动画文件,该动画文件可以很容易地分布并独立地由其他人分发。对于这种可视化,如果VRML IndexedFaceSet表示的静态几何是基于某些物理现象的模拟,它适合创建2D - AVI动画文件。

您可以使用几种方法来记录动画。在这种情况下,我们使用计划的录制。当计划记录处于活动状态时,将时间帧记录到动画文件中,每个设置虚拟世界时间属性。当您在预定义的录制间隔的结束或外部设置场景时间时,录制完成。

当使用Simulink 3D动万博1manbetx画MATLAB接口时,用户可以将场景时间设置为所需的时间,通常是从模拟现象等距的角度来看。与录制与Simulink®模型相关联的虚拟世界的动画相比,这是最重要的差异,其中场景时间直接对应于Simulink时间。万博1manbetx

请注意,场景时间可以表示任何独立数量,您希望为计算的解决方案设置动画。

加载预先计算的数据

加载(“vrheat.mat”);

重塑VRML的对象

L形块的几何形状存储在“Lblock”结构中。为了可视化目的,块被细分为三角形面。曲面面顶点坐标存储在“Lblock.mesh.p”字段中,并且三角形边缘被索引描述为顶点阵列。

vert = lblock.mesh.p';

VRML中的一组方面被定义为顶点索引的单个向量,其中小平面由-1分隔,因此我们需要适当地转换顶点阵列。VRML中的索引是基于零的,所以从最初存储在基于1的索引数组'Lblock.mesh.e'中的所有索引值中扣除了1。

:面= lblock.mesh.e (1:3) 1;方面(4)= 1;f =方面;f = f (:);面=方面';

准备Colormap.

现在我们将准备代表各种温度水平的Colormap。MATLAB内置的'JET'COLORMAP专为这些目的而设计。

CMAP = JET(192);

应用ColorMap.

'lblock.sol.u'字段包含一个矩阵,其描述随时间通过的顶点的温度。我们有41个预生阶段(1是初始)262顶点。我们需要缩放温度值,使它们映射到Colormap中。

u = lblock.sol.u;UColor =(U-Repmat(min(u),大小(u,1),1))。*(尺寸(cmap,1)-1);Urange = Max(U) -  min(u);Urange(Urange == 0)= 1;ucolor = round(ucolor./repmat(Urange,size(u,1),1));

我们将计算第一个动画框架,以便我们有一些开始的东西。

uslice = ucolor(:,1);Colind = Zeros(尺寸(刻面));COLIND(:,1:3)= uLICE(刻面(:,1:3)+1);colind(:,4)=  -  1;ci = colind';ci = ci(:);

数据准备好了,所以我们可以加载世界。

世界= vrworld('vrheat.x3d');开放(世界);

现在我们要准备l型块。我们已经加载的VRML世界包含了一个基本的三次形式,我们可以通过设置它的“点”和“坐标”字段来重塑它,这两个字段表示顶点坐标和顶点数组的索引。我们还将通过设置'color'和'colorIndex'字段来设置颜色。

我们首先设置颜色,颜色指数,顶点,然后是顶点索引。该命令不是强制性的,但通常是更好的,因为这种方式我们确信没有比颜色更多的顶点,或者更多的索引,而不是值,这将导致一些顶点具有未定义的颜色或指数引用不列出的索引(又是值。

world.ifs_colormap.color = cmap;world.fs.colorIndex = CI;world.ifs_coords.point = Vert;world.fs.coordIndex = F;

使用VRML文本对象

文本评论也可以设置为熟悉的东西。

world.text.string = {'time = 0'};

打开虚拟现实查看器

无花果= vrfigure(世界);

使用MATLAB®接口录制2D离线动画

我们将句柄掌握到虚拟世界和中的内部查看器图对象,该对象保存在变量“世界”和“图”中。现在我们设置与录制相关的虚拟世界和图形属性。我们希望在与预计的热分配时间对应的场景时间间隔(0,4)期间将计划的2D录制到文件vrheat_anim.avi中。

套(世界,'RecordInterval',[0 4]);套(图,'Record2dfilename''vrheat_anim.avi');套(图,'唱片2d''在');套(图,'Record2DCruckSquality', 100);套(图,'navpanel''没有任何');Vrdrawnow;%设置“RecordMode”属性受到Try-Catch保护的属性,因为此触发器在演示版本中不允许的%录制机制。尝试套(世界,'RecordMode''计划');set_ok = true;抓住我set_ok = false;DISP('设置“RecordMode”属性失败。);DISP(“最可能的原因是您在Simulink 3D动画演示版中运行”万博1manbetx);DISP(“这并不允许动画录制。动画文件不会被创建。');结尾

动画场景

现在我们可以启动动画,你可以在观看者中观看它。请撰写MATLAB命令窗口和SIMULINK 3D动画查看器图形,以便它们都完全可见,并将图形大小调整为所产万博1manbetx生的2D动画文件的所需分辨率。使用VideoRiter对象在查看器图中将其录制为您在查看器图中录制2D动画。

当计划记录处于活动状态时,将时间框架记录到设置虚拟世界的“时间”属性的动画文件中。用户可以将场景时间设置为所需的时间,通常是从模拟现象等距离的角度来看。请注意,场景时间可以表示任何独立数量,您希望为计算的解决方案设置动画。

为了i = 1:尺寸(U,2)暂停(0.01);uslice = ucolor(:,i);Colind = Zeros(尺寸(刻面));COLIND(:,1:3)= uLICE(刻面(:,1:3)+1);colind(:,4)= -1;ci = colind';ci = ci(:);world.fs.colorIndex = CI;world.text.string = {sprintf('time =%g',lblock.sol.tlist(i))};套(世界,'时间',lblock.sol.tlist(i));Vrdrawnow;结尾

在工作目录中创建的avi文件

随着动画停止,文件vrheat_anim.avi是在工作目录中创建的。现在我们可以关闭并删除虚拟世界。

现在,在工作目录中创建了2D离线动画文件。如果您的系统有AVI播放器,则可以使用它来重放动画文件。

如果set_ok disp(“文件vrheat_anim.avi是在您的工作目录中创建的。”);DISP(“你可以使用AVI播放器播放此文件。);结尾
文件vrheat_anim.avi是在工作目录中创建的。您可以使用AVI播放器播放此文件。

保留MATLAB工作区中的虚拟世界对象

完成VRWorld对象后,必须关闭并删除它。这是通过使用关闭和删除命令完成的。

关闭(世界);删除(世界);

但是,我们不会在这里这样做。相反,我们离开世界开放,以便您可以进一步玩。我们只会清除使用过的全局变量。

清除ANS.CI.厘米CMAP.柯林F面部一世lblock.NH.set_ok.;清除ucolor.urangeUSLICE.V.vert.;