覆盖模拟和实际飞行数据
这个例子展示了如何可视化模拟与实际飞行轨迹与动画对象(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”
。这段代码使用updateBodies
和updateCamera
。
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 >