主要内容

传热可视化与2D动画

本例说明了使用Simulink®3D Animation™MATLAB®金宝app接口创建2D脱机动画文件。

离线动画记录机制是通过设置适当的vrworld和vrfigure对象属性来控制的。推荐的方法是使用Simulink 3D动画查看器GUI来记录动画。金宝app直接控制录音也是可能的。

在本例中,我们使用VRHEAT示例中使用的热量分布数据来创建一个动画文件,该文件可以轻松地分发并由其他人独立查看。对于这种由VRML IndexedFaceSet表示的静态几何图形是基于某些物理现象的模拟进行着色的可视化,它适合创建2D - AVI动画文件。

有几种方法可以用来记录动画。在本例中,我们使用预定的录音。当计划录制活动时,一个时间框架将记录到动画文件中,并设置虚拟世界的时间属性。当您将场景时间设置在结束时或在预定义的记录间隔之外时,记录就完成了。

当使用Simulink 3D动金宝app画MATLAB界面时,由用户将场景时间设置为所需的时间,通常从模拟现象的角度等距。与记录与Simulink®模型相关联的虚拟世界的动画相比,这是最重要的区别,其中场景时间直接对应于Simulink时间。金宝app

请注意,场景时间可以代表任何独立的量,沿着它你想要动画计算的解决方案。

加载预计算数据

负载(“vrheat.mat”);

为VRML重塑对象

l型块的几何图形存储在'lblock'结构中。为了可视化的目的,块被细分为三角形面。Surface facet顶点坐标存储在'lblock.mesh中。P '域和三角形边由顶点数组的索引来描述。

Vert = lblock.mesh.p';

VRML中的一组facet被定义为一个顶点索引向量,其中facet以-1分隔,因此我们需要对顶点数组进行适当的转换。VRML中的索引是从零开始的,因此从最初存储在基于1的索引数组'lblock.mesh.e'中的所有索引值中减去1。

facet = lblock.mesh.e(1:3,:)-1;facet (4,:) = -1;F = facet;F = F (:);Facets = Facets ';

准备颜色图

现在我们准备一个颜色图来表示不同的温度等级。MATLAB内置的“jet”色图就是为这些目的而设计的。

Cmap = jet(192);

应用色彩图

“lblock.sol。u' field contains a matrix describing the temperatures of vertices as time passes. We have 41 precalculated phases (1 is initial) for 262 vertices. We need to scale the temperature values so that they map into the colormap.

U = lblock.sol.u;ucolor = (u-repmat (min (u)、大小(u, 1), 1))。*(大小(提出,1)1);Urange = max(u) - min(u);Urange (Urange == 0) = 1;Ucolor = round(uccolor ./repmat(urange,size(u,1),1));

我们将计算第一个动画帧,这样我们就有了一些开始。

uslice = ucolor (: 1);colind = 0(大小(方面));colind (:, 1:3) = uslice(: 1:3) + 1(方面);colind (:, 4) = 1;Ci =冷;Ci = Ci (:);

数据已经准备好,我们可以加载世界。

World = vrworld(“vrheat.x3d”);打开(世界);

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

我们首先设置颜色,颜色索引,顶点,然后顶点索引。顺序不是强制性的,但通常更好,因为这样我们可以确保没有临时状态,我们有更多的顶点比颜色,或更多的索引比值,这将导致一些顶点有未定义的颜色或一些索引指向不存在的(尚未)值。

world.IFS_Colormap。Color = cmap;world.IFS.colorIndex = ci;world.IFS_Coords。点=垂直;world.IFS.coordIndex = f;

使用VRML文本对象

文本注释也可以设置为合理的内容。

world.TEXT.string = {'时间= 0'};

开放虚拟现实查看器

FIG = vrfigure(world);

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

我们有虚拟世界的手柄和保存在变量“world”和“fig”中的内部查看器图形对象。现在我们设置与录制相关的虚拟世界和图形属性。我们想在文件vrheat_anim中激活预定的2D录音。场景时间间隔(0,4)内的Avi,对应于预先计算的热量分布时间。

集(世界,“RecordInterval”, [0 4]);集(图,“Record2DFileName”“vrheat_anim.avi”);集(图,“Record2D”“上”);集(图,“Record2DCompressQuality”, 100);集(图,“NavPanel”“没有”);vrdrawnow;设置try-catch保护的'RecordMode'属性作为触发%的记录机制,在演示版本中不允许。试一试集(世界,“语言”“计划”);set_OK = true;ME set_OK = false;disp ('设置'RecordMode'属性失败');disp (“最可能的原因是您正在运行的是Simulink 3D动画演示版本”金宝app);disp (不允许动画录制。动画文件将不会被创建。);结束

动画场景

现在我们可以开始动画,你可以在查看器中观看它。请组合MATLAB命令窗口和Simulink 3D动画查看器图形,使它们都完全可见,并将图形大小调整为所需的金宝app2D动画文件的分辨率。使用VIDEOWRITER对象,2D动画的记录与您在查看器图中看到的完全一致。

当计划录制活动时,一个时间框架被记录到动画文件中,设置虚拟世界的“时间”属性。由用户将场景时间设置为所需的时间,通常从模拟现象的角度等距。请注意,场景时间可以代表任何独立的量,沿着它你想要动画计算的解决方案。

I = 1:大小(u,2)暂停(0.01);Uslice = uccolor (:,i);Colind =零(大小(切面));Colind (:,1:3) = uslice(facets(:,1:3)+1);Colind (:,4) = -1;ci = colind ';ci = ci (:);world.IFS.colorIndex = ci;world.TEXT.string = {sprintf(“时间= %g”lblock.sol.tlist(我))};集(世界,“时间”lblock.sol.tlist(我));vrdrawnow;结束

在工作目录中创建AVI文件

当动画停止时,文件vrheat_anim。Avi是在工作目录中创建的。现在我们可以关闭和删除虚拟世界了。

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

如果set_OK disp (文件vrheat_anim。Avi是在你的工作目录中创建的。);disp (你可以用AVI播放器播放这个文件);结束
vrheat_anim文件。Avi是在工作目录中创建的。您可以使用AVI播放器播放此文件。

在MATLAB工作区中保存虚拟世界对象

当你处理完一个VRWORLD对象后,有必要关闭并删除它。这是通过使用CLOSE和DELETE命令来完成的。

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

但是,我们在这里不做。相反,我们让世界保持开放,以便您可以进一步玩它。我们将只清除使用的全局变量。

清晰的ci厘米提出colindf方面lblocknhset_OK;清晰的uucolorurangeuslicev绿色