主要内容

覆盖模拟和实际飞行数据

此示例显示如何使用动画对象(Aero.animation)显示模拟与实际飞行轨迹,同时显示一些动画对象功能。在此示例中,您可以使用Aero.animation对象创建和配置动画对象,然后使用该对象创建,可视化和操作飞行轨迹的机构。

创建动画对象

的实例aero.animation.目的。

h = Aero.Animation;

设置动画对象属性

这个代码设置每秒的帧数。这控制帧在图形窗口中显示的速率。

H.Framespersecond = 10;

这段代码设置了动画数据的秒数。这个性质和'每秒帧数'性质决定了仿真的时间步长。本例中的设置导致大约0.5s的时间步长。这个方程是(1/FramesPerSecond)* timscaling以及一些额外的术语来处理亚秒精度。

H.timescaling = 5;

创建和装载体

这段代码使用创造者对于动画对象,h.这个例子将使用这些身体工作和显示模拟和实际的飞行轨迹。第一个主体是橙色的,代表模拟数据。第二具尸体是蓝色的,将代表实际的飞行数据。

idx1 = h.createBody (“pa24 - 250 _orange.ac”“Ac3d”);Idx2 = H.CreateBody('pa24-250_blue.ac'“Ac3d”);

装载记录的飞行轨迹数据

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

  • simdata文件包含记录的模拟数据。辛迪塔设置为6DoF数组,这是一种默认的数据格式。

  • FLTDATA文件包含实际的飞行测试数据。在这个例子中,fltdata.以自定义格式设置。该示例必须创建自定义读取功能并设置“TimeSeriesSourceType”参数'风俗'

加载Simdata和Fltdata文件:

负载辛迪塔负载fltdata.

为了使用自定义飞行测试数据,这段代码设置了第二个body'timeseriesreadfcn'.自定义读取功能位于此处:matlabroot /工具箱/航空/ astdemos / CustomReadBodyTSData.m

H.Bodies {2} .TimeseriesReadfcn = @CustomReadBodyTsData;

设置身体的时间序列数据。

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 ();

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

此代码使用方法以在时间序列数据持续期间动画主体。使用这种方法可以说明模拟数据和飞行数据之间的细微差别。

h.play ();

代码也可以使用自定义,简化“PositionFcn”这是基于体的位置(即,没有动态)的静止位置。简化“PositionFcn”位于这里:Matlabroot / Toolbox / Aero / 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(1,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;

设置所需的面部和边缘alpha值。

jousencedfacetransparency = .3;daplendedgetransparency = 1;

此代码获取当前面部和边缘alpha数据,并将所有值更改为所需的alpha值。在该图中,请注意,第一个身体现在具有透明度。

if (patchHandles2(k) = 1, tempFaceAlpha = get(patchHandles2(k)),'facevertexalphadata');tempEdgeAlpha =得到(patchHandles2 (k),“EdgeAlpha”);集(patchHandles2 (k),...'facevertexalphadata',repmat(uscedfacetransparency,size(tempfacealpha))));集(patchHandles2 (k),...“EdgeAlpha”repmat (desiredEdgeTransparency大小(tempEdgeAlpha)));结束

改变第二身体的颜色

这段代码演示了如何更改第二个主体的主体颜色。代码通过改变身体补丁属性来实现“PatchHandles”

patchHandles3 = H.Bodies {2} .patchHandles;

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

joordcolor = [1 0 0];

代码现在可以获得当前的面部颜色数据,并将所有值更改为所需的颜色值。注意守则的下列要点:

  • 如果条件会使窗户呈上色。

  • 名称属性存储在主体的几何数据中(H.Bodies {2} .geometry.facevertexColordata(k).name)。

  • 该代码仅更改索引patchHandles3.在车身几何数据中使用非窗口对应物。

name属性可能并不总是可用来确定车辆的各个部件。在这些情况下,您将需要使用另一种方法来选择着色。

k = 1:大小(PatchHandles3,1)TempfaceColor = Get(PatchHandles3(k),“FaceVertexCData”);tempName = h.Bodies {2} .Geometry.FaceVertexColorData (k) . name;如果〜包含(tempname,挡风玻璃的) & &...〜包含(tempname,'Front-Windows') & &...〜包含(tempname,“后窗”)设置(patchHandles3 (k),...“FaceVertexCData”,repmat(jainhingcolor,[size(tempfaceColor,1),1])));结束结束

关闭第二机身的起落架

以下代码关闭了第二个主体的起落架。为此,它会关闭与着陆齿轮相关的所有车辆部件的可见性。注意索引进入patchHandles3.向量是由几何数据中的name属性确定的。其他数据源可能没有此信息。在这些情况下,您需要知道哪些指标对应于几何体的特定部分。

= [1:8,11:14,52:57] set(patchHandles3(k),'可见的''离开'结束

关闭并删除动画对象

关闭和删除

H.Delete();
%#OK <* REPMAT>