Matlab. Язык технических вычислений: вычисление, визуализация, программирование

Страницы работы

Фрагмент текста работы

заданный диапазон по у и заданные метки для приращений по х. Линии существуют внутри осей и имеют заданные значения для данных по х и у. Три идентификатора объектов f, а и h сохранены для даль­нейшего использования.

set и get

Свойства объекта задаются обращением к нему после его создания. Для этого используйте идентификатор, возвращаемый создаваемой функцией.

Функция set позволяет устанавливать свойства объектов, указанием идентифи­катора объекта и совокупности пар название свойства / значение. В качестве уп­ражнения изменим цвет и ширину линии из предыдущего примера.

set( h , 'Color' , [0 .8 .8] , 'LineWidth' , 3)

Для того, чтобы увидеть список всех доступных свойств заданного объекта, вы­зовете set с идентификатором объекта.

set (h)

Color

EraseMode: [ {normal} | background | xor | none ]

 LineStyle: [ {-} | — | : | -. | none ]

 LineWidth

Marker: [ + | o | * | . | x | square | diamond | v | Л | > | <

pentagram | hexagram | {none} ]

 MarkerSize

XData

YData

Zdata

Чтобы вывести список всех текущих установленных свойств заданного объекта, вызовете get с идентификатором объекта

get (h)

Color = [0 0.8 0.8]

EraseMode = normal

LineStyle = -

LineWidth = [3]

Marker = none

MarkerSize = [6]

XData = [ (1 by 7) double array]

YData = [ (1 by 7) double array]

ZData = []

Для запроса значения отдельного свойства используйте get с именем свойства,

get(h , 'Color')

ans =

     0    0.8000    0.8000

Объекты axes имеют много детальных свойств для всего графика. Например, заголовок - title.

t = get(a, 'title');

set(t, 'String', 'Temperature', 'FontAngle', 'oblique')

Функция title обеспечивает другой интерфейс к этим же свойствам.

Графический Пользовательский Интерфейс (GUI)

Ниже приведен пример иллюстрирующий использование управляемой графики (Handle Graphics) для создания пользовательского интерфейса.

b = uicontrol( 'Style', 'pushbutton',...

'Units', 'normalized',. . .

'Position', [.5 .5 .2.1],...

'String', 'clickhere');

создает pushbutton в центре окна изображения (figure) и возвращает идентифи­катор нового объекта. Однако пока, нажатие на эту кнопку ни к чему не приво­дит.

s = ' set(b ,' 'Position'', [.8*rand .9*rand .2 .1])';

создает строку, содержащую команду, которая меняет положение кнопки. По­вторное использование

eval(s)

будет передвигать кнопку в случайные места. Окончательно, set(b , 'Callback', s)

установит s в качестве обработки нажатия кнопки. Поэтому каждый раз, когда вы её нажимаете, она перемещается на новое место.

Анимация

MATLAB предоставляет несколько способов для создания двигающейся, ани­мационной графики. Использование свойства EraseMode предназначено для длинной последовательности простых графиков, где изменение от кадра к кадру минимально. Ниже представлен пример, моделирующий броуновское движение.

Определим количество точек

n  =  20;

Температуру или скорость как

s  =   .02;

Лучшие значения этих параметров зависят от скорости вашей машины. Сгене­рируем п случайных точек с координатами (х,у) между -Уг и Уг.

х  =  rand(n,1)-0.5;

у  =  rand(n,1)-0.5;

Отобразим точки в квадрате со сторонами в пределах от -1 до 1. Сохраним идентификатор для вектора точек и установим свойство EraseMode равным хог. Это укажет графической системе MATLAB не перерисовывать весь график, ко­гда изменяется координата одной точки, а восстанавливать цвет фона в окрест­ности точки, используя операцию исключающего ИЛИ.

h = plot(x , у , ' . ' );

axis([-1 1-11])

axis square

grid off

set(h , 'EraseMode' , 'xor' , 'MarkerSize' , 18 );

while  1

   х  =  х  +  s*randn(n,1);

   у  =  у  +  s*randn(n,1);

set(h,    'Xdata'   ,   x  ,    'Ydata'   ,   y)

 end

Сколько нужно времени, чтобы одна из точек вышла за пределы квадрата? Че­рез какое время все точки окажутся вне квадрата?

Movie

Если вы увеличиваете число точек в броуновском движении, например, п = 300, то в этом случае движение не будет очень подвижным, так как потребуется слишком много времени на каждом шаге. Становится более эффективным со­хранить определенное число кадров как bitmap и проигрывать их как кино.

Во-первых, пусть число кадров

nframes  =  50;

Во-вторых, установим первый график как и ранее, за исключением использова­ния

EraseMode

х = rand(n,1)-0.5;

у = rand(n,1)-0.5;

h = plot(x, у, ' . ' )

set(h, 'MarkerSize' , 18)

axis([-1 1-11])

axis square

grid off

Теперь выделим достаточно памяти для сохранения нашего фильма.

М = moviein(nframes);

Это установит большую матрицу с nframes столбцами. Каждый столбец доста­точно длинный, чтобы сохранить один кадр. Полное количество требуемой па­мяти пропорционально количеству кадров и области текущих осей, но она не зависит от сложности отдельных графиков. Для 50 кадров и осей по умолчанию необходимо около 7.5 мегабайт памяти. В нашем примере используются квад­ратные оси, которые немного

Похожие материалы

Информация о работе

Тип:
Методические указания и пособия
Размер файла:
621 Kb
Скачали:
0