Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Координатные оси и линия



 

После знакомства с командой figure, позволяющей создать графическое окно, естественным должно показаться желание что-либо в этом окне нарисовать. Что ж, давайте попробуем:

 

>> hf=figure;

>> ha=axes;

>> hl=line([0 1 2 3 4],[0 1 1 2 1]);

 

То, что произошло, вы можете увидеть на экране. Однако, дадим несколько пояснений. После выполнения первой команды, как и ожидалось, на экране появилась фигура. Точка с запятой поставлена, чтобы подавить в командном окне эхо-печать. Нам в общем-то не так важно, какой именно хэндл имеет эта фигура. Достаточно знать, что он хранится в переменной hf. Вторая строчка приведет к созданию нового для нас графического объекта: Axes. Его можно было бы назвать окном графического вывода, но давайте будем называть этот объект короче: Оси. Наконец, последняя из этих трех строчек создает объект line (линия). В простейшем варианте команда создания линии имеет два параметра – вектора одинаковой размерности. Первый вектор содержит абсциссы, а второй – ординаты точек, которые соединяются ломаной линией. Объект фигура является родительским по отношению к осям, а оси – по отношению к линии.


Это можно проверить, выполнив следующие три команды:

 

>> get(hf,'Children')

ans =

100.0012

>> get(ha,'Children')

ans =

101.0005

>> get(hl,'Children')

ans =

Empty matrix: 0-by-1

 

Объект линия, как видно из этого примера, в отличие от фигуры и осей детей не имеет.

Точно так же, как и для осей, с помощью команды set можно менять свойства объектов. Изменим, например, пределы изменения ординаты на графике и цвет линии.

 

 

 
 

Кстати, чтобы нарисовать линию, вовсе не обязательно вводить перед этим команды figure и axes. Закройте имеющуюся на экране фигуру, и наберите команду:

 

>> hl=line([0 1 2 3 4],[0 1 1 2 1]);

 

Результат, как видим, тот же. То есть в MATLAB’е, в отличие от кошек, объекты могут рождаться сами по себе. На самом деле конечно родители у нашей линии (фигура и оси) есть, но создали их не мы, а MATLAB, обнаружив, что объект линию, создаваемую нами некуда поместить. При желании мы можем узнать хэндлы этих родителей с помощью команды get.

 

>> get(hl,'Parent')

ans =

101.0006

 

Все, о чем здесь говорилось, может показаться любопытным, однако пока непонятно, зачем все это нужно, если есть команда plot, которая все это умеет делать. Пора привести первый пример, когда использование графики низкого уровня может оказаться полезным. Следующий М-файл рекомендуется набрать и выполнить.

 

% Простейший пример анимации - вычерчивание синусоиды

 

% 1. Создаются фигура и оси с фиксированными пределами

 

hf=figure;

ha=axes('XLim',[0, 2*pi],'YLim',[-1.1, 1.1]);

 

% 2. Инициализация - задается количество шагов и заполняются

% вектора абсцисс и ординат графика для первого шага.

 

n=1000;

dx=2*pi/n;

x=[0, dx];

y=sin(x);

 

% 3. Вычерчивается первый отрезок графика. Параметр EraseMode управляет

% режимом стирания удаляемых или перемещаемых линий. В данном случае

% оптимальный режим 'none'. Однако, полезно выполнить этот файл для

% всех четырех вариантов и посмотреть, что получится

 

%hl=line(x,y,'EraseMode','normal'); % отображение полностью

% обновляется

hl=line(x,y,'EraseMode','none'); % старые линии не удаляются

%hl=line(x,y,'EraseMode','xor'); % удаляемая линия заполняется

% цветом объекта, находящегося под ней

%hl=line(x,y,'EraseMode','background'); % удаляемая линия заполняется

% цветом фона осей

 

% 4. В цикле дополняются вектора x и y и соответственно изменяется объект

% line

 

for i=2:n

for j=1:100000, k=j^2; end % Эта строчка только для замедления

x(i+1)= dx*i;

y(i+1)= sin(x(i+1));

set(hl,'XData',x,'YData',y); % Модификация линии

drawnow % Эта команда требует немедленного выполнения

% графической команды. Без нее MATLAB

% может отложить выполнение команды до

% удобного для себя момента и

% "мультика" не получится.

end

 

Надеюсь, что назначение файла достаточно понятно из комментариев, а возможные неясности исчезнут после его выполнения. И все-таки, несколько замечаний.

  1. Анимация для вычерчивания синусоиды, конечно, мало полезна и здесь используется для иллюстрации только из-за простоты. Обычно подобный вывод используется для отображения функций, требующих большого объема вычислений. Например, для численного решения дифференциального уравнения. В ходе решения тогда можно будет визуально отслеживать его ход.
  2. При анимации важно правильно использовать свойство EraseMode. В данном случае, когда уже построенная часть линии не меняется, ‘none’ – лучший вариант. Но в случае, если вы захотите отобразить на экране колебания упругой струны, следует свойству EraseMode присвоить значение ‘xor’. В этом случае предыдущая конфигурация линии будет удаляться, а на экране отображаться текущая. В общем, в каждом конкретном случае выбор значения EraseMode, должен быть осознанным и хорошо продуманным.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.