"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)-1 -2
Рисунок 2.22 С помощью функции surf получаются хотя и искусственно раскрашенные, но весьма наглядные изображения. Если же мы хотим добиться более естественных и объективных способов окрашивания поверхностей, то следует использовать функцию surf 1. Функция surfl в отличие от функции surf не применяет искусственных приемов закраски поверхности трехмерных графиков. Упрощенно говоря (детальные разъяснения требуют отдельной книги), эта функция сразу же использует понятие освещения поверхности графика. По умолчанию она использует встроенную засветку графика со стороны некоторой геометрической точки пространства. В результате точки поверхности графика, обращенные в сторону источника света (условно более яркие), изображаются красным цветом, а точки, находящиеся «в тени», - темно-синим. Если далее трактовать поверхность графика как материальную поверхность с определенными физическими свойствами по отражению света, то нужно задать эти свойства явно. Так как разные материалы по-разному отражают падающие лучи, то можно подобрать некоторый материал, чтобы получить наилучшее (с точки зрения пользователя) изображение. В частности, можно применить функцию colormap( copper ) с помощью которой для изображения графика выбирается набор цветов (по-английски - colormap), который характерен для света, отражающегося от медной поверхности (медь по-английски - copper). После этого применение функции surfl( X, Y, Z ) приводит к получению реалистически выглядящего и очень наглядного графика (см. рис. 2.23). 72 Глава 2. Визуализация результатов вычислений i Figure No. 1 НИ 13! File Edit Window Help.;. , 0.5- 0, 1 1 2 -1 -2 Рисунок 2.23 Можно с такого графика убрать черные линии, изображающие ребра, а также добиться еще более плавного перехода освещения поверхности, если выполнить команду shading interp означающую, что теперь цвет (освещенность) будет меняться даже внутри отдельных граней (ячеек). В итоге будет получаться совсем уж реальное изображение некоторого трехмерного материального объекта (см. рис. 2.24). •» Figure No.1 File Edit Window Help 0.5- -1 -2 Тем не менее система MATLAB на этом не останавливается: существует возможность еще точнее проявить отдельные участки поверхности графика, включив дополнительные источники освещения, которые реализуются в виде графических объектов типа light. Свет от таких источников смешивается MATLAB 5.x. Вычисления, визуализация, программирование 73 с рассеянным фоновым освещением (AmbientLight), цвет и сила которого встроены в виде характеристик в объекты axes (свойство AmbientLightColor) и surface (свойство AmbientStrength). В следующем примере: hS = surf1( X, Y, Z ); set(hS,'FaceLighting','phong','FaceColor','interp'); set(hS,'AmbientStrength1,0.5); light('Position',[1 0 0],'Style','infinite'); задаются свойства поверхности (свойства графического объекта типа surface), которые влияют на результирующее изображение при использовании дополнительного источника света. После чего создается такой источник в позиции, определяемой его свойством Position, испускающий параллельные лучи (Style=inf inite, то есть бесконечно удаленный источник). Можно также задать цвет дополнительного источника подсветки поверхности графика (свойство Color объекта light). Чтобы сделать источник более сильным, нужно продублировать его несколько раз, создавая все новые источники в том же месте и с теми же свойствами. При этом описатели каждого вновь создаваемого источника света нужно запоминать в соответствующих переменных. Тогда впоследствии можно с помощью функции set изменять их свойства и суммарную силу света (для «выключения» конкретного источника нужно задать его свойство Color равным black), добиваясь желаемого внешнего вида графика. В этом заключается огромное преимущество работы с системой MAT-LAB в интерактивном режиме. Можно не спеша оценить достигнутый результат и, если что-то не нравится, выполнить отдельные части работы (а не всю работу) заново. Дополнительные детали оформления трехмерных графиков Многие приемы оформления трехмерных графиков совпадают с теми, что были рассмотрены при изучении плоских графиков функций одного переменного. В частности, для масштабирования удобно использовать функцию axis, которая в трехмерном случае принимает уже три пары скалярных аргументов: axis( [ xmin, xmax, ymin, ymax, zmin, zmax ] ) По-прежнему можно использовать функции text, xlabel, ylabel, zlabel, title, а также можно наносить отметки на осях координат с помощью функции set. Можно также с помощью функции subplot разместить в одном графическом окне несколько трехмерных графиков. 74 Глава 2. Визуализация результатов вычислении К новым методам дополнительного оформления трехмерных графиков можно отнести возможность вызывать функцию mesh с суффиксами z и с (meshz и meshc), а функцию surf - с суффиксом с (surfс). Использование суффикса z приводит к построению графика с пьедесталом. Например, фрагмент кода [X,Y] = meshgrid( -2:0.1:2); Z = X .* ехр( -Х.Л2 - У.Л2 ); meshz( X, Y, Z ) строит следующий график (см. рис 2.25): i Figure No. 1 -2 v. Рисунок 2.25 Функции с суффиксом с помимо собственно трехмерного графика строят еще и так называемые линии уровня. Например, фрагмент [X,Y,Z] =peaks(30); surfc(X,Y,Z); |
|
|