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

Z = ехр( -Х.Л2 - У.Л2 )
Наконец, применяя описанную выше функцию plot3, получаем следующее изображение трехмерного графика этой функции (см. рис. 2.20):
J Figure No. I
iles? Edit ¦ Window ; Help| ¦;
0.5-
07
f-1 -2
Рисунок 2.20
Из рисунка видно, что функция plot3 строит график в виде набора линий в пространстве (создается 41 графический объект типа line), каждая из которых является сечением трехмерной поверхности плоскостями, параллельными плоскости yOz. По-другому можно сказать, что каждая линия получается из отрезков прямых, соединяющих набор точек, координаты которых берутся из одинаковых столбцов матриц X, Y и Z. То есть, первая линия соответствует первым столбцам матриц X, Y, Z; вторая линия - вторым столбцам этих матриц и т. д.
Помимо этой простейшей функции система MATLAB располагает еще рядом функций, позволяющих добиваться большей реалистичности в изображении трехмерных графиков. Это функции mesh, surf и surf 1. Они порождают графические объекты типа surface.
Функция mesh соединяет друг с другом все соседние точки поверхности графика отрезками прямых и показывает в графическом окне системы MATLAB плоскую проекцию такого объемного каркасно-ребристого (по-английски -wireframe mesh) тела. Каркасно-ребристое тело состоит из четырехугольных граней белого цвета, а ребра граней окрашиваются в разные цвета. По умолчанию более высоким точкам графика соответствуют красные цвета, а более низким (меньшие значения третьей координаты) - темно-синие. Промежуточные области окрашиваются в светло-синие, зеленые и желтые цвета. В результате,
MATLAB 5.x. Вычисления, визуализация, программирование
69
поскольку разные области поверхности графика (конкретно - ребра каркасного тела) окрашиваются в разные цвета, применение функции mesh порождает весьма наглядное изображение трехмерного графика.
К примеру, вместо ранее показанного при помощи функции plot3 графика функции
ехр( -Х.Л2 - У.Л2 ) состоящего из 41 пространственной линии, можно вызовом функции
hSl = mesh( X, Y, Z ) ; получить вот такое изображение каркасно-ребристого тела (см. рис. 2.21):
¦4 Figure No. I
e 1 Edit
'Help
¦0.5.
-1 -2
Рисунок 2.21
Как мы уже говорили, для лучшего восприятия «объемности изображения» разные ребра автоматически окрашиваются в разные цвета. Кроме того, в отличие от функции plot3 осуществляется удаление невидимых линий. Если вы считаете, что изображенное ребристое тело является прозрачным и не должно скрывать задних ребер, то можно ввести команду
hidden off
после чего такие линии появятся на изображении. В одних случаях это позволяет улучшить изображение, в других - нет. Всегда можно вернуться к имеющему место по умолчанию режиму сокрытия при помощи команды
hidden on
Кроме того, можно потребовать изображения отдельных ребер переменным цветом, чтобы цвет изменялся более плавно при переходе снизу вверх (по умолчанию цвет всех точек отдельного ребра одинаковый). Для этого нужно дополнительно ввести команду
shading interp
70 Глава 2. Визуализация результатов вычислений
которая изменит одно из свойств графического объекта типа surface, создаваемого функцией mesh. Описатель такого объекта возвращается этой функцией, и выше мы запомнили его в переменной hSl. Убедиться в том, что создается графический объект именно этого типа, можно следующим образом:
get( hSl, 'Type' ) ans = surface
Вместо применения команды shading interp можно напрямую воздействовать на свойство EdgeColor построенного объекта типа surface:
set( hSl, 'FaceColor', 'interp' )
и эффект будет тем же самым. Разница лишь в том, что применение высокоуровневой команды позволяет обойтись без знания мелких деталей низкоуровневого графического объекта. Однако знание таких деталей открывает больше возможностей. В любом случае ознакомиться со списком всех свойств графического объекта типа surface можно следующим образом:
get( hSl )
CData = [(21 by 41) double array]
EdgeColor = interp
Visible = on
где мы из реального большого списка привели лишь первое, последнее и нужное нам сейчас свойства.
Более «плотного» изображения поверхности можно добиться за счет раскраски разными цветами не ребер, а граней каркасно-ребристого тела. Для этого вместо функции mesh нужно применить функцию surf:
surf( X, Y, Z )
В результате получается следующее изображение, представляющее плотную (непрозрачную) сетчатую поверхность, причем отдельные ячейки (грани) этой сетчатой поверхности (плоские четырехугольники) автоматически окрашиваются в разные цвета (см. рис. 2.22). Как и в случае ранее рассмотренной функции mesh, здесь также по умолчанию более высокие точки графика окрашиваются в красный цвет, а более низкие - в темно-синий. При этом все ребра изображаются черным, цветом. Командой shading interp или соответствующими приемами низкоуровневой графики (были рассмотрены выше) можно добиться плавного перехода цветов граней, а прорисовку ребер убрать вообще (свойства объекта surface при этом следующие: EdgeColor = none; FaceColor = interp).
MATLAB 5.x. Вычисления, визуализация, программирование
71
# Figure No. 1
НШЗЕЗ
?dit Window.' -ijelp
1 ..¦¦••••¦
0.5-