Россия, Новосибирск, НГПУ, 1994 |
Работа с графикой: визуализация функций двух переменных
7.2. Опции графических функций построения объектов в трёхмерном пространстве
Некоторые опции двумерных графических функций, такие как AspectRatio, Axes, AxesLabel, AxesStyle, Background, PlotLabel, PlotRange и Ticks, выполняют те же задачи и для трёхмерных графических функций, и принципы их задания и оказываемого действия остаются прежними. В данном пункте опишем несколько дополнительных опций, специфических для функций построения объектов в трёхмерном пространстве.
Как мы видим в примерах на рисунках 7.1 и 7.2, трёхмерные графики по умолчанию строятся заключёнными в "коробку" (box). Избавиться от неё можно, задав в следующем виде опцию Boxed->False.
Опция ColorFunction определяет, каким образом будет раскрашена поверхность, изображённая на графике. Для расцвечивания графика можно как использовать ту или иную стандартную цветовую схему, задав опцию, например, как ColorFunction->"GreenPinkTones", так и менять цвет вдоль того или иного направления, предварительно задав направление градации, например, следующим образом: ColorFunction->Function[{x,y,z},Hue[z]].
В In[1] на рис. 7.3 мы построили две сферы, при этом построения отличаются друг от друга способом окрашивания поверхности. На рисунке слева в Out[1] поверхность сферы закрашена вдоль оси z, благодаря тому, что нужную опцию мы задали, как ColorFunction->Function[{x,y,z},Hue[z]]. На рисунке справа мы определили направление изменения цвета вдоль линии, описываемой функцией z-x, задав соответствующую опцию в виде ColorFunction->Function[{x,y,z},Hue[-x+z]]. Кроме того, на обоих рисунках мы избавились от коробочки при помощи опции Boxed->False. На рисунке справа мы также убрали координатные оси, задав Axes->False.
Подробней об опции ColorFunction см. книги Е. М. Воробьёва [1, с. 85] и А. Н. Прокопени и А. В. Чичурина [5, с. 60–61].
Наглядность трёхмерного рисунка определяется позицией, с которой этот рисунок рассматривается. Эта позиция выбирается опцией ViewPoint. Положение точки, из которой "рассматривается" рисунок, определяется относительными координатами. Центр коробки с рисунком имеет координаты {0,0,0}, а линейный размер ее наибольшей стороны принимают значения не больше единицы (Е. М. Воробьёв [1, с. 85]). Относительные размеры остальных двух сторон определяются опцией BoxRatios. Она задаётся в виде BoxRatios->{dx,dy,dz}, где dx,dy,dz — относительные размеры сторон коробочки вдоль оси абсцисс, ординат и аппликат, соответственно.
Вернёмся к опции ViewPoint. По умолчанию она задана как ViewPoint->{1.3,-2.4,2}. Е. М. Воробьёв [1, с. 85] упоминает другие наиболее часто используемые значения опции, обращение к которым может осуществляться соответствующими командами в контекстном меню рисунка: "Другие часто используемые значения опции: {0,-2,0} — взгляд на фасад коробочки, {0,-2,2} — сверху с фасадной стороны, {0,-2,-2} — снизу с фасадной стороны, {-2,-2,0} — взгляд с левого угла, {2,-2,0} — взгляд с правого угла, {0,0,2} — строго сверху".
На рис. 7.4 мы изобразили фигуру, похожую на бараний рог, взяв за основу изображение в книге В. П. Дьяконова [2, с. 431–432]. На рисунке слева в Out[1] точка, из которой рассматривается изображение, задана автоматически. На рисунке справа изображение повёрнуто относительно положения по умолчанию: этого мы добились, задав соответствующую опцию как ViewPoint->{-4,-2,3}.
Подробней об опции ViewPoint см. книги Е. М. Воробьёва [1, с. 85] и А. Н. Прокопени и А. В. Чичурина [5, с. 61].
Различать рельеф изображённой поверхности или форму изображённого тела помимо цвета помогают линии криволинейной сетки, образованной линиями пересечения плоскостей х=const, у=const с изображаемой поверхностью. Наличие и частота этих линий регулируются опцией Mesh. Задание Mesh->None полностью убирает линии с рисунка. Mesh->k рисует k линий вдоль каждой из осей абсцисс и ординат; Mesh->{m,n} рисует m линий вдоль оси абсцисс и n линий вдоль оси ординат. Тип линий сетки можно определить заданием требуемых директив в опции MeshStyle. При Mesh->None опция MeshStyle никакого влияния на внешний вид рисунка не оказывает.
На рис. 7.5 мы построили некоторую поверхность в трёхмерном пространстве. На верхнем левом рисунке координатная сетка задана автоматически. На правом верхнем рисунке мы набросили на поверхность более частую сетку, включающую по 30 линий вдоль осей, задав Mesh->30. На левом нижнем рисунке мы изобразили только линии координатной сетки вдоль оси абсцисс, задав Mesh->{20,0}. На правом нижнем рисунке мы вовсе избавились от координатной сетки, задав Mesh->None. Кроме того, в двух последних примерах мы изменили отношение сторон трёхмерного изображения, в первом случае сжав его вдоль оси аппликат, BoxRatios->{1,1,1/4}, а во втором — расширив BoxRatios->{1,1,2}.
Подробней об опциях Mesh и MeshStyle см. книгу А. Н. Прокопени и А. В. Чичурина [5, с. 59].