Симулированные и фактические полетные данные Используя объекты Aero.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. Двигайте телом к стартовой позиции, которая основана на данных временных рядов. Используйте Aero.Animation object updateBodies метод.

    h.updateBodies(t);
  3. Обновите положение камеры с помощью пользовательского PositionFcn функциональный набор в предыдущем разделе. Используйте Aero.Animation object 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. Измените свойства исправления тела. Используйте Аэро. Тело 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. Измените свойства исправления тела. Используйте Аэро. Тело 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

Смотрите также

| | |