Моделируемые и фактические полетные данные Используя аэро. Объекты Animation

Создание и конфигурирование объекта Animation

Этот ряд команд создает объект Animation и конфигурирует объект.

  1. Создайте объект Animation.

    h = Aero.Animation;
  2. Сконфигурируйте объект Animation, чтобы определить номер свойства (FramesPerSecond) кадров в секунду. Это управления конфигурацией уровень, на котором кадры отображены в окне рисунка.

    h.FramesPerSecond = 10;
  3. Сконфигурируйте объект Animation, чтобы установить секунды данных анимации в секунду время, масштабируя свойство (TimeScaling).

    h.TimeScaling = 5;

    Комбинация свойства FramesPerSecond и TimeScaling определяет временной шаг симуляции. Эти настройки приводят к временному шагу приблизительно 0,5 с.

  4. Создайте и загрузите тела для объекта Animation. Этот пример использует эти тела, чтобы работать с и отобразить моделируемые и фактические траектории рейса. Первое тело является оранжевым; это представляет моделируемые данные. Второе тело является синим; это представляет фактические полетные данные.

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

    Оба тела являются файлами формата AC3D. AC3D является одними из нескольких форматов файлов, которые поддерживают объекты Animation. FlightGear использует тот же формат файла. Объект Animation читает в телах в формате AC3D и хранит их как закрашенные фигуры в геометрическом объекте в объекте Animation.

Загрузка записанных данных для траекторий рейса

Этот ряд команд загружает записанные данные о траектории рейса, которые содержатся в файлах в папке matlabroot\toolbox\aero\astdemos.

  • simdata – Содержит моделируемые данные о траектории рейса, которые настраиваются как 6DoF массив.

  • fltdata – Содержит фактические данные о траектории рейса, которые настраиваются в пользовательском формате. Чтобы получить доступ к этим пользовательским данным о формате, пример должен установить параметр объекта TimeSeriesSourceType тела на Custom и затем задать пользовательскую функцию чтения.

  1. Загрузите данные о траектории рейса.

    load simdata
    load fltdata
  2. Установите данные временных рядов для этих двух тел.

    h.Bodies{1}.TimeSeriesSource = simdata;
    h.Bodies{2}.TimeSeriesSource = fltdata;
  3. Идентифицируйте временные ряды для второго тела как пользовательские.

    h.Bodies{2}.TimeSeriesSourceType = 'Custom';
  4. Задайте пользовательскую функцию чтения, чтобы получить доступ к данным в fltdata для второго тела. Пример обеспечивает пользовательскую функцию чтения в matlabroot\toolbox\aero\astdemos\CustomReadBodyTSData.m.

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

Отображение конфигураций тела в окне рисунка

Эта команда создает объект фигуры для объекта Animation.

h.show();

Запись файлов анимации

Позвольте записать воспроизведения траекторий рейса с помощью объекта Animation.

h.VideoRecord = 'on';
h.VideoQuality = 50;
h.VideoCompression = 'Motion JPEG AVI'
h.VideoFilename = 'astMotion_JPEG';

Включите запись анимации в любой точке, что вы хотите сохранить последовательность анимации.

Примечание

При выборе типа сжатия видео имейте в виду, что вам будет нужно соответствующее программное обеспечение средства просмотра. Например, если вы создаете формат AVI, вам нужно средство просмотра, такое как Плеер Windows Media®, чтобы просмотреть файл.

После того, как вы будете проигрывать анимацию, как описано в Воспроизведении Траекторий Рейса Используя Объект Animation, astMotion_JPEG содержит запись воспроизведения.

Воспроизведение траекторий рейса Используя объект Animation

Эта команда воспроизводит органы по анимации на время данных временных рядов. Это воспроизведение показывает различия между моделируемыми и фактическими полетными данными.

h.play();

Если вы использовали свойства Video сохранить запись, смотрите Просмотр Записанные Файлы анимации для описания того, как просмотреть файлы.

Просмотр записанных файлов анимации

Если у вас нет файла анимации, чтобы просмотреть, смотрите Файлы анимации Записи.

  1. Откройте папку, которая содержит файл анимации, который вы хотите просмотреть.

  2. Просмотрите файл анимации с приложением по вашему выбору.

    Если ваш файл анимации еще не запускается, запустите его теперь с приложения.

  3. Чтобы препятствовать тому, чтобы другие команды h.play перезаписали содержимое файла анимации, отключите запись после того, как вы будете удовлетворены содержимым.

    h.VideoRecord = 'off';

Управление камерой

Этот ряд команды показывает, как можно управлять камерой на этих двух телах и вновь отобразить анимацию. Свойство PositionFcn объекта камеры управляет положением камеры относительно тел в анимации. В Воспроизведении Траекторий Рейса Используя Объект Animation объект камеры использует значение по умолчанию для свойства PositionFcn. В этом ряду команды пример ссылается на пользовательскую функцию PositionFcn, которая использует статическое положение на основе положения тел. Никакие движущие силы не включены.

Примечание

Пользовательская функция PositionFcn расположена в папке matlabroot\toolbox\aero\astdemos.

  1. Установите камеру PositionFcn на пользовательский функциональный staticCameraPosition.

    h.Camera.PositionFcn = @staticCameraPosition;
  2. Запустите анимацию снова.

    h.play();

Перемещаясь и меняя местоположение тел

Этот ряд команд иллюстрирует, как переместить и изменить местоположение тел.

  1. Установите время начала на 0.

    t = 0;
  2. Двигайте телом к стартовой позиции, которая основана на данных временных рядов. Используйте Аэро. Объект Animation метод Aero.Animation.updateBodies.

    h.updateBodies(t);
  3. Обновите положение камеры с помощью пользовательского набора функции PositionFcn в предыдущем разделе. Используйте Аэро. Объект Animation метод Aero.Animation.updateCamera.

    h.updateCamera(t);
  4. Измените местоположение тел первым получением текущего положения тела, затем разделив тела.

    1. Получите текущие положения тела и вращения от объектов обоих тел.

      pos1 = h.Bodies{1}.Position;
      rot1 = h.Bodies{1}.Rotation;
      pos2 = h.Bodies{2}.Position;
      rot2 = h.Bodies{2}.Rotation;
    2. Разделите и измените местоположение тел путем перемещения их в новые положения.

      h.moveBody(1,pos1 + [0 0 -3],rot1);
      h.moveBody(2,pos1 + [0 0  0],rot2);

Создание прозрачности в первом теле

Этот ряд команд иллюстрирует, как создать и присоединить прозрачность к телу. Объект Animation хранит геометрию тела как закрашенные фигуры. Этот пример управляет свойствами прозрачности этих закрашенных фигур (см. Свойства исправления).

Примечание

Использование диапозитивов может уменьшить скорость анимации на платформах, которые используют программное обеспечение рендеринг OpenGL® (см. opengl).

  1. Измените свойства исправления тела. Используйте Аэро. Свойство Body PatchHandles получить указатели закрашенной фигуры для первого тела.

    patchHandles2 = h.Bodies{1}.PatchHandles;

  2. Боритесь и альфа-значения ребра, которые вы хотите для прозрачности.

    desiredFaceTransparency = .3;
    desiredEdgeTransparency = 1;
  3. Получите текущую поверхность и альфа-данные о ребре и измените все значения на альфа-значения, которые вы хотите. В фигуре первое тело теперь имеет прозрачность.

    for k = 1:size(patchHandles2,1)
        tempFaceAlpha = get(patchHandles2(k),'FaceVertexAlphaData');
        tempEdgeAlpha = get(patchHandles2(k),'EdgeAlpha');
    	   set(patchHandles2(k),...
            'FaceVertexAlphaData',repmat(desiredFaceTransparency,size(tempFaceAlpha)));
        set(patchHandles2(k),...
            'EdgeAlpha',repmat(desiredEdgeTransparency,size(tempEdgeAlpha)));
    end

Изменение цвета второго тела

Этот ряд команд иллюстрирует, как изменить цвет тела. Объект Animation хранит геометрию тела как закрашенные фигуры. Этот пример управляет свойством FaceVertexColorData этих закрашенных фигур.

  1. Измените свойства исправления тела. Используйте Аэро. Свойство Body PatchHandles получить указатели закрашенной фигуры для первого тела.

    patchHandles3 = h.Bodies{2}.PatchHandles;

  2. Установите цвет шаблона на красный.

    desiredColor = [1 0 0];
  3. Получите текущий цвет поверхности и данные и распространите новый цвет шаблона, красный, к поверхности.

    • Условие if препятствует тому, чтобы окна были окрашены.

    • Свойство name хранится в данных о геометрии тела (h.Bodies{2}.Geometry.FaceVertexColorData(k).name).

    • Код изменяет только индексы в patchHandles3 с дубликатами неокна в данных о геометрии тела.

      Примечание

      Если вы не можете получить доступ к свойству name определить части автомобиля, чтобы окрасить, необходимо использовать альтернативный способ выборочно окрасить автомобиль.

    for k = 1:size(patchHandles3,1)
        tempFaceColor = get(patchHandles3(k),'FaceVertexCData');
        tempName = h.Bodies{2}.Geometry.FaceVertexColorData(k).name;
        if isempty(strfind(tempName,'Windshield')) &&...
           isempty(strfind(tempName,'front-windows')) &&...
           isempty(strfind(tempName,'rear-windows'))
        set(patchHandles3(k),...
            'FaceVertexCData',repmat(desiredColor,[size(tempFaceColor,1),1]));
        end
    end

Выключение посадочного устройства второго тела

Этот ряд команды иллюстрирует, как выключить посадочное устройство на втором теле путем выключения видимости всех частей автомобиля, сопоставленных с посадочным устройством.

Примечание

Индексы в вектор patchHandles3 определяются из свойства name. Если вы не можете получить доступ к свойству name определить индексы, необходимо использовать альтернативный способ определить индексы, которые соответствуют частям геометрии.

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