Разделы презентаций


Структуры данных. Анимация. Файлы

Содержание

Составные структуры

Слайды и текст этой презентации

Слайд 1Структуры данных. Анимация. Файлы.
Прикладные программные системы
Лекция №4

Структуры данных. Анимация. Файлы.Прикладные программные системыЛекция №4

Слайд 2Составные структуры

Составные структуры

Слайд 3Ячеечные массивы (I)
Ячеечный массив (cell array) — это массив, каждый

элемент которого может содержать любой тип данных: вектор, строку, матрицу,

другой массив и т.д.
Создать массив ячеек можно функцией cell:
>> a = cell(5, 7); % это массив 5x7 ячеек
Можно создавать и вручную:
>> b = {'Concordia', [1 3 5]; {2, [5 1]}, 'a'};
Обращение к элементам массива:
>> c = b{2, 1};
c =
{2, [5 1]}
>> d = b{1, :}; d = {'Concordia', [1 3 5]}
Ячеечные массивы (I)Ячеечный массив (cell array) — это массив, каждый элемент которого может содержать любой тип данных:

Слайд 4Ячеечные массивы (II)
Для наглядного отображения массива ячеек используется функция cellplot:
>>

C = {rand(3, 2) zeros(5, 5); 'This is the string'

[1 3 5 7]};
>> cellplot(C);
Ячеечные массивы (II)Для наглядного отображения массива ячеек используется функция cellplot:>> C = {rand(3, 2) zeros(5, 5); 'This

Слайд 5Функции для работы с ЯМ
Преобразование из ЯМ в матрицу осуществляется

функцией cell2mat:
>> B = cell2mat(C);
ячеечный массив C должен содержать однотипные

данные!
Вывод содержимого ЯМ в командное окно (функция celldisp):
>> celldisp(C);
Примененить некоторую функцию к каждой из ячеек массива можно функцией cellfun:
>> A = cellfun(f, C); % здесь f — ссылка на функцию
Матрица, в свою очередь, преобразуется в ЯМ функцией mat2cell:
>> x = rand(10, 20);
>> C = mat2cell(x, [5 5], [13 7]);
получится ячеечный массив, содержащий «куски» матрицы
Функции для работы с ЯМПреобразование из ЯМ в матрицу осуществляется функцией cell2mat:>> B = cell2mat(C);ячеечный массив C

Слайд 6Структуры
Структура — тип данных, состоящий из именованных полей, содержащих произвольные

данные.
Структура создаётся функцией struct.
Пустую структуру можно создать так:
>> s =

struct();
Поля структуры можно создавать «на лету».
Поля создаются с помощью точки и указания имени поля.
Пример:
>> s.name = 'Erwin Schrodinger';
>> s.birthday = '12.08.1887';
>> s.has_nobel = true;
СтруктурыСтруктура — тип данных, состоящий из именованных полей, содержащих произвольные данные.Структура создаётся функцией struct.Пустую структуру можно создать

Слайд 7Структурные массивы (I)
Интуитивно структурный массив можо представить в виде таблицы;

полями будут являться заголовки этой таблицы, содержимое колонок же будет

содержимым массива.
Каждое поле содержит данные своего типа.
Структурные массивы создаются той же функцией struct.
Пример со структурным массивом с известными физиками:
>> physicists = struct('name', {'Albert Einstein', 'Erwin Schrodinger', 'Werner Heisenberg', 'Paul Dirac'}, 'birthday', {'14.03.1879', '12.08.1887', '05.12.1901', '08.08.1902'}, 'has_nobel', {true, true, true, true});
Здесь имена полей задаются строковыми параметрами, содержимое — ячеечными массивами.
Структурные массивы (I)Интуитивно структурный массив можо представить в виде таблицы; полями будут являться заголовки этой таблицы, содержимое

Слайд 8Структурные массивы (II)
Обращение к определённому полю:
>> ph1 = physicists(3).name; %

в скобках указывается номер строки в «воображаемой таблице», а через

точку — название поля
Обращение к целой строке «воображаемой таблицы»:
>> ph2 = physicists(1)
ph2 =
name: 'Albert Einstein'
birthday: '14.03.1879'
has_nobel: true
Обращение к содержимому столбца (поля):
>> ph3 = physicists.name;
Структурные массивы (II)Обращение к определённому полю:>> ph1 = physicists(3).name; % в скобках указывается номер строки в «воображаемой

Слайд 9Хэндлы (handles)
«А хотите я его стукну, и он станет фиолетовым?

В крапинку».
из м/ф «Тайна третьей планеты»

Хэндлы (handles)«А хотите я его стукну, и он станет фиолетовым? В крапинку».из м/ф «Тайна третьей планеты»

Слайд 10Handles
Handle (хэндл; манипулятор) — это переменная, которая содержит ссылку на

свойства некоторого объекта.
Будем рассматривать их применительно к графике.
Handle позволяет изменить

свойства графического объекта без его перерисовки (т.е. без вызова функции типа plot).
Получить handle графика очень просто:
>> x = 0:0.01:2*pi;
>> h = plot(x, sin(x)); % здесь переменная h — это handle построенной линии
Handle осей текущего графика (gca):
>> xy = gca; % здесь gca — это функция, выдающая handle «коробочки», в которой строится график
Аналогично для всего графического окна (gcf):
>> f = gcf;

HandlesHandle (хэндл; манипулятор) — это переменная, которая содержит ссылку на свойства некоторого объекта.Будем рассматривать их применительно к

Слайд 11Операции с хэндлами
Все поля структуры, на которую ссылается хэндл, можно

получить функцией get:
>> get(h) % h — имя хэндла, а

в командное окно выведутся наименования полей и их содержимое
>> b = get(h, 'ParameterName'); % запишет в b значение параметра с именем 'ParameterName'
Задать новое значение какому-либо полю структуры можно функцией set:
>> set(h, 'Color', [0 1 0]); % задаёт красный цвет линии на графике
Общий синтаксис функции:
set(handle, 'Parameter', value)
С помощью этих операций менять параметры объекта, не строя объект заново.
Операции с хэндламиВсе поля структуры, на которую ссылается хэндл, можно получить функцией get:>> get(h) % h —

Слайд 12Анимация
— Кристобаль Хозевич, я ее всё-таки решил. Вы были совершенно

правы. Пространство заклинаний действительно можно свернуть по любым четырем переменным.
А.

и Б. Стругацкие, «Понедельник начинается в субботу»
Анимация— Кристобаль Хозевич, я ее всё-таки решил. Вы были совершенно правы. Пространство заклинаний действительно можно свернуть по

Слайд 13Анимация и хэндлы
Получив хэндл графика, вы можете оперировать его параметрами:
>>

h = plot(x, y);
Например, у графика есть параметры 'XData' и

'YData', содержащие векторы с x-координатами и y-координатами графика соответственно.
Меняя эти параметры, можно менять сам график, не затрагивая его окружение.
Если менять эти параметры в цикле, можно добиться чего-то подобного смене кадров в анимационном фильме.
Полезной будет и функция pause, которая останавливает выполнение кода на заданное количество секунд:
>> pause(0.1);
Функция drawnow, напротив, требует перерисовать график сейчас же.
Анимация и хэндлыПолучив хэндл графика, вы можете оперировать его параметрами:>> h = plot(x, y);Например, у графика есть

Слайд 14Пример анимации (I)
x = 0;
y = sin(x);
h = plot(x, y,

'LineWidth', 4);
xlim([0 2*pi]);
ylim([-1 1]);
grid on;
for k = 0.01:0.01:2*pi
x = [x

k];
y = [y sin(k)];
set(h, 'XData', x, 'YData', y);
pause(0.01);
end;
Пример анимации (I)x = 0;y = sin(x);h = plot(x, y, 'LineWidth', 4);xlim([0 2*pi]);ylim([-1 1]);grid on;for k =

Слайд 15Пример анимации (II)
x = rand(1, 100) - 0.5;
y = rand(1,

100) - 0.5;
vx = (rand(1, 100) - 0.5) * 0.1;
vy

= (rand(1, 100) - 0.5) * 0.1;
h = plot(x, y, '.', 'MarkerSize', 6);
xlim([-5 5]);
ylim([-5 5]);
frames_count = 150;
for k = 1:frames_count
x = x + vx;
y = y + vy;
set(h, 'XData', x, 'YData', y);
pause(0.1);
end;

Пример анимации (II)x = rand(1, 100) - 0.5;y = rand(1, 100) - 0.5;vx = (rand(1, 100) -

Слайд 16Файлы с анимацией (I). Особенности матрицы
Для создания анимационных файлов потребуется

четырёхмерная матрица размерности где M — количество строк;

N — количество столбцов; P — количество слоёв (1 или 3); R — число кадров.
Например, такая:
>> img = round(rand(200, 200, 1, 20) * 255);
Тогда, например, матрица, соответствующая пятому кадру, это img(:, :, 1, 5)
Такую матрицу можно записать в анимированный GIF-файл:
>> imwrite(img, 'filename.gif');
Файлы с анимацией (I). Особенности матрицыДля создания анимационных файлов потребуется четырёхмерная матрица размерности  где M —

Слайд 17Файлы с анимацией (II). Параметры GIF
У функции imwrite есть дополнительные

параметры.
Некоторые из них относятся к анимационным gif-файлам
Эти параметры указываются таким

же образом, как, например, у функции plot — имя параметра в кавычках, через запятую значение параметра.

Файлы с анимацией (II). Параметры GIFУ функции imwrite есть дополнительные параметры.Некоторые из них относятся к анимационным gif-файламЭти

Слайд 18Файлы с анимацией (III). Структура с кадром
Можно считать в кадр

содержимое некоторого текущего графического окна:
>> F = getframe(h); % здесь

h — handle графического окна
Если кадр снимается с текущего окна, можно не указывать ничего:
>> F = getframe;
Функция getframe возвращает структуру с двумя полями: cdata и colormap
F.cdata содержит матрицу кадра
F.colormap содержит цветовую карту кадра
Файлы с анимацией (III). Структура с кадромМожно считать в кадр содержимое некоторого текущего графического окна:>> F =

Слайд 19Файлы с анимацией (IV). Массив кадров
Если записывать кадры в структурный

массив в цикле, то получим последовательность кадров:
>> for k =

1:30 imagesc(rand(300, 300, 3)); fs(k) = getframe; end;
такой структурный массив можно запустить на проигрывание:
>> movie(fs);
функция movie имеет ещё два параметра: число проигрываний и количество кадров в секунду:
>> movie(fs, 5, 30); % 5 раз проиграть ролик со скоростью 30 кадров в секунду
Файлы с анимацией (IV). Массив кадровЕсли записывать кадры в структурный массив в цикле, то получим последовательность кадров:>>

Слайд 20Файлы с анимацией (V). Создание видеофайлов
Созданный структурный массив можно записать

в видеофайл:
>> movie2avi(fs, 'your_file.avi');
у функции movie2avi есть дополнительные параметры
основной параметр

— это кодек, которым вы кодируете видео
под Windows 7 есть проблема [!]: ни один из стандартных кодеков не работает
можно попробовать перебрать следующие варианты: 'X264', 'FFDS', 'IYUV', 'WMV3'
>> movie2avi(fs, 'file.avi', 'Compression', 'FFDS');
параметр 'Compression' отвечает за кодек

Файлы с анимацией (V). Создание видеофайловСозданный структурный массив можно записать в видеофайл:>> movie2avi(fs, 'your_file.avi');у функции movie2avi есть

Слайд 21Функция comet
Когда строится траектория движения, иногда не понятно, где начало,

а где окончание
Эту проблему призвана решить функция comet:
>> t =

0:0.0005:4;
>> x = 3 * cosd(45) * t;
>> y = 5 + 3 * sind(45) * t - 9.81 * t.^2 / 2;
>> comet(x(y>0), y(y>0));
Она строит график так же, как на слайде №14 "Пример анимации (I)"
Функция cometКогда строится траектория движения, иногда не понятно, где начало, а где окончаниеЭту проблему призвана решить функция

Слайд 22Работа с файлами с данными
— Компьютер, сделай что-нибудь!
— Без проблем.

Включаю ручное управление. Удачи!
к/ф "Автостопом по Галактике"

Работа с файлами с данными— Компьютер, сделай что-нибудь!— Без проблем. Включаю ручное управление. Удачи!к/ф

Слайд 23Общие сведения
MatLab содержит функции для чтения и записи самых различных

типов файлов
Познакомимся с несколькими основными функциями для чтения и записи:
файлов

данных MatLab
табличных данных
текстовых файлов
Файл с данными в формате MatLab имеет расширение mat
Основные табличные форматы:
csv (comma separated values)
xls, xlsx (Excel-таблицы)
Текстовые файлы обычно имеют расширение txt, но могут быть любыми
Общие сведенияMatLab содержит функции для чтения и записи самых различных типов файловПознакомимся с несколькими основными функциями для

Слайд 24Файлы данных MatLab
Любую переменную или их множество можно записать в

mat-файл.
Это делается функцией save:
>> save 'my_data'; % сохранит все данные

из Workspace в файл my_data.mat
>> save 'my_data' x y; % сохранит только переменные с именами x и y
Загрузить данные, сохранённые в файл, можно функцией load:
>> load 'my_data'; % загрузит все данные из файла
>> load 'my_data' x y; % загрузит только переменные с именами x и y
Естественно, вместо x, y могут быть любые переменные в любом количестве
Файлы данных MatLabЛюбую переменную или их множество можно записать в mat-файл.Это делается функцией save:>> save 'my_data'; %

Слайд 25Файлы csv
csv-файлы содержат данные, разделённые запятыми, точками с запятой или

другими разделителями
Функция чтения файлов формата csv называется csvread:
>> M =

csvread('file.csv', row, col, range);
row, col — с какой строчки/столбца начать
range — вектор вида [R1 C1 R2 C2] задаёт область считывания
параметры row, col и range не являются обязательными
Функция записи файлов формата csv называется csvwrite:
>> csvwrite('my_file.csv', A); % A — матрица

Файлы csvcsv-файлы содержат данные, разделённые запятыми, точками с запятой или другими разделителямиФункция чтения файлов формата csv называется

Слайд 26Файлы xls
XLS — всем знакомые таблицы Excel. Чтение осуществляется функцией

xlsread. Способов её использования множество, перечислю лишь некоторые из них:
>>

M = xlsread('file.xls'); % считывает все числовые данные на 1 листе
>> M = xlsread('file.xls', -1); % открывает Excel, можно выбрать поля для считывания
>> M = xlsread('file.xls', sheet, 'range'); % считывает с заданного листа диапазон ячеек
[num, txt, raw] = xlsread('file.xls', ...); % записывает в массив num числовые данные, в txt — текстовые, а в массив ячеек raw — все
Запись данных в xls-файл (xlswrite):
>> xlswrite(’MyFile.xls’, M, ’SheetName’)
Файлы xlsXLS — всем знакомые таблицы Excel. Чтение осуществляется функцией xlsread. Способов её использования множество, перечислю лишь

Слайд 27Работа с текстовыми файлами (I)
Для того, чтобы считать данные из

текстового файла, нужно его сначала открыть функцией fopen:
>> fid =

fopen('someFile.ext'); % теперь fid хранит идентификатор файла
После окончания работы с файлом не забывайте его закрывать (fclose):
>> fclose(fid);
Функция чтения файлов textscan работает с файлами, имеющими определённую внутреннюю структуру
>> C = textscan(fid, 'format');
>> C = textscan(fid, 'format', N);
>> C = textscan(fid, 'format', param, value, ...);
>> C = textscan(fid, 'format', N, param, value, ...);
Параметр 'format' задаёт структуру считывания
В нём допустимы любые символы, разделяющие значения и набор шаблонов
Работа с текстовыми файлами (I)Для того, чтобы считать данные из текстового файла, нужно его сначала открыть функцией

Слайд 28Работа с текстовыми файлами (II). Шаблоны
Приведу основные шаблоны, используемые в

функции textscan:

Работа с текстовыми файлами (II). ШаблоныПриведу основные шаблоны, используемые в функции textscan:

Слайд 29Пример применения textscan
Пусть есть файл следующего содержания (значения разделены пробелами):
"ENIAC"

1946 500000$ 150kW "EDSAC" 1949 600000$ 12kW "CSIRAC" 1949 650000$ 30kW
Тогда

одним из возможных использований функции textscan будет такое:
>> C = textscan(fid, '%q%u%u%c%u%s');
C — ячеечный массив, каждый элемент которого содержит столбец из файла.

Слайд 30Резюме
К составным структурам данных относятся
ячеечные массивы
структуры
структурные массивы
Хэндлы – управление графикой
Анимация

– это изменение графика кадр за кадром
В Matlab есть возможность

считывания данных из файлов:
xls
csv
структурированных текстовых
и др.
РезюмеК составным структурам данных относятсяячеечные массивыструктурыструктурные массивыХэндлы – управление графикойАнимация – это изменение графика кадр за кадромВ

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика