Этот ряд команд создает объект Animation и конфигурирует объект.
Создайте объект Animation.
h = Aero.Animation;
Сконфигурируйте объект Animation, чтобы определить номер свойства (FramesPerSecond
) кадров в секунду. Это управления конфигурацией уровень, на котором кадры отображены в окне рисунка.
h.FramesPerSecond = 10;
Сконфигурируйте объект Animation, чтобы установить секунды данных анимации в секунду время, масштабируя свойство (TimeScaling
).
h.TimeScaling = 5;
Комбинация свойства FramesPerSecond
и TimeScaling
определяет временной шаг симуляции. Эти настройки приводят к временному шагу приблизительно 0,5 с.
Создайте и загрузите тела для объекта 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
и затем задать пользовательскую функцию чтения.
Загрузите данные о траектории рейса.
load simdata load fltdata
Установите данные временных рядов для этих двух тел.
h.Bodies{1}.TimeSeriesSource = simdata; h.Bodies{2}.TimeSeriesSource = fltdata;
Идентифицируйте временные ряды для второго тела как пользовательские.
h.Bodies{2}.TimeSeriesSourceType = 'Custom';
Задайте пользовательскую функцию чтения, чтобы получить доступ к данным в 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
содержит запись воспроизведения.
Эта команда воспроизводит органы по анимации на время данных временных рядов. Это воспроизведение показывает различия между моделируемыми и фактическими полетными данными.
h.play();
Если вы использовали свойства Video
сохранить запись, смотрите Просмотр Записанные Файлы анимации для описания того, как просмотреть файлы.
Если у вас нет файла анимации, чтобы просмотреть, смотрите Файлы анимации Записи.
Откройте папку, которая содержит файл анимации, который вы хотите просмотреть.
Просмотрите файл анимации с приложением по вашему выбору.
Если ваш файл анимации еще не запускается, запустите его теперь с приложения.
Чтобы препятствовать тому, чтобы другие команды h.play
перезаписали содержимое файла анимации, отключите запись после того, как вы будете удовлетворены содержимым.
h.VideoRecord = 'off';
Этот ряд команды показывает, как можно управлять камерой на этих двух телах и вновь отобразить анимацию. Свойство PositionFcn
объекта камеры управляет положением камеры относительно тел в анимации. В Воспроизведении Траекторий Рейса Используя Объект Animation объект камеры использует значение по умолчанию для свойства PositionFcn
. В этом ряду команды пример ссылается на пользовательскую функцию PositionFcn
, которая использует статическое положение на основе положения тел. Никакие движущие силы не включены.
Пользовательская функция PositionFcn
расположена в папке
.matlabroot\toolbox\aero\astdemos
Установите камеру PositionFcn
на пользовательский функциональный staticCameraPosition
.
h.Camera.PositionFcn = @staticCameraPosition;
Запустите анимацию снова.
h.play();
Этот ряд команд иллюстрирует, как переместить и изменить местоположение тел.
Установите время начала на 0.
t = 0;
Двигайте телом к стартовой позиции, которая основана на данных временных рядов. Используйте Аэро. Объект Animation метод Aero.Animation.updateBodies
.
h.updateBodies(t);
Обновите положение камеры с помощью пользовательского набора функции PositionFcn
в предыдущем разделе. Используйте Аэро. Объект Animation метод Aero.Animation.updateCamera
.
h.updateCamera(t);
Измените местоположение тел первым получением текущего положения тела, затем разделив тела.
Получите текущие положения тела и вращения от объектов обоих тел.
pos1 = h.Bodies{1}.Position; rot1 = h.Bodies{1}.Rotation; pos2 = h.Bodies{2}.Position; rot2 = h.Bodies{2}.Rotation;
Разделите и измените местоположение тел путем перемещения их в новые положения.
h.moveBody(1,pos1 + [0 0 -3],rot1); h.moveBody(2,pos1 + [0 0 0],rot2);
Этот ряд команд иллюстрирует, как создать и присоединить прозрачность к телу. Объект Animation хранит геометрию тела как закрашенные фигуры. Этот пример управляет свойствами прозрачности этих закрашенных фигур (см. Свойства исправления).
Использование диапозитивов может уменьшить скорость анимации на платформах, которые используют программное обеспечение рендеринг OpenGL® (см. opengl
).
Измените свойства исправления тела. Используйте Аэро. Свойство Body PatchHandles
получить указатели закрашенной фигуры для первого тела.
patchHandles2 = h.Bodies{1}.PatchHandles;
Боритесь и альфа-значения ребра, которые вы хотите для прозрачности.
desiredFaceTransparency = .3; desiredEdgeTransparency = 1;
Получите текущую поверхность и альфа-данные о ребре и измените все значения на альфа-значения, которые вы хотите. В фигуре первое тело теперь имеет прозрачность.
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
этих закрашенных фигур.
Измените свойства исправления тела. Используйте Аэро. Свойство Body PatchHandles
получить указатели закрашенной фигуры для первого тела.
patchHandles3 = h.Bodies{2}.PatchHandles;
Установите цвет шаблона на красный.
desiredColor = [1 0 0];
Получите текущий цвет поверхности и данные и распространите новый цвет шаблона, красный, к поверхности.
Условие 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