Эта последовательность команд создает анимационный объект и настраивает его.
Создание объекта анимации.
h = Aero.Animation;
Настройте анимационный объект для задания количества кадров в секунду (FramesPerSecond) свойство. Эта конфигурация управляет скоростью отображения кадров в окне рисунка.
h.FramesPerSecond = 10;
Настройте объект анимации, чтобы задать секунды масштабирования данных анимации в секунду (TimeScaling) свойство.
h.TimeScaling = 5;
Комбинация FramesPerSecond и TimeScaling свойство определяет временной шаг моделирования. Эти настройки приводят к временному шагу приблизительно 0,5 с.
Создание и загрузка тел для объекта анимации. В этом примере эти тела используются для работы с моделируемыми и фактическими траекториями полета. Первое тело оранжевое; он представляет смоделированные данные. Второе тело синего цвета; он представляет фактические данные полета.
idx1 = h.createBody('pa24-250_orange.ac','Ac3d');
idx2 = h.createBody('pa24-250_blue.ac','Ac3d');Оба тела являются файлами формата AC3D. AC3D является одним из нескольких форматов файлов, поддерживаемых анимационными объектами. FleyGear использует тот же формат файлов. Объект анимации считывает тела в формате AC3D и сохраняет их в виде фрагментов в объекте геометрии в объекте анимации.
Данная серия команд загружает записанные данные траектории полета, содержащиеся в файлах в папка.matlabroot\toolbox\aero\astdemos
simdata - Содержит смоделированные данные траектории полета, настроенные как массив 6DoF.
fltdata - содержит фактические данные траектории полета, настроенные в пользовательском формате. Чтобы получить доступ к этим данным пользовательского формата, в примере необходимо задать для основного объекта TimeSerureSourceType значение 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;Эта команда создает объект фигуры для объекта анимации.
h.show();
Включите запись воспроизведения траекторий полета с помощью объекта анимации.
h.VideoRecord = 'on'; h.VideoQuality = 50; h.VideoCompression = 'Motion JPEG AVI' h.VideoFilename = 'astMotion_JPEG';
Включите запись анимации в любой момент, когда необходимо сохранить последовательность анимации.
Примечание
Выбирая тип сжатия видео, помните, что вам потребуется соответствующее программное обеспечение для просмотра. Например, при создании формата AVI для просмотра файла требуется средство просмотра, например проигрыватель Windows Media ®.
После воспроизведения анимации, как описано в разделе Воспроизведение траекторий полета с помощью объекта анимации, astMotion_JPEG содержит запись воспроизведения.
Эта команда воспроизводит тела анимации в течение периода данных временного ряда. При этом отображаются различия между смоделированными и фактическими полетными данными.
h.play();

Если вы использовали Video свойства для хранения записи см. в разделе Просмотр файлов записанной анимации для получения описания просмотра файлов.
Если у вас нет файла анимации для просмотра, см. раздел Запись файлов анимации.
Откройте папку, содержащую файл анимации, который требуется просмотреть.
Просмотрите файл анимации с помощью выбранного приложения.
Если файл анимации еще не запущен, запустите его сейчас из приложения.
Чтобы предотвратить другие h.play перезаписать содержимое файла анимации, отключить запись после того, как содержимое будет удовлетворено.
h.VideoRecord = 'off';
В этой серии команд показано, как можно управлять камерой на двух телах и повторно отображать анимацию. PositionFcn свойство объекта камеры управляет положением камеры относительно тел в анимации. При воспроизведении траекторий полета с помощью объекта анимации объект камеры использует значение по умолчанию для PositionFcn собственность. В этой серии команд пример ссылается на пользовательский PositionFcn функция, использующая статическое положение на основе положения тел. Динамика не задействуется.
Примечание
Обычай PositionFcn находится в папка.matlabroot\toolbox\aero\astdemos
Установка камеры PositionFcn в пользовательскую функцию staticCameraPosition.
h.Camera.PositionFcn = @staticCameraPosition;
Запустите анимацию еще раз.
h.play();
В этой серии команд показано, как перемещать и перемещать тела.
Установите начальное время равным 0.
t = 0;
Переместите тело в исходное положение, основанное на данных временного ряда. Использование объекта Aero.Animation updateBodies способ.
h.updateBodies(t);
Обновление положения камеры с помощью пользовательского PositionFcn функция, заданная в предыдущем разделе. Использование объекта 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);

Эта серия команд иллюстрирует создание и присоединение прозрачности к телу. Объект анимации сохраняет геометрию тела в виде фрагментов. В этом примере рассматриваются свойства прозрачности этих исправлений (см. раздел Свойства исправления).
Примечание
Использование прозрачности может снизить скорость анимации на платформах, использующих программное обеспечение для рендеринга OpenGL ® ( см.opengl).
Измените свойства сегмента тела. Использование Aero.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
В этой серии команд показано, как изменить цвет тела. Объект анимации сохраняет геометрию тела в виде фрагментов. Этот пример манипулирует FaceVertexColorData свойство этих исправлений.
Измените свойства сегмента тела. Использование Aero.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