"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

¦4 Figure No. I
:f Eilalf Edit Window;- Help • "¦
HBE3
_J Рисунок 2.1 7
Для наблюдения за движением объектов по некоторой траектории нужно применить средство динамической визуализации системы MATLAB, реализуемое функцией comet (комета). Пусть, к примеру, речь идет о наблюдении за равномерным движением по окружности в течение времени t от 0 до 20:
t = 0 : 0.1 : 20;
MATLAB 5.x. Вычисления, визуализация, программирование 65
х = cos( t ); у = sin( t ) ;
Движение материальной точки по окружности моделируется наглядно в виде движения абстрактной «кометы» с хвостом, цвет которого отличается от цвета всей траектории. Для этого осуществляется следующий вызов функции comet:
comet( х, у )
при котором наглядно изображается движение по круглой траектории. Если же нужно наблюдать за динамическим изменением координат х и у со временем t, то нужно применить два других вызова функции comet:
comet( t, x ); comet( t, у ) каждый из которых разворачивает во времени процесс изменения координат.
Трехмерная графика
Возможности отображения трехмерных графических объектов в системе MATLAB весьма обширны. В частности, имеется возможность решать разнообразные задачи трехмерного моделирования объектов реального мира, опираясь на графические объекты типа patch. Это исключительно обширный раздел современной компьютерной графики, излагать который в двух словах бессмысленно, а для более-менее подробного изложения требуется отдельная книга. Поэтому в данном пособии этот вопрос затрагиваться не будет.
Мы сосредоточимся на изображении пространственных линий и на построении графиков функций двух вещественных переменных, которые представляют собой поверхности в пространстве. Начнем с линий.
Каждая точка в пространстве характеризуется тремя координатами. Набор точек, принадлежащих некоторой линии в пространстве, нужно задать в виде трех векторов, первый из которых содержит первые координаты этих точек, второй вектор - вторые их координаты, ну а третий вектор - третьи координаты. После чего эти три вектора можно подать на вход функции plot3, которая и осуществит проектирование соответствующей трехмерной линии на плоскость и построит результирующее изображение. При этом все будет сделано автоматически в лучших традициях высокоуровневой графики системы MATLAB: будут просчитаны пределы изменения переменных по осям координат, нанесены графические и числовые метки, подобран цвет линии и фона и т. д.
Например, следующий фрагмент кода
t = 0 : pi/50 : 10*pi ; х = sin( t ); у = cos( t ); plot3( x , у , t ); grid on
3 Зак. 409
66
Глава 2. Визуализация результатов вычислений
где применена известная по плоским графикам команда
grid on
для проставления сетки координатных значений в области построения графика (также можно использовать ранее изученные команды и функции по дополнительному оформлению графиков), позволяет построить винтовую линию, изображение которой показано на рис. 2.18.
~i Figure No. 1
\?ite'i Edit .
Help
.0
-1- -1
Рисунок 2.18
Эту же функцию plot3 можно применить и для изображения поверхностей в пространстве, если, конечно, провести не одну линию, а много; конкретно надо провести семейство линий пересечения поверхности с набором параллельных друг другу плоскостей, которые к тому же параллельны одной из координатных плоскостей. Всю эту работу и выполняет функция plot3, когда ей на вход подаются не три одномерных массива, как было рассмотрено выше, а три матрицы одинакового размера. Рассмотрим все это подробнее.
Графики функций двух переменных представляют собой куски поверхностей, нависающие над областями определения функций. Отсюда ясно, что изображение графиков функций двух переменных требует реализации «трехмерной графики» на плоском экране дисплея компьютера.
Высокоуровневая графическая подсистема MATLAB автоматически реализует трехмерную графику без специальных усилий со стороны пользователя. Пусть в точке с координатами xl, yl вычислено значение функции z = f (х,у) и оно равно zl. В некоторой другой точке (то есть при другом значении аргументов) х2, у2 вычисляют значение функции z2. Продолжая этот процесс, получают массив (набор) точек (xl,yl, zl), (x2,y2, z2), ..., (xN,yN, zN) в количестве N штук, расположенных в трехмерном пространстве. Специальные функции системы MATLAB проводят через эти точки гладкие поверхности и отображают их проекции на плоский дисплей компьютера.
MATLAB 5.x. Вычисления, визуализация, программирование
67
Чаще всего точки аргументов расположены в области определения функции регулярно в виде прямоугольной сетки (матрицы точек). Такая сетка точек порождает две числовые матрицы одной и той же структуры: первая матрица содержит значения первых координат этих точек (х-координат), а вторая матрица содержит значения вторых координат (у-координат). Обозначим первую матрицу как X, а вторую - как Y. Есть еще и третья матрица - матрица значений функции z = f(x,y) при этих аргументах. Эту матрицу обозначим буквой Z.
Как мы и обещали, рассмотрение вопроса о построении графиков функций двух переменных в системе MATLAB начнем с функции plot3, которая является простейшей в семействе предназначенных для этой цели функций. Ее вызов для построения таких графиков осуществляется в виде
plot3( X , Y , Z )
где X, Y и Z - матрицы одинаковых размеров, смысл которых мы только что объяснили.
В системе MATLAB имеется специальная функция для получения двумерных массивов X и Y по одномерным массивам х, у (см. рис. 2.19).
— Два двумерных массива (матрицы) X и V
Рисунок 2.19
Пусть по оси х задан диапазон значений в виде вектора и = -2 : 0.1 : 2 а по оси у этот диапазон есть
v = -1 : 0.1 : 1
Для получения матриц X и Y, представляющих первые и вторые координаты получающейся прямоугольной сетки точек, используют специальную функцию системы MATLAB
[ X , Y ] = meshgrid( u, v )
Как мы видим, эта функция получает на входе два одномерных массива (вектора), представляющие массивы точек на осях координат, и возвращает сразу
68
Глава 2. Визуализация результатов вычислений
два искомых двумерных массива. На прямоугольной сетке точек вычисляем значения функции, например функции ехр: