Помимо уже рассмотренных подпакетов пакет расширения Graphics содержит подпакеты ThreeScript и Common. Подпакет ThreeScript содержит функцию преобразования трехмерных графических объектов в программный код формата 3-Script, например:
<<Graphics 'ThreeScript'
obj = Graphics3D[Polygon[0,0,0, 0,1,0, 0,1,1]]
• GraphicsSD •
ThreeScript[ "object.ts", obj]
object.ts
!!object.ts
% Graphics3D objects
boundingbox
0 0 0
0 1 1
viewpoint
1.3 -2.399999999999999 2.
ambientlight
000
lightsources
1. 0. 1.
1 0 0
1. 1. 1.
0 1 0
0. 1. 1.
0 0 1
polygon
0 0 0
0 1 0
0 1 1
Подпакет Common содержит просто перечень системных символов (точнее, слов), которые приняты во всех подпакетах пакета Graphics. Вот этот список: Horizontal, MaxArrowLength, ScaleFactor, ScaleFunction и Vertical.
В этом уроке мы научились:
Выполнять анимацию графиков различного типа. Управлять цветами графиков. Строить стрелки на графиках. Строить графики комплекснозначных функций. Строить объемные контурные графики. Строить графики с окраской внутренних областей. Строить графики специальных типов. Строить графики неявных функций. Выводить обозначения кривых — легенды. Строить графики с множеством объектов. Строить параметрические трехмерные графики. Представлять поля на плоскости и в пространстве. Строить объемные многогранники — полиэдры. Создавать графические формы. Работать с примитивами, использующими сплайны. Создавать поверхности вращения.Подпакет ComplexMap задает функции для построения графиков комплексных функций комплексной переменной путем демонстрации преобразования координатных линий:
CartesianMap [f, {xmin,xmax}, {ymin,ymax}] — строит изображение декартовых координатных линий после их преобразования функцией f; PolarMap[f, {rmin,rmax}, {thetamin, thetamax} ] — строит изображение координатных линий полярной системы после их преобразования функцией f.Действие этих довольно простых функций иллюстрирует рис. 14.11.
Рис. 14.11. Построение неискаженной декартовой координатной сетки (сверху) и полярной координатной сетки, искаженной воздействием функции Sqrt (снизу)
Трехмерные графики с параметрически заданными функциями, описывающими положение их точек, относятся к числу наиболее сложных, но в то же время весьма эффектных. В подпакете ParametricPlotSD определены функции, упрощающие подготовку таких графиков:
ParametricPlot3D[{fx,fy,fz},{u,u0,ul,du},{v,c0,vl,dv}] — строит трехмерную поверхность, заданную параметрически функциями f x, f у и f z от переменных и и v с заданными диапазонами изменения и приращениями du и dv (рис. 14.60); PointParametricPlot3D[ { fx, f у, f z},{u,u0,ul,du}] — строит точками трехмерную поверхность, заданную параметрически функциями fx, f у и f z от одной переменной и с заданным диапазоном изменения и приращением du; PointParametricPlot3D[{fx,fy,fz},{u,u0,ul,du),{v,c0,vl,dv}] — строит точками трехмерную поверхность, заданную параметрически функциями fx, f у и f z от переменных и и v с заданными диапазонами изменения и приращениями du и dv.
Рис. 14.60. Пример построения сферы с вырезом с помощью функции ParametricPlot3D
Обратите внимание на то, что выбором диапазона изменения углов можно получить вырез сферы. Окраска поверхности осуществляется автоматически.
На рис. 14.61 показан пример применения функции PointParametricPlotSD. Здесь сфера построена отдельными точками.
Для построения трехмерных поверхностей в сферической и цилиндрической системах координат служат следующие функции:
SphericalPlot3D[r, {t, trnin, tmax}, {p,pmin,pmax} ] — построение графика в сферической системе координат; CylindricalPlot3D[z,{t,tmin,tmax},{p,pmin,pmax}] — построение графика в цилиндрической системе координат.На рис. 14.62 показано построение усеченной сверху сферы с помощью функции SphericalPlot3D. Нетрудно заметить, что применение данной функции — самый простой способ построения сферы. Это естественно, поскольку система координат сферическая.
Риc. 14.61. Пример построения сферы точками
Рис. 14.62. Пример построения сферы с помощью функции SphericolPlot3D
Пример построения поверхности, напоминающей по виду «тарелку» спутниковой антенны, в цилиндрической системе координат дан на рис. 14.63.
С помощью опции Viewpoint можно изменять положение точки, с которой рассматривается фигура. Это существенно меняет ее вид (рис. 14.64).
Еще раз напоминаем, что интерфейс Mathematica предусматривает изменение точки просмотра уже построенной фигуры. При этом Mathematica 4 позволяет вращать фигуру мышью. Рекомендуется просмотреть список опций данных функций, позволяющих в широких пределах менять вид и стиль построения графиков.
Рис. 14.63. Пример построения поверхности в цилиндрической системе координат
Рис. 14.64. Пример построения фигуры, видимой из заданной точки просмотра
Подпакет ImplicitPlot задает три варианта функции для построения графиков неявно заданных функций:
ImplicitPlot [eqn, {x, xmin, xmax} ] — построение функции, неявно заданной уравнением eqn, при х, меняющемся от xmin до xmax; ImplicitPlot [eqn, {x, xmin,ml,m2,..., xmax} ] — построение функции, неявно заданной уравнением eqn, при х, меняющемся от xmin до xmax с исключением точек m1, m2, ...; ImplicitPlot [ {eqnl, eqn2,...}, ranges, options] — построение функций, неявно заданных уравнениями eqni, при х, меняющемся в пределах ranges и при задании опций options.Примером может быть функция х 2 + k у 2 = r 2 , задающая построение эллипса. На рис. 14.46 показано такое построение.
Вторая форма задания функции иллюстрируется рис. 14.47. Здесь строится сразу целое семейство эллипсов.
И, наконец, на рис. 14.48 показано применение третьей формы функции ImplicitPlot с использованием опции PlotStyle и директивы Dashing.
Рис. 14.46. Построение эллипса по неявному выражению
Рис. 14.47. Построение семейства эллипсов по их уравнениям
Рис. 14.48. Пример применения функции ImplicitPlot с опцией PlotStyle
В подпакете MultipleListPlot содержится расширенный вариант встроенной функции ListPlot:
MultipleListPlot [listl, Iist2,...] — строит множество графических объектов по данным списков. Списки могут быть представлены ординатами у, координатами точек {х,у), в виде {point, ErrorBar [ {negerr,poserr} ] } и т.д.
Рис. 14.52. Создание трех списков значений функций и их построение
Рисунок 14.52 иллюстрирует создание трех списков — 11, 12 и 13 — для трех функций и вывод их графиков в виде различных маленьких фигур.
Особое значение имеет опция Plot Joined. Если она используется в виде Plot-Joined->True, то это означает соединение точек на графиках отрезками линий разного стиля, выбираемого автоматически (рис. 14.53).
Рис. 14.53. Графики трех функций, построенные линиями, соединяющими их точки
Эта опция может быть представлена и со значением в виде списка. Например, ее применение в виде PlotJoined->{True, False, False} означает, что точки первой кривой соединяются линиями, тогда как точки второй и третьей кривых линиями не соединяются. Рисунок 14.54 поясняет этот способ построения графиков.
Рис. 14.54. Построение трех графиков, только у одного из которых точки соединены линиями
Функция MultipleListPlot может использовать в списках указания на построение точки с зоной погрешности (ErrorBar). Этот случай иллюстрирует рис. 14.55.
Более интересный случай построения точек с двумерными зонами погрешности в виде окружностей или эллипсов демонстрирует рис. 14.56.
Рис. 14.55. Построение точек с одномерными зонами погрешности
Рис. 14.56. Построение точек с двумерными зонами погрешности
Следующие функции служат для вывода символов в качестве точек: PlotSymbol [type] — задает тип символа (возможные значения: Box, Diamond, Star или Triangle). Возможно применение опции_ Filled-> False; PlotSymbol [type, size] — задает тип символа и его размер size; MakeSymbol [primitives] — задает вывод символа, создаваемого графическим примитивом.
Рисунок 14.57 показывает построение точек с применением графических примитивов.
Этот путь позволяет обозначать точки графиков практически любыми фигурами.
Многие графики сильно выигрывают при их построении с закраской. Например, чтобы проиллюстрировать значение определенного интеграла от какой-то функции f(x), достаточно просто закрасить ее график в диапазоне изменения х от нижнего предела интегрирования а до верхнего b. Для построения подобных графиков в подпакете FilledPlot имеется ряд полезных функций.
Начнем их описание с основных:
FilledPlot [f, {х, xmin, xmax} ] — строит график функции/(x) с окраской площадей, образованных линией функции и горизонтальной осью х. По умолчанию действуют опции Fills->Automatic и Curves->Back (то есть кривые строятся на заднем плане, при значении Front построение фигур производится на переднем плане); FilledPlot [{ fl, f2,...}, {х, xmin, xmax} ] — строит графики функций с выделением областей между ними разной окраской (цвет задается автоматически).Поясним применение этих функций рядом примеров. Перед этим надо не забыть загрузить подпакет командой
<< Graphics`FilledPlot`
На рис. 14.15 показано построение смещенной по оси у экспоненты с закраской области между линией экспоненты и горизонтальной осью х.
Рис. 14.15. Построение экспоненты с закраской областей между ней и осью абсцисс
Действие функции FilledPlot при построении графиков трех функций показано на рис. 14.16. Здесь использована опция Curves->Front, выводящая построение кривых на первый план, благодаря чему отчетливо видны разделительные линии перекрывающихся областей.
Рис. 14.16. Построение трех кривых с закраской областей между ними и осью абсцисс
Еще один пример построения графиков трех фигур показан на рис. 14.17. Здесь для закраски областей между фигурами и осью абсцисс использована опция Fills и директива GrayLevel (окраска серым цветом заданной плотности).
Рисунок 14.18 иллюстрирует закраску областей совместного применения двух функций, одна из которых — корень квадратный из х - 1 — определена только для И > 1. Именно эта область и закрашена.
Рис. 14.17. Построение трех кривых с закраской серым цветом
В подпакете ContourPlotSD заданы две функции, которые строят контурные объемные графики. Напоминаем, что функции ядра ContourPlot и ListContourPlot строят только двумерные графики этого типа. Для построения объемных контурных графиков надо использовать следующие функции:
ContourPlotSD[f,{x,xmin,xmax},{у,ymin,углах),{z,zmin,zmax)] — строит трехмерный контурный график функции f трех переменных: х, у и z; ListContourPlot3D[f, { fill, f 112,...}, { f 121, f 122,...},...},...}] -строит контурный график по данным трехмерного массива значений f .На рис. 14.12 показано построение сферы с отверстием с помощью первой из этих функций.
Обратите внимание на то, что никаких усилий по созданию в сфере отверстия не требуется, Оно получено просто усечением ограничительного «ящика», в котором размещается сфера. Для этого пределы по оси у заданы как {-1.2,2}, тогда как по остальным осям используются пределы {-2,2}.
Рис. 14.12. Построение сферы с отверстием
Интересные возможности открывает опция Contours, которая позволяет как бы раздвинуть в пространстве части трехмерной поверхности. Рисунок 14.13 демонстрирует ее действие.
Риc. 14.13. Построение частей сферы в пространстве
Вторая функция— ListContourPlot3D — позволяет строить ряд фигур или поверхностей в пространстве. Пример такого построения дан на рис. 14.14. Масштабы осей подобраны так, чтобы фигура была несколько обрезана справа, что создает изображение отверстия во внутренней яйцеобразной фигуре.
Рис. 14.14. Построение яйцо, вложенного в параболы
Как видно из этих примеров, применение описанных функций позволяет упростить построение трехмерных поверхностей и добиться интересных эффектов.
Подпакет Polyhedra служит для создания регулярных пространственных фигур — полиэдров. Они задаются как графические примитивы и выводятся функцией Show:
Show [Polyhedron [polyname] ] — строит полиэдр с именем polyname в центре графика; Show[Polyhedron[polyname,{х,у,z},scale]] — строит полиэдр с именем polyname с центром в точке {х, у, z} и параметром масштаба scale.Возможно задание следующих имен полиэдров: Tetrahedron, Cube, Octahedron, Dodecahedron, Icosahedron, Hexahedron, GreatDodecahedron, Small-StellatedDodecahedron, GreatStellatedDodecahedron и Greatlcosa-hedron. Пример построения полиэдра Icosahedron показан на рис. 14.74.
Рис. 14.74. Построение полиэдра Icosahedron
Возможность вывода с помощью функции Show двух полиэдров иллюстрирует рис. 14.75.
Рис. 14.75. Вывод функцией Show двух полиэдров
Для вывода полиэдров служит также ряд описанных ниже функций. Так, для построения звездчатых форм полиэдров предназначена функция Stellate:
Show [Stellate [Polyhedron [polyname] ] — построение звездчатых форм полиэдров; Show[Stellate[Polyhedron[polyname], ratio] — построение звездчатых форм полиэдров с заданным отношением радиусов описанной и вписанной сфер ratio.Рисунок 14.76 показывает построение звездообразного (или игольчатого) полиэдра. Представленная фигура напоминает некоторых морских животных — ежей и звезд.
Рис. 14.76. Построение звездчатой формы полиэдра
Полиэдры, применяемые в геодезии, можно получить с помощью следующей функции:
Show [Geodesate [Polyhedron [polyname], n] — построение полиэдра с вершинами, лежащими на сфере, представляющего собой результат я-кратно-го разбиения на треугольники граней полиэдра polyname; Show [Geodesate [Polyhedron [polyname] , n, {x, y, z}, radius] —построение полиэдра с вершинами, лежащими на сфере с заданным положением центра {x,y,z} и радиусом radius, представляющего собой результат п-кратного разбиения на треугольники граней полиэдра polyname.Рисунок 14.77 показывает применение этой функции.
В подпакете PlotField имеются функции, позволяющие строить стрелками графики полей:
PlotVectorField[ {fx, f у}, {x, xmin, xmax), {y, ymin, ymax} ] —строит плоскость из векторов (стрелок), ограниченную пределами изменения х и у; PlotGradientField[f,{x,xmin,xmax},{у,ymin,ymax}] — строит плоскость из векторов (стрелок) градиента функции f, ограниченную пределами изменения х и у; PlotHamiltonianField[f,{x,xmin,xmax},{у,ymin,ymax}] — строит плоскость из векторов (стрелок) гамильтониана функции f, ограниченную пределами изменения х и у; PlotPolyaField[f, {х,xmin,xmax}, {у, ymin, ymax} ] — представляет график комплексной функции f(x, у).Рисунок 14.65 показывает применение функции PlotVectorField для построения векторного поля согласно параметрически заданной на плоскости функции.
Риc. 14.65. График векторного поля на плоскости
Еще один пример (рис. 14.66), иллюстрирует построение градиента поля с помощью функции PlotGradientField. Применение функции PlotHamiltonianField демонстрирует рис. 14.67.
Указанные функции имеют множество опций. Отметим основные из них (в качестве значений приведены значения по умолчанию):
ScaleFactor->Automatic — устанавливает размер векторов (стрелок); ScaleFunction->None — устанавливает функцию, вычисляющую размер стрелок; MaxArrowLenght->None — устанавливает ограничение длины стрелок; ColorFunction->None — задает функцию цвета; PlotPoints->15 — задает число точек по координатам для построения стрелок.
Рис. 14.66. График градиента поля
Риc. 14.67. Пример применения функции PlotHamiltonianField
Пример построения сложного графика с применением шестнадцати узловых точек по каждому направлению и использованием опции ScaleFunction показан на рис. 14.68.
Работу функции PlotPolyaField поясняет рис. 14.69. Обратите внимание на то, что функция в данном случае комплексная.
Рис. 14.68. Пример графика поля с применением нескольких опций
Рис. 14.69. Пример графика поля для комплексной функции
Для представления векторных полей в пространстве служат функции подпакета PlotField3D:
PlotVectorField3D[{fx,fy,fz},{x,xmin,xmax},{y,ymin, ymax}, {z, zmin, zmax} ] — строит график векторного поля параметрически заданной трехмерной фигуры; PlotGradientField3D[{fx,fy,fz},{x,xmin,xmax},{y,ymin,ymax}, {z, zmin, zmax} ] — строит график градиента векторного поля параметрически заданной трехмерной фигуры.Эти функции подобны описанным в предшествующем разделе, но используются для построения векторных полей не на плоскости, а в пространстве. Рисунок 14.71 показывает пример такого построения.
Как видно из рис. 14.71, векторное поле строится отрезками прямых, а не стрелками. Последнее связано с тем, что по умолчанию задана опция VectorHeads-> False. Изменив ее на VectorHeads->True, можно получить представление векторного поля направленными стрелками. Кроме того, используя опцию Plot-Points->n, можно получить заданное число стрелок п по всем направлениям графика. Все это учтено на графике, представленном на рис. 14.72.
Рис. 14.71. Пример построения графика векторного поля в пространстве отрезками прямых
Рис. 14.72. Пример построения графика градиента поля направленными стрелками
В подпакете PlotFieldSD имеется еще одна функция:
ListPlotVectorField3D[{ {ptl, vectl}, {pt2, vect2 },...} ] -строит график векторного поля в пространстве по данным векторов vecti, расположенных в точках pti.Рисунок 14.73 поясняет применение этой функции.
Рис. 14.73. Пример построения графика векторного поля функцией ListPlotVectorReld3D
Нетрудно заметить, что при большом числе векторов в пространстве графики этого типа теряют наглядность. Рекомендуется тщательно отлаживать их, используя весь набор опций (как его получить, описывалось неоднократно).
Подпакет Spline вместе с уже описанным подпакетом NumericalMath'SplineFit' (сплайновая регрессия) обеспечивает представление данных с помощью сплайна. В подпакете Spline определена единственная функция Spline [points, type], которая создает графический примитив, представляющий сплайн-кривую типа type (Cubic, Bezier или CompoziteBezier — см. описание подпакета NumericalMath'SplineFit').
Среди ее опций важно отметить следующие (как и ранее, приведены значения, используемые по умолчанию): SplineDots->None, SplinePoints->25, Max-Bend->10.0 и SplineDivision->20.0.
Рисунок 14.85 показывает задание массива из пяти точек на плоскости и соединение их отрезками прямых и кубическими сплайн-функциями. Хорошо видна аналогия сплайна с гибкой линейкой.
Сплайн-функции в данном случае применяются в порядке задания точек в списке pts. В этом случае возможно создание замкнутых линий (рис. 14.85 является наглядным примером этого).
Следует отметить, что хотя сплайн-аппроксимация дает хорошие результаты при умеренном числе точек, при малом их числе и неудачном выборе типа сплайнов результат может оказаться неудовлетворительным. Рисунок 14.86 иллюстрирует такую ситуацию.
Рисунок 14.87 показывает возможность построения сплайн-функции вместе с точками, через которые она проходит.
Рис. 14.85. Пример интерполяции пяти точек отрезками прямой и сплайнами
Рис. 14.86. Пример срыва сплайн-интерполяции точек
Рис. 14.87. Построение исходных точек и проходящей через них сплайн-функции
Создание поверхностей вращения — SurfaceOfRevolution
Одна из задач компьютерной графики — создание поверхностей вращения. Средства для этого дает подпакет SurfaceOfRevolution. Они представлены следующими функциями:
SurfaceOfRevolution [f, {x, xmin, xmax} ] — строит поверхность, образованную вращением кривой, описанной функцией f, при изменении х от xmin до xmax, в плоскости ху; SurfaceOfRevolution [{fx, f у}, {t, tmin, tmax} ] — строит поверхность, образованную вращением кривой, описываемой параметрически заданной на плоскости функцией {f x, f у}, в плоскости xz при изменении параметра t от tmin до tmax; SurfaceOfRevolution[{fx,fy,fz},{t,tmin,tmax}] — строит поверхность, образованную вращением кривой, описываемой параметрически заданной в пространстве функцией {fx, fy, fz}, в плоскости xz при изменении параметра t от tmin до tmax; SurfaceOfRevolution[f,{{x,xmin,xmax},{theta,thetamin,thetamax}}] — строит поверхность вращения кривой, описываемой функцией f, при угле theta, меняющимся от thetamin до thetamax.
Рисунок 14.88 дает простой пример построения поверхности, образованной линией cos(x) при изменении х от 0 до 4л, вращающейся вокруг оси xz.
Построение задано функцией SurfaceOfRevolution [f, {x, xmin, xmax} ]. В этом случае линия вращается в пределах угла от 0 до 2-я, поэтому поверхность получается круговой.
Анимация графиков различного типа Использование цвета Построение стрелок Графики комплекснозначных функций Построение объемных контурных графиков Построение графиков с окраской внутренних областей Графики специальных типов Специальные типы трехмерных графиков Построение графиков неявных функций Вывод обозначений кривых Построение трехмерных параметрических графиков Представление полей на плоскости и в пространстве Трехмерные графические объекты
Пакет расширения Graphics дает множество средств для построения графиков самого изысканного вида. Он является прекрасным инструментом для визуализации задач, допускающих представление результатов в графической форме. Объем материала данного пакета намного выходит за пределы одного урока, поскольку предполагает отбор нужного материала для изучения того или иного вида графики.
Анимация графиков различного типа — Animation
Фактически, техника анимации (оживления) графиков уже была описана. Напомним, что она сводится к подготовке отдельных кадров анимационного рисунка, которые специфицируются особой изменяющейся переменной t. Это не обязательно время, возможно, что t задает размеры изображения, его положение или иную характеристику. Естественно, что имя переменной можно выбирать произвольно.
Подпакет Animation подключается автоматически и в ряде случаев не требует загрузки (хотя на всякий случай его лучше загрузить при использовании средств анимации). Пакет задает две важнейшие функции:
Animate [grcom, {t, tmin, tmax, dt] — задает построение серии графических объектов grcom при изменении параметра t от tmin до tmax с шагом dt; ShowAnimation [ {p1,p2, р3,...} ] — дает анимацию последовательным воспроизведением ранее подготовленных объектов p1, р2, рЗ, ...Рисунок 14.1 показывает пример подготовки к анимации простого графика — функции n*Sin [х] /х при n, меняющемся от 0.1 до 1 с шагом 0.1. Таким образом демонстрируется изменение данной функции по высоте (амплитуде).
При задании анимации есть небольшая проблема — Mathematica автоматически меняет масштаб с тем, чтобы график был наиболее представительным.
Но для анимации это недопустимо, поэтому опцией PlotRange задан фиксированный масштаб для всех кадров анимации. Выполнив показанные на рис. 14.1 команды, можно наблюдать построение всех кадров — для n = 0.1,0.2,0.3,..., 1. 0. Первые три кадра анимации видны на рис. 14.1 снизу.
Теперь для наблюдения анимации достаточно двойным щелчком выделить первый рисунок. Будет видна быстрая смена кадров. Остановить анимацию и снова запустить ее можно нажатием клавиш Ctrl+Y. При выполнении анимации внизу окна документа появляются кнопки анимационного проигрывателя (рис. 14.2).
Нередко желательно придать трехмерным объектам определенную форму, например кольца или бублика. Некоторые возможности для этого дают функции под-пакета Shapes. Основной из них является функция Show [Graphics3D [shape] ], которая производит отображение формы со спецификацией shape.
С ней могут использоваться графические примитивы:
Cone [r, h, n] — конус с основанием радиуса r и высотой h на основе n-сто-роннего полигона; Cylinder [r, h, n] — цилиндр радиуса r и высотой h на основе и-стороннего полигона; Torus[rl,r2,n,m] — объемное кольцо с внешним и внутренним радиусами rl и г 2 и числом сторон каркаса n и m; Sphere [r, n,m] — сфера радиуса г, составленная из многоугольников с параметрами n и m и числом сторон п(т - 2) + 2; MoebiusStrip [rl, r2, n] — кольцо Мебиуса с радиусами rl и r2, построенное на основе полигона с 2n сторонами; Helix[r,h,m,n] — плоская спираль радиусом г и высотой h c m витками на основе поверхности, разбитой на nxm четырехугольников; DoubleHelix[r,h,m,n] — плоская двойная спираль радиусом r и высотой h с m витками на основе поверхности, разбитой на nxm четырехугольников.Возможно указание фигур без параметров. Это означает, что они выбираются по умолчанию следующими:
Соnе[1, 1, 20]
Cylinder[1, 1, 20]
Helix[l, 0.5, 2, 20]
DoubleHelix[l, 0.5, 2, 20]
MoebiusStrip[1, 0.5, 20]
Sphere[l, 20, 15]
Torus[l, 0.5, 20, 10]
На рис. 14.80 показан пример построения фигуры DoubleHelix без указания ее параметров с помощью функций Show и GraphicsSD.
Рисунок 14.81 показывает построение другой фигуры — кольца Мебиуса с указанием параметров фигуры. Обратите внимание на то, что в обоих случаях автоматически обеспечивается функциональная окраска фигур, облегчающая их восприятие.
Рис. 14.80. Пример построения фигуры без указания параметров
Рис. 14.81. Построение кольца Мебиуса
Для преобразования графических объектов в подпакете Shapes имеются следующие функции:
RotateShape [g,phi, theta,psi] — поворот графического объекта на углы phi, theta и psi; TranslateShape [g, {х, у, z} ] — сдвиг графического объекта на расстояния {х,у, z}; Af fineShape [g, {scalel, svale2, scaleS} ] — умножение всех координат объекта g на указанные множители.
Рисунок 14.82 иллюстрирует осуществление вращения для кольца Мебиуса.
Эффект вращения хорошо заметен, если сравнить положения фигуры на рис. 14.81 и 14.82.
В подпакете Graphics3D, загружаемом командой
<<Graphics`Graphics 3D`
имеется ряд программ для простого построения трехмерных графиков. Они описаны ниже с примерами:
BarChart3D[ {{ zll, z!2,...},{z21, z22 },...} ] — строит трехмерную столбцовую диаграмму по наборам данных высот столбцов z 11 , z п , ... (рис. 14.37); BarChart3D[ {{{zll, stylell}, {z21, style21},...} ] — строит трехмерную столбцовую диаграмму по наборам данных высот столбцов z u , z vl , ... с указанием спецификации стиля для каждого столбца.Нетрудно заметить, что функция BarChartSD автоматически задает стиль и цвет построения столбцов диаграммы. Эта функция имеет массу опций, с помощью которых можно менять вид диаграммы (рис. 14.38). Как обычно, перечень опций можно вывести с помощью команды Options [BarChart3D].
Рис. 14.37. Построение трехмерной столбцовой диаграммы
Рис. 14.38. Вариант диаграммы с черно-белой раскраской
Scatter Plot 3D [{ {x1, yl, zl}, {х2, у2, z2 },...}] — строит точки в пространстве по их заданным координатам. При использовании опции Plot-Joined->True точки соединяются отрезками прямых, и строится линия в пространстве (рис. 14.39).
Рис. 14.39. Построение пространственной кривой по точкам
Обратите внимание на то, что список точек формируется с помощью функции Table. Это возможно, когда построение делается для аналитически заданной функции, описывающей трехмерную поверхность.
ListSurfacePlot3D[{ { {x11, y11, zll}, {x12, y12, z13},...} } }] - строит трехмерную поверхность по координатам ее точек-(рис. 14.40).
Рис. 14.40. Построение трехмерной поверхности по координатам ее точек
Здесь список координат точек также задаются функцией Table. Выбором диапазона изменения значений переменных х, у и z можно добиться различных эффектов, например изображения только части сферы (на рис. 14.40, к примеру, показано построение полусферы).
Следующие функции дают построения с проекциями:
ShadowPlot3D [f, {х, xmin, xmax}, {у, ymin, углах} ] — строит график поверхности f(z, y) с ее проекцией на опорную плоскость (рис. 14.41); ListShadowPlot3D[{{ {xll, yll, zll}, {x!2, y!2, z!3},...}} }] -строит график поверхности z(x, у) с ее проекцией на опорную плоскость по координатам точек поверхности.
При построении графиков в полярной системе координат полезно использовать цвет, зависящий от фазы комплексного числа. Для этого в подпакете ArgColor служат следующие функции:
ArgColor [z] — дает цвет, определяемый фазой комплексного аргумента z; ArgShade [ z ] — дает уровень серого цвета, определяемый фазой комплексного аргумента z.
Рис. 14.8. Построение кругов, расположенных по окружности, с разной степенью окраски серыми полутонами
Действие функции ArgShade иллюстрирует показанный на рис. 14.8 пример. Он строит 12 расположенных по окружности кругов с разной степенью окраски (от белого до черного) с помощью функции ArgShade.
Заменив в этом программном модуле функцию ArgShade на ArgColor, вы сможете наблюдать окраску кругов разными цветами.
Установка цветовой системы — Colors
Обычно цвета задаются в цветовой системе RGB (Red-Green-Blue). В подпакете Colors содержатся функции установки цвета, заданного в других известных цветовых системах:
CMYColor [с, m, у] — установка цвета по системе CMY (Cyan-Magenta-Yellow); YIQColor[y,i,q] — установка цвета по системе YIQ (используется в телевизионном стандарте NTSC); HLSColor [h, I, s ] — установка цвета по системе HLS (Hue-Lightness-Saturation); AllColors — переменная-функция, выводящая список установленных цветов.Примеры применения функций даны ниже:
<<Graphics" Colors"
RGBColor[0.5, -O.I, 0.2]
RGBColor[0.53, 0.4, 0.957]
RGBColor[0.5, -0.1, 0.2]
RGBColor[0.53, 0.4, 0.957]
Orange
RGBColor[l., 0.5, 0.]
Кроме этого в подпакете имеется внушительная таблица англоязычных наименований разных цветов и цветовых оттенков — она выводится функцией AllColors. Их можно использовать для задания в качестве аргумента у функций, управляющих цветами. Например, шоколадный цвет можно задать следующим образом:
Chocolate
RGBColor[0.823496, 0.411802, 0.117603]
Построение стрелок — Arrow
Подпакет Arrow служит для построения стрелок на двумерных графиках (или самих по себе).
Для этого предназначена функция Arrow [start, finish, opts], которая строит стрелку по координатам ее начала start и конца finish. Рекомендуется просмотреть список опций этой функции.
Рисунок 14.9 показывает построение множества стрелок, острия которых находятся на спирали. Для этого координаты стрелок задаются в параметрическом виде.
Наглядность графиков, особенно имеющих несколько кривых, повышается при выводе обозначений кривых — так называемой легенды. В подпакете Legend для этого имеются следующие средства:
PlotLegend->{textl,text2,...} — опция для функции Plot, устанавливающая легенду в виде последовательных текстовых надписей (рис. 14.49); ShowLegend [graphic, legendl, Iegend2,...] — добавляет легенду в имеющийся график graphic; {{{boxl, textl},...}, opts} — спецификация легенды с цветными примитивами или графиками для рамок boxi с текстами texti; {colorfunction, n, ninstring,maxstring, opts} — спецификация легенды с n рамками, указанием цветовой спецификации и строк, размещаемых в рамках.
Рис. 14.49. Пример построения графиков двух функций с выводом легенды
Обратите внимание на то, что среди многочисленных опций функции Plot имеется ряд, относящихся к параметрам легенды: LegendPosition-> {-1,1} — установка позиции легенды, LegendSize->Automatic — установка размера легенды, LegendShadow->Automatic — установка тени для рамки легенды, Legend-Orientation->Vertical — ориентация рамки легенды, LegendLabel->None — заголовок легенды и LegendTextDirection->Automatic — направление текста. С помощью этих опций можно существенно влиять на вид легенды.
На рис. 14.50 показано построение графика плотности с применением функции ShowLegend для вывода легенды в виде таблицы плотностей. Обратите внимание на применение опции LegendPosition для вывода легенды справа от графика.
Рис. 14.50. Построение графика плотности с легендой
Для иллюстрации эффективности применения опций функции Plot, влияющих на вид легенды, рассмотрим еще один пример, представленный на рис. 14.51.
Рис. 14.51. Пример построения графика двух функций с легендой и установкой ряда ее опций
В заключение отметим еще две функции подпакета Legend:
Legend [legendargs, opts] — создает графический примитив для задания индивидуальной легенды; ShadowBox [pos, size, opts] — создает графический примитив в виде рамки для легенды.К примеру, показанный ниже вызов функции ShadowBox создает графический примитив в виде пустой рамки с тенью:
ShadowBox[{0, 0}, {1, 1},ShadowBackground -> GrayLevel[.8]]
{GrayLevel[0.8], Rectangle[{0.1, -0.1), {1.1, 0.9}], GrayLevel[l], Rectangle[{0, 0}, {1, 1}], Thickness[0.001], GrayLevel[0], Line[{{0, 0), {1, 0), {1, 1}, {0, 1), {0, 0}}]} Для просмотра полученной рамки можно использовать команду Show[Graphics[%]]
Применение функции Graphics здесь связано с тем, что ShadowBox порождает графический примитив, а не законченный графический объект.