主要内容

使用Aero.Animation对象的模拟和实际飞行数据

创建和配置动画对象

这一系列命令创建一个动画对象并配置该对象。

  1. 创建一个动画对象。

    h = aero.animation;
  2. 配置动画对象以设置每秒的帧数(每秒帧数)的财产。这个配置控制帧在图形窗口中显示的速率。

    h.FramesPerSecond = 10;
  3. 配置动画对象以设置动画数据的秒数/秒时间缩放(时间锻造)的财产。

    h.TimeScaling = 5;

    组合每秒帧数时间锻造性质决定了仿真的时间步长。这些设置导致大约0.5秒的时间步长。

  4. 创建并加载动画对象的主体。这个例子使用这些身体工作和显示模拟和实际的飞行轨迹。第一个物体是橙色的;它代表模拟数据。第二个身体是蓝色的;它代表了实际的飞行数据。

    IDX1 = H.CreateBody('pa24-250_orange.ac','ac3d');IDX2 = H.CreateBody('pa24-250_blue.ac','ac3d');

    两个机构都是AC3D格式文件。AC3D是动画对象支持的几种文件格式之一。金宝appFlightgear使用相同的文件格式。动画对象在AC3D格式的主体中读取,并将其存储为动画对象中的几何对象中的修补程序。

装载记录的飞行轨迹数据

该系列命令加载记录的飞行轨迹数据,这些数据包含在文件中matlabroot\工具箱\ aero \ astdemos文件夹。

  • simdata- 包含模拟飞行轨迹数据,该数据设置为6dof阵列。

  • fltdata- 包含以自定义格式设置的实际飞行轨迹数据。要访问此自定义格式数据,该示例必须设置正文对象TimeSeriesSourceType参数到自定义然后指定自定义读取功能。

  1. 加载飞行轨迹数据。

    加载simdata加载fltdata
  2. 设置两个体的时间序列数据。

    h.Bodies{1}。TimeSeriesSource = simdata;h.Bodies{2}。TimeSeriesSource = fltdata;
  3. 确定第二具尸体的时间序列是自定义的。

    h.Bodies{2}。TimeSeriesSourceType =“定制”;
  4. 指定自定义读取功能以访问数据fltdata第二具尸体。中的自定义读函数matlabroot\ toolbox \ aero \ astdemos \ customreadbodytsdata.m

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

在图形窗口中显示身体几何形状

这个命令为动画对象创建一个图形对象。

H.Show();

记录动画文件

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

h.VideoRecord = '在';h.VideoQuality = 50;h.VideoCompression = 'Motion JPEG AVI';

在您希望保存动画序列的任何时刻启用动画录制。

笔记

在选择视频压缩类型时,请记住,您需要相应的查看器软件。例如,如果您创建AVI格式,您需要一个查看器,例如Windows Media®球员查看文件。

按照描述播放动画后使用动画对象播放飞行轨迹astMotion_JPEG包含回放的记录。

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

此命令播放持续时间序列数据的动画主体。此播放显示了模拟和实际飞行数据之间的差异。

h.play ();

如果你使用视频存储录制的属性,请参阅查看已录制的动画文件有关如何查看文件的说明。

查看已录制的动画文件

如果您没有动画文件要查看,请参阅记录动画文件

  1. 打开包含要查看的动画文件的文件夹。

  2. 使用您选择的应用程序查看动画文件。

    如果您的动画文件尚未运行,请从应用程序中启动它。

  3. 为了防止其他H.Play.命令从覆盖动画文件的内容,禁用录制后,您满意的内容。

    h.videorecord ='OFF';

操纵摄像机

此命令系列显示如何在两个体上操纵相机并重新显示动画。这positionfcn.相机对象的属性控制相对于动画中的机构的相机位置。在使用动画对象播放飞行轨迹,相机对象使用默认值positionfcn.财产。在本命令系列中,示例引用了自定义positionfcn.使用基于主体位置的静态位置的功能。没有动态涉及。

笔记

习俗positionfcn.函数位于matlabroot\工具箱\ aero \ astdemos文件夹。

  1. 设置相机positionfcn.到自定义函数staticCameraPosition

    H.Camera.PositionFCN = @StaticCameraposition;
  2. 再次运行动画。

    h.play ();

移动和重新定位身体

这一系列命令演示了如何移动和重新定位物体。

  1. 设置开始时间为0。

    t = 0;
  2. 将身体移动到基于时间序列数据的起始位置。使用aero.animation对象updateBodies方法。

    h.updateBodies (t);
  3. 使用自定义更新相机位置positionfcn.函数集。使用aero.animation对象updatecamera.方法。

    h.updateCamera (t);
  4. 重新定位身体,首先得到身体的当前位置,然后分离身体。

    1. 从两个物体的物体获得当前的身体位置和旋转。

      pos1 = h.Bodies {1} .Position;rot1 = h.Bodies{1}然后;pos2 = h.Bodies {2} .Position;rot2 = h.Bodies{2}然后;
    2. 通过移动身体到新的位置来分离和重新定位身体。

      H.MoveBody(1,POS1 + [0 0 -3],ROT1);H.MoveBody(2,POS1 + [0 0 0],ROT2);

在第一身体中创建一个透明度

这一系列命令说明了如何创建和附加到身体的透明度。动画对象将身体几何图形存储为补丁。此示例操纵这些修补程序的透明度属性(参见块的属性).

笔记

透明度可能会降低使用软件OpenGL的平台上的动画速度®呈现(见opengl).

  1. 改变身体补丁属性。使用航空。身体PatchHandles属性获取第一个主体的补丁句柄。

    PatchHandles2 = H.Bodies {1} .PatchHandles;

  2. 设置你想要的透明度的面和边的alpha值。

    desiredFaceTransparency = 3;desiredEdgeTransparency = 1;
  3. 获取当前面部和边缘alpha数据,将所有值更改为您想要的alpha值。在该图中,第一主体现在具有透明度。

    对于k = 1:大小(patchHandles2,1)tempfacealpha = get(patchHandles2(k),'facevertexalphadata');tempedgealpha = get(patchhandles2(k),'edgealpha');set(patchHandles2(k),...'facevertexalphadata',Repmat(LefenceFaceTransparency,Size(Tempfacealpha));set(patchHandles2(k),...'Edgealpha',Repmat(LoishedGetRansparency,Size(Tempedgealpha));结尾

改变第二身体的颜色

这一系列命令演示了如何更改主体的颜色。动画对象将身体几何图形存储为补丁。这个例子操作FaceVertexColorData这些补丁的财产。

  1. 改变身体补丁属性。使用航空。身体PatchHandles属性获取第一个主体的补丁句柄。

    patchHandles3 = h.Bodies {2} .PatchHandles;

  2. 设置补丁颜色为红色。

    desiredColor = [1 0 0];
  3. 获取当前的面部颜色和数据,并将新的补丁颜色(红色)传播到面部。

    • 如果条件可防止Windows彩色。

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

    • 代码只改变索引patchHandles3与身体几何数据中的非窗口对应。

      笔记

      如果你无法访问姓名属性要确定车辆的部件到颜色,您必须使用替代方法来选择性地将车辆彩色。

    for k = 1:size(patchHandles3,1) tempFaceColor = get(patchHandles3(k),'FaceVertexCData');tempName = h.Bodies {2} .Geometry.FaceVertexColorData (k) . name;如果isempty (strfind (tempName,挡风玻璃上的)& &……isempty (strfind (tempName前窗))& &……isempty (strfind (tempName车窗))集(patchHandles3 (k),…FaceVertexCData, repmat (desiredColor[大小(tempFaceColor, 1), 1]));结束结束

关闭第二个身体的着陆齿轮

这个命令系列演示了如何通过关闭与起落架相关的所有车辆部件的可见性来关闭第二机体上的起落架。

笔记

指数进入patchHandles3向量由姓名财产。如果你无法访问姓名属性来确定索引,则必须使用另一种方法来确定与几何部分对应的索引。

for k = [1:8,11:14,52:57] set(patchHandles3(k),'Visible','off') end

也可以看看

|||