主要内容

覆盖模拟和实际飞行数据

这个例子展示了如何可视化模拟与实际飞行轨迹与动画对象(Aero.Animation),显示出一些动画对象的功能。在本例中,您可以使用航空。动画对象创建和配置一个动画对象,然后使用该对象创建、可视化和操纵尸体的飞行轨迹。

创建动画对象

创建的一个实例Aero.Animation对象。

h = Aero.Animation;

设置动画对象属性

设置帧每秒的数量。这个控制帧的速度显示在图窗口。

h。FramesPerSecond = 10;

设置动画的秒数据每秒时间伸缩。这个属性,“FramesPerSecond”属性确定模拟的时间步长。设置在这个例子的结果在一个时间步的大约0.5秒。方程是(1 / FramesPerSecond) *时间表还有一些额外的条款来处理次秒级精度。

h。时间跨度= 5;

创建和加载机构

加载机构使用createBody动画的对象,h。这个示例使用这些机构来处理和显示模拟和实际飞行轨迹。第一个身体是橙色和代表模拟数据。第二个身体是蓝色,代表了实际飞行数据。

idx1 = h.createBody (“pa24 - 250 _orange.ac”,“Ac3d”);idx2 = h.createBody (“pa24 - 250 _blue.ac”,“Ac3d”);

负载为飞行轨迹记录数据

使用尸体从之前的代码,这个代码提供了飞行轨迹模拟和实际记录数据在以下文件:

  • simdata文件包含记录模拟数据。simdata建立了6自由度阵列,这是一个默认的数据格式。

  • fltdata文件包含实际飞行测试数据。在这个例子中,fltdata一个自定义格式的设置。必须创建一个自定义的例子阅读功能和设置“TimeSeriesSourceType”参数“自定义”

加载simdata和fltdata文件:

负载(“simdata.mat”,“simdata”)负载(“fltdata.mat”,“fltdata”)

使用自定义飞行试验数据,第二身体这段代码集“TimeSeriesReadFcn”。自定义读函数位于:matlabroot /工具箱/航空/动画/ CustomReadBodyTSData.m

h.Bodies {2}。TimeSeriesReadFcn = @CustomReadBodyTSData;

身体的timeseries数据集。

h.Bodies {1}。TimeSeriesSource = simdata;h.Bodies {2}。TimeSeriesSource = fltdata;h.Bodies {2}。TimeSeriesSourceType =“自定义”;

相机操作

这段代码演示了如何操纵两具尸体的镜头。

“PositionFcn”相机对象的属性控制相机的位置相对于身体的动画。默认的相机“PositionFcn”遵循一阶追逐汽车的道路。因此,它需要几步相机定位正确的平面位置。默认的“PositionFcn”坐落在这里:matlabroot /工具箱/航空/动画/ doFirstOrderChaseCameraDynamics.m

“PositionFcn”

h.Camera。PositionFcn = @doFirstOrderChaseCameraDynamics;

体几何图形显示在图

使用显示方法来创建动画图图形对象的对象。

h.show ();

使用动画对象播放飞行轨迹

使用方法来激活身体期间timeseries数据。使用这种方法说明了模拟和飞行数据之间存在着细微的差别。

h.play ();h.updateCamera (5);

等待

等待动画编辑对象属性之前完成。

h.wait ();

还可以使用一个自定义的代码,简化“PositionFcn”这是一个静态位置基于身体的位置(即。,没有动力)。简化“PositionFcn”坐落在这里:matlabroot /工具箱/航空/动画/ staticCameraPosition.m

设置新的“PositionFcn”

h.Camera。PositionFcn = @staticCameraPosition;

动画与新运行“PositionFcn”

h.play ();

等待

等待动画编辑对象属性之前完成。

h.wait ();

移动身体

把尸体搬到起始位置(基于timeseries数据)和更新相机的位置根据新的“PositionFcn”。这段代码使用updateBodiesupdateCamera

t = 0;h.updateBodies (t);h.updateCamera (t);

重新定位机构

重新定位的尸体,首先获取当前身体位置,然后将尸体。

让当前的身体从身体位置和旋转对象。

pos1 = h.Bodies {1} .Position;rot1 = h.Bodies{1}然后;pos2 = h.Bodies {2} .Position;rot2 = h.Bodies{2}然后;

单独的机构使用moveBody。这段代码分离,复位两具尸体。

h。moveBody (pos1 + [0 0 3], rot1);h。moveBody (2, pos1 + [0 0 0], rot2);

创建第一个身体的透明度

创建第一个身体的透明度。通过改变身体的代码补丁通过属性“PatchHandles”。(在MATLAB®补丁的更多信息,见介绍补丁对象部分在MATLAB文档。)

注意:在一些平台上利用OpenGL®软件渲染,透明度可能会导致降低动画速度。

看到opengl在MATLAB OpenGL文档了解更多信息。

创建一个透明,代码补丁处理身体第一。

patchHandles2 = h.Bodies {1} .PatchHandles;

设置所需的脸和边缘α值。

desiredFaceTransparency = 3;desiredEdgeTransparency = 1;

获取当前的脸和边缘α数据和变化值所需的α值。在图中,注意第一个身体现在有透明度。

k = 1:尺寸(patchHandles2, 1) tempFaceAlpha =得到(patchHandles2 (k),“FaceVertexAlphaData”);tempEdgeAlpha =得到(patchHandles2 (k),“EdgeAlpha”);集(patchHandles2 (k),“FaceVertexAlphaData”repmat (desiredFaceTransparency大小(tempFaceAlpha)));集(patchHandles2 (k),“EdgeAlpha”repmat (desiredEdgeTransparency大小(tempEdgeAlpha)));结束

改变颜色的第二个身体

第二身体的体色变化。通过改变身体的代码补丁通过属性“PatchHandles”

patchHandles3 = h.Bodies {2} .PatchHandles;

设置所需的补丁颜色(红色)。

desiredColor = (1 0 0);

代码现在可以获取当前面临数据和所有的值更改为所需的颜色值。在代码中请注意以下几点:

  • 如果条件使窗户的颜色。

  • 名称属性存储在身体的几何数据(h.Bodies {2} .Geometry.FaceVertexColorData (k) . name)

  • 代码只改变的指标patchHandles3在体内与non-window同行几何数据。

名称属性可能不总是可用来确定车辆的各个部分。在这些情况下,使用另一种方法来选择颜色。

k = 1:尺寸(patchHandles3, 1) tempFaceColor =得到(patchHandles3 (k),“FaceVertexCData”);tempName = h.Bodies {2} .Geometry.FaceVertexColorData (k) . name;如果~包含(tempName挡风玻璃的)& &~包含(tempName前窗的)& &~包含(tempName“后窗”)设置(patchHandles3 (k),“FaceVertexCData”repmat (desiredColor[大小(tempFaceColor, 1), 1]));结束结束

第二身体关掉起落架

关掉第二身体的起落架。为此,代码关闭所有车辆部件的可见性与起落架有关。注意指数进入patchHandles3向量确定名称属性的几何数据。其他数据源可能没有这个信息。在这些情况下,您将需要知道哪些指标对应于特定区域的几何。

十一14 k =[1:8, 52:57)组(patchHandles3 (k),“可见”,“关闭”)结束

关闭和删除动画对象

关闭和删除。

h.delete ();
% #好< * REPMAT >

另请参阅

||

相关的话题