主要内容

覆盖模拟和实际飞行数据

这个例子展示了如何可视化模拟与实际飞行轨迹与动画对象(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负载fltdata

使用自定义飞行试验数据,第二身体这段代码集“TimeSeriesReadFcn”。自定义读函数位于:matlabroot /工具箱/航空/ astdemos / 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 ();

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

设置新的“PositionFcn”

h.Camera。PositionFcn = @staticCameraPosition;

动画与新运行“PositionFcn”

h.play ();

移动身体

这段代码说明了如何把尸体搬到起始位置(基于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 >