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