И другие программы этой серии
Воспользовавшись командой File ⇒ New ⇒ M-File или edit ms1.m, создадим файл ms1.m следующего содержания:
[x,y] = meshgrid([-2:.4:2]);Z =sin(x.^2+y.^2);
fh = figure(\'Position\',[350 275 400 300],\'Color\',\'w\');
ah = axes(\'Color\',[.8 .8 .8],\'XTick\',[-2 -1 0 1 2],...
\'YTick\',[-2 -1 0 1 2]);
sh = surface(\'XData\',x,\'YData\',y,\'ZData\',Z,...
\'FaceColor\',get(ah,\'Color\')+.1,...
\'EdgeColor\',\'k\',\'Marker\',\'o\',...
\'MarkerFaceColor\',[.5 1 .85]);
В этом файле заданы три объекта: прямоугольник fh – объект класса figure, оси с метками ah – объект класса axes и трехмерная поверхность sh – объект класса surface. При первом запуске файла ms1 появится плоская сетка, показанная на рис. 7.7.
Рис. 7.7. Результат наложения объектов fh и ah друг на друга
354
Программные средства специальной графики
Основы дескрипторной графики
355
Она является результатом наложения объектов fh и ah друг на друга. При этом объект ah класса axes явно наследует свойства объекта fh класса figure. Наследование здесь проявляется в том, что при задании свойства «цвет граней» (FaceColor) объекта sh используется осветление (добавлением константы 0.1) цвета осей, полученного при помощи функции get(ah, color).
Пока ничего неожиданного в полученной двумерной фигуре нет. Но стоит исполнить команду >> view(3) как будет получено весьма любопытное изображение, представленное на рис. 7.8.
Рис. 7.8. Трехмерная поверхность, унаследовавшая узловые точки плоской фигуры
Команда view(3) изменяет точку обзора трехмерной поверхности. Раньше, когда параметры осей были жестко заданы (рис. 7.7), мы смотрели на поверхность строго сверху. Теперь команда view(3) установила точку обзора трехмерных графиков, принятую по умолчанию. Нетрудно заметить, что полученная трехмерная поверхность рис. 7.8 наследует узловые точки сетки, показанной на рис. 7.7. Таким образом, здесь в явной форме проявляется такое качество объектов, как наследование свойств, производных от родительских объектов.
Теперь создадим второй файл – ms2.m:
h(1) = axes(\'Position\',[0 0 1 1]); sphere
h(2) = axes(\'Position\',[0 0 .4 .6]); peaks;
h(3) = axes(\'Position\',[0 .5 .5 .5]); sphere
h(4) = axes(\'Position\',[.5 0 .4 .4]); sphere
h(5) = axes(\'Position\',[.5 .5 .5 .3]); cylinder([0 0 0.5])
set(h,\'Visible\',\'off\')
set(gcf,\'Renderer\',\'painters\') 1
Здесь задано 5 трехмерных объектов: три сферы разных размеров, поверхность peaks и цилиндр.
Еще более интересную картину мы получим, запустив файл ms2.
Начало в части 1