Урок 14. Расширения графики— пакет Graphics
Расширения графики— пакет Graphics
Пакет расширения Graphics дает множество средств для построения графиков самого изысканного вида. Он является прекрасным инструментом для визуализации задач, допускающих представление результатов в графической форме. Объем материала данного пакета намного выходит за пределы одного урока, поскольку предполагает отбор нужного материала для изучения того или иного вида графики.
Анимация графиков различного типа — Animation
Фактически, техника анимации (оживления) графиков уже была описана. Напомним, что она сводится к подготовке отдельных кадров анимационного рисунка, которые специфицируются особой изменяющейся переменной t. Это не обязательно время, возможно, что t задает размеры изображения, его положение или иную характеристику. Естественно, что имя переменной можно выбирать произвольно.
Подпакет Animation подключается автоматически и в ряде случаев не требует загрузки (хотя на всякий случай его лучше загрузить при использовании средств анимации). Пакет задает две важнейшие функции:
Рисунок 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).
Рис. 14.1. Демонстрация графика функции n*Sin[x]/x, меняющейся по высоте
Рис. 14.2. Стоп-кадр анимации графика функции n*Sin[x]/x
Проигрыватель имеет мнемонику кнопок, подобную мнемонике бытовых проигрывателей видеодисков. Есть кнопки пуска и остановки, реверса проигрывания, замедления и ускорения проигрывания. Последние особенно важны, поскольку на современных компьютерах анимация рисунков происходит слишком быстро и лишь ее замедление позволяет обеспечить хорошую визуализацию данного процесса. Число кадров анимации не должно быть меньше 8-10, иначе вместо плавного движения будут видны резкие скачки изображения.
Следующий пример иллюстрирует анимацию графика с параметрическим заданием функции:
ShowAnimation[Table[ Graphics[Line[{{0 0},
{Cos[t], Sin[t]}}], PlotRange -> {{-1, 1}, {-1, 1}}],
{t, 0, 2Pi, Pi/8}]]
Запустив этот фрагмент программы, вы увидите построение отрезка прямой, вращающегося вокруг одного неподвижного конца. Здесь для анимации вначале строится набор кадров, а затем используется функция ShowAnimation.
Аналогичным образом осуществляется анимация трехмерных графиков поверхностей или фигур. Рисунок 14.3 показывает начало подготовки к анимации сложной поверхности, описываемой функцией Бесселя, аргумент которой меняется от кадра к кадру.
Рис. 14.3. Подготовка к анимации сложной трехмерной поверхности
Обратите внимание на применение функций Show и Graph!csArray для построения на одном графике сразу всех кадров (фаз) анимации. Порой этот набор кадров даже важней, чем анимация, длящаяся доли секунд или несколько секунд.
Рисунок 14.4 иллюстрирует следующий шаг анимации — исполнение функции ShowAnimation. Как и для предшествующих примеров, она строит последовательно все рисунки — кадры анимации.
Рис. 14.4. Подготовка кадров анимации сложной трехмерной поверхности
Запуск анимации выполняется, как уже было описано (рис. 14.5). При этом наблюдаются характерные колебания поверхности — пик ее проваливается вниз, образуя впадину, а затем снова выходит вверх. Внизу графика видны кнопки анимационного проигрывателя, работа с которым также была описана выше.
Для упрощения анимации сложных графиков в подпакете Animations задан ряд специализированных функций, которые приведены в приложении. Рисунок 14.6 поясняет задание анимации и построение начального кадра для параметрически заданной раскручивающейся спирали — используется функция MovieParametricPlot. Запустив начальный кадр, можно наблюдать раскручивание спирали.
Рис. 14.5. Один из стоп-кадров анимации сложной трехмерной поверхности
Рис. 14.6. Построение раскручивающейся спирали
Еще один пример построения сложной вращающейся в пространстве фигуры, напоминающей гантель, показан на рис. 14.7. В данном случае трехмерная фигура задана в параметрической форме, а для последующей ее анимации используется функция SpinShow.
Последние примеры даны в упрощенной форме — без окна с проигрывателем. Разумеется, кнопки проигрывателя появляются при реальном пуске анимации.
Рис. 14.7. Построение вращающейся в пространстве фигуры — «гантели»
Установка аргумента цвета — ArgColor
При построении графиков в полярной системе координат полезно использовать цвет, зависящий от фазы комплексного числа. Для этого в подпакете ArgColor служат следующие функции:
Рис. 14.8. Построение кругов, расположенных по окружности, с разной степенью окраски серыми полутонами
Действие функции ArgShade иллюстрирует показанный на рис. 14.8 пример. Он строит 12 расположенных по окружности кругов с разной степенью окраски (от белого до черного) с помощью функции ArgShade.
Заменив в этом программном модуле функцию ArgShade на ArgColor, вы сможете наблюдать окраску кругов разными цветами.
Установка цветовой системы — Colors
Обычно цвета задаются в цветовой системе RGB (Red-Green-Blue). В подпакете Colors содержатся функции установки цвета, заданного в других известных цветовых системах:
Примеры применения функций даны ниже:
<<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 [start, finish, opts], которая строит стрелку по координатам ее начала start и конца finish. Рекомендуется просмотреть список опций этой функции.
Рисунок 14.9 показывает построение множества стрелок, острия которых находятся на спирали. Для этого координаты стрелок задаются в параметрическом виде.
Рис. 14.9. Построение множества стрелок с остриями, расположенными по спирали
Другой пример, представленный на рис. 14.10, иллюстрирует построение двуна-равленной стрелки, опирающейся на иглу, стоящую на кресте, — получается своеобразная модель компаса.
Рис. 14.10. Построение двунаправленной стрелки, опирающейся на иглу
Построение стрелок оживляет многие типы графиков. Их можно использовать, к примеру, для указания особых точек на графиках.
Графики комплексных функций — ComplexMap
Подпакет ComplexMap задает функции для построения графиков комплексных функций комплексной переменной путем демонстрации преобразования координатных линий:
Действие этих довольно простых функций иллюстрирует рис. 14.11.
Рис. 14.11. Построение неискаженной декартовой координатной сетки (сверху) и полярной координатной сетки, искаженной воздействием функции Sqrt (снизу)
Построение объемных контурных графиков — ContourPlot3D
В подпакете ContourPlotSD заданы две функции, которые строят контурные объемные графики. Напоминаем, что функции ядра ContourPlot и ListContourPlot строят только двумерные графики этого типа. Для построения объемных контурных графиков надо использовать следующие функции:
На рис. 14.12 показано построение сферы с отверстием с помощью первой из этих функций.
Обратите внимание на то, что никаких усилий по созданию в сфере отверстия не требуется, Оно получено просто усечением ограничительного «ящика», в котором размещается сфера. Для этого пределы по оси у заданы как {-1.2,2}, тогда как по остальным осям используются пределы {-2,2}.
Рис. 14.12. Построение сферы с отверстием
Интересные возможности открывает опция Contours, которая позволяет как бы раздвинуть в пространстве части трехмерной поверхности. Рисунок 14.13 демонстрирует ее действие.
Риc. 14.13. Построение частей сферы в пространстве
Вторая функция— ListContourPlot3D — позволяет строить ряд фигур или поверхностей в пространстве. Пример такого построения дан на рис. 14.14. Масштабы осей подобраны так, чтобы фигура была несколько обрезана справа, что создает изображение отверстия во внутренней яйцеобразной фигуре.
Рис. 14.14. Построение яйцо, вложенного в параболы
Как видно из этих примеров, применение описанных функций позволяет упростить построение трехмерных поверхностей и добиться интересных эффектов.
Построение графиков с окраской внутренних областей — FilledPlot
Многие графики сильно выигрывают при их построении с закраской. Например, чтобы проиллюстрировать значение определенного интеграла от какой-то функции f(x), достаточно просто закрасить ее график в диапазоне изменения х от нижнего предела интегрирования а до верхнего b. Для построения подобных графиков в подпакете FilledPlot имеется ряд полезных функций.
Начнем их описание с основных:
Поясним применение этих функций рядом примеров. Перед этим надо не забыть загрузить подпакет командой
<< Graphics`FilledPlot`
На рис. 14.15 показано построение смещенной по оси у экспоненты с закраской области между линией экспоненты и горизонтальной осью х.
Рис. 14.15. Построение экспоненты с закраской областей между ней и осью абсцисс
Действие функции FilledPlot при построении графиков трех функций показано на рис. 14.16. Здесь использована опция Curves->Front, выводящая построение кривых на первый план, благодаря чему отчетливо видны разделительные линии перекрывающихся областей.
Рис. 14.16. Построение трех кривых с закраской областей между ними и осью абсцисс
Еще один пример построения графиков трех фигур показан на рис. 14.17. Здесь для закраски областей между фигурами и осью абсцисс использована опция Fills и директива GrayLevel (окраска серым цветом заданной плотности).
Рисунок 14.18 иллюстрирует закраску областей совместного применения двух функций, одна из которых — корень квадратный из х - 1 — определена только для И > 1. Именно эта область и закрашена.
Рис. 14.17. Построение трех кривых с закраской серым цветом
Рис. 14.18. Пример закраски области совместного действия двух функций
Имеется также ряд специальных функций для построения кривых с окраской образуемых ими областей:
Применение функции FilledListPlot показано на рис. 14.19.
Иногда важное значение может иметь опция AxesFront->Значение. При значении этой опции False область закраски закрывает соответствующую часть осей, а при значении True оси выводятся поверх закраски. Сам по себе вывод осей задастся опцией Axes->True. При Axes->False они вообще не выводятся. Рисунок 14.20 поясняет вывод осей и их построение поверх закращениой области.
В данном случае область окраски ограничена треугольником, который строится как полигон. Если установить опцию AxesFront->False, то часть осей (внутри треугольника) будет не видна.
Рис. 14.19. Пример применения функции FilledListPlot
Рис. 14.20. Пример вывода осей поверх закрашенной области
Графики специальных типов — Graphics
Подпакет Graphics задает ряд функций для построения специальных графиков, например с логарифмическими и полулогарифмическими масштабами, с нанесенными на кривые точками, графиков в виде гистограмм и т. д. Такие графики широко применяются для визуализации не только математических и физических, но также финансовых и экономических расчетов. К примеру, функция Log-Plot [f, {х,xmin,xmax}] строит линейно-логарифмический график/(x) при изменении х от xmin до xmax. Список таких функций дан в приложении.
Ввиду очевидности этих функций ограничимся одним примером — построением экспоненциальной функции в полулогарифмическом масштабе (по оси у масштаб логарифмический, а по оси х~ линейный). Как видно из рис. 14.21, график вырождается в прямую линию.
Для построения графиков в полярной системе координат заданы следующие функции:
Рис. 14.21. Построение графика экспоненты в полулогарифмическом масштабе
Построение графика трех функций в полярной системе координат с помощью функции PolarPlot представлено на рис. 14.22.
Рис. 14.22. Построение графиков трех функций в полярной системе координат
В ряде случаев удобно представление данных в виде столбцовых и круговых диаграмм. Для построения столбцовых диаграмм служат функции, описанные ниже:
Здесь любопытно отметить, что списки данных могут иметь разную длину. Число столбцов задается большим списком. Отсутствующие данные у спис-
ков меньшей длины считаются нулевыми, и для них столбцы не строятся. Данные, представленные отрицательными числами, строятся как столбцы, обращенные вниз.
Рис. 14.23. Построение столбцовых диаграмм для двух списков данных с расположением столбцов друг рядом с другом
Рис. 14.24. Построение столбцовых диаграмм со столбцами, расположенными друг над другом
В этой столбцовой диаграмме вначале строятся столбцы, представляющие данные для первого списка, над ними надстраиваются столбцы новых данных, так что общая высота столбцов пропорциональна сумме численных значений i-x элементов списков.
Здесь построение идет так же, как в предыдущем случае. Однако высоты столбцов указываются в процентах и нормируются — за 100 % принимается максимальная высота столбцов выше горизонтальной оси, а за -100 % — максимальная высота столбца ниже горизонтальной оси.
Рис. 14.25. Построение столбцовых диаграмм с процентным отсчетом
Рис. 14.26. Построение столбцовых диаграмм с произвольной шириной столбцов
В этом случае имеется возможность указать в списках данных позицию по оси х, высоту столбца и его ширину. Ширина задается в относительных единицах: при ширине, равной 1, столбцы сливаются (но выделяются цветом), при величине меньше 1 они разделяются пустыми промежутками, а при величине, большей 1, столбцы перекрываются.
Все указанные функции имеют опции, существенно влияющие на вид диаграмм. Рекомендуется просмотреть их с помощью функции Options. Ограничимся тремя наглядными примерами на применение опций. Рисунок 14.27 показывает построение столбцовой диаграммы с горизонтальным расположением столбцов и произвольным выбором цвета для каждого набора.
На рис. 14.28 построена диаграмма для одного комплекта данных. Но выбор цвета каждого из столбцов задается с помощью условного оператора. На рис. 14.29 показан наиболее сложный пример построения столбцовых диаграмм. Наряду с цветовыми эффектами задается обвод пунктирной линией столбцов одного из комплектов данных и, главное, — вывод надписей (названий месяцев) под наборами столбцов. Обратите внимание на то, что надписи могут быть на русском языке.
Рис. 14.27. Построение столбцовой диаграммы с горизонтально расположенными столбцами и произвольным выбором цвета для каждого набора данных
Рис. 14.28. Столбцовая диаграмма с выбором цвета столбцов по условию
Рис. 14.29. Комплексное построение столбцовых диаграмм
Следующая функция позволяет стоить круговые диаграммы. Они наиболее удобны, когда оцениваются относительные величины, при этом сумма данных соответствует площади круга:
Рис. 14.30. Построение набора круговых диаграмм Здесь использована также одна из следующих функций:
На рис. 14.31 показано построение круговой диаграммы с применением окраски чередующихся секторов оттенками серого цвета.
Рис. 14.31. Построение круговой диаграммы с раскраской чередующихся секторов оттенками серого цвета
Еще одну возможность разнообразить круговые диаграммы иллюстрирует рис. 14.32. Здесь показано, что в секторы можно заносить небольшие надписи, например имена людей, даты и т. д.
Рис. 14.32. Построение круговой диаграммы с надписями внутри секторов
Функция DisplayTogether позволяет объединять графики разного типа. На рис. 14.33 показано построение графика экспериментальных точек и линий линейной и параболической регрессии.
Рис. 14.33. Совместное построение исходных точек данных и линий линейной и параболической регрессии
Применение функции DisplayTogetherArray для построения трех круговых диаграмм с номерами секторов показано на рис. 14.34. Это те же диаграммы, что и на рис. 14.30, но аргумент функции DisplayTogetherArray на сей раз представляет собой не одномерный, а двумерный массив (в первой строке два графика, во второй — один).
Рис. 14.34. Построение трех круговых диаграмм с номерами секторов
Иногда нужно использовать в качестве точек графика цифры. Это реализует следующая функция, имеющая три формы:
Рис. 14.35. Построение графика сточками, представленными цифрами
Еще одна функция, также имеющая три формы, дает тот же результат, но дополнительно строит и сами точки:
LabelListPlot [ {yl, у2,...} ] LabelListPlot [{ {xl,yl}, {х2,у2 },...}] LabelListPlot [{ {x1, y1, expr1}, {х2, у2, expr2 },...}]
Наконец, есть еще одна функция:
Рис. 14.36. График с точками и зонами ошибок
Таким образом, подпакет Graphics обеспечивает построение наиболее распространенных типов графиков, используемых в научно-технической и финансово-экономической литературе.
Специальные типы трехмерных графиков— Graphics3D
В подпакете Graphics3D, загружаемом командой
<<Graphics`Graphics 3D`
имеется ряд программ для простого построения трехмерных графиков. Они описаны ниже с примерами:
Нетрудно заметить, что функция BarChartSD автоматически задает стиль и цвет построения столбцов диаграммы. Эта функция имеет массу опций, с помощью которых можно менять вид диаграммы (рис. 14.38). Как обычно, перечень опций можно вывести с помощью команды Options [BarChart3D].
Рис. 14.37. Построение трехмерной столбцовой диаграммы
Рис. 14.38. Вариант диаграммы с черно-белой раскраской
Рис. 14.39. Построение пространственной кривой по точкам
Обратите внимание на то, что список точек формируется с помощью функции Table. Это возможно, когда построение делается для аналитически заданной функции, описывающей трехмерную поверхность.
Рис. 14.40. Построение трехмерной поверхности по координатам ее точек
Здесь список координат точек также задаются функцией Table. Выбором диапазона изменения значений переменных х, у и z можно добиться различных эффектов, например изображения только части сферы (на рис. 14.40, к примеру, показано построение полусферы).
Следующие функции дают построения с проекциями:
Рис. 14.41. Построение графика трехмерной поверхности и ее проекции на опорную плоскость
Еще один простой и эффектный пример применения функции ShadowPlot3D показан на рис. 14.42. Здесь изображение поверхности — пика — проецируется на верхнюю плоскость, что дает наглядное представление о построенной фигуре.
Рис. 14.42. Построение фигуры — пика — и ее проекции на верхнюю плоскость
С помощью функции Shadow [go], где до — графический объект, представляющий трехмерную фигуру, можно построить и более сложные рисунки — например, график объемной фигуры и сразу всех трех ее проекций на взаимно перпендикулярные плоскости. Такое построение иллюстрируется документом, показанным на рис. 14.43.
С функцией Shadow можно использовать различные опции. Отметим наиболее существенные — XShadow, YShadow и ZShadow. Например, задав Zshadow-> False, можно удалить одну из проекций, плоскость которой перпендикулярна оси z.
Для получения проекций на заданную плоскость, расположенную в пространстве, служат следующие функции:
В конце подпакета определена функция StackGraphics [ {gl, g2,...}], которая строит двумерные графические объекты, располагая их каскадно, то есть разнося в пространстве по третьей координате (рис. 14.45).
Рис. 14.43. Построение объемной фигуры и всех трех ее проекций
Рис. 14.44. Пример построения проекции но заданной плоскости
Обратите внимание на то, что здесь каждая синусоида расположена на своей плоскости.
Рис. 14.45. Пример построения трех синусоид, расположенных каскадно
Построение графиков неявных функций — ImplicitPlot
Подпакет ImplicitPlot задает три варианта функции для построения графиков неявно заданных функций:
Примером может быть функция х 2 + k у 2 = r 2 , задающая построение эллипса. На рис. 14.46 показано такое построение.
Вторая форма задания функции иллюстрируется рис. 14.47. Здесь строится сразу целое семейство эллипсов.
И, наконец, на рис. 14.48 показано применение третьей формы функции ImplicitPlot с использованием опции PlotStyle и директивы Dashing.
Рис. 14.46. Построение эллипса по неявному выражению
Рис. 14.47. Построение семейства эллипсов по их уравнениям
Рис. 14.48. Пример применения функции ImplicitPlot с опцией PlotStyle
Вывод обозначений кривых— Legend
Наглядность графиков, особенно имеющих несколько кривых, повышается при выводе обозначений кривых — так называемой легенды. В подпакете Legend для этого имеются следующие средства:
Рис. 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:
К примеру, показанный ниже вызов функции 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 порождает графический примитив, а не законченный графический объект.
Построение графиков с множеством объектов — MultipleListPlot
В подпакете MultipleListPlot содержится расширенный вариант встроенной функции ListPlot:
Рис. 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. Построение точек с двумерными зонами погрешности
Рисунок 14.57 показывает построение точек с применением графических примитивов. Этот путь позволяет обозначать точки графиков практически любыми фигурами.
Рис. 14.57. Построение точек с применением графических примитивов
Для создания примитивов в виде правильных многоугольников (полигонов) используется директива RegularPolygon:
Рисунок 14.58 показывает построение полигона — семиугольника с радиусом 3, центром в точке {0, 0}, углом поворота 20° и соединением через 3 вершины (попробуйте задать этот параметр другим целым числом и убедитесь, насколько меняется форма фигуры).
Директивы Dashing[ {Dot, Dash, LongDash,...} ] и AbsoluteDashing[ {Dot,...} ] служат для спецификации типа линий графиков. На рис. 14.59 представлены примеры такой спецификации и построения отрезков прямой линиями разных типов.
Применение функций подпакета MultipleListPlot наиболее ценно при визуализации математических расчетов, где преобладают графики тех типов, которые создаются этими функциями.
Рис. 14.58. Построение полигона
Рис. 14.59. Примеры построения отрезков прямых разными стилями
Построение 3D-параметрических графиков — ParametricPlot3D
Трехмерные графики с параметрически заданными функциями, описывающими положение их точек, относятся к числу наиболее сложных, но в то же время весьма эффектных. В подпакете ParametricPlotSD определены функции, упрощающие подготовку таких графиков:
Рис. 14.60. Пример построения сферы с вырезом с помощью функции ParametricPlot3D
Обратите внимание на то, что выбором диапазона изменения углов можно получить вырез сферы. Окраска поверхности осуществляется автоматически.
На рис. 14.61 показан пример применения функции PointParametricPlotSD. Здесь сфера построена отдельными точками.
Для построения трехмерных поверхностей в сферической и цилиндрической системах координат служат следующие функции:
На рис. 14.62 показано построение усеченной сверху сферы с помощью функции SphericalPlot3D. Нетрудно заметить, что применение данной функции — самый простой способ построения сферы. Это естественно, поскольку система координат сферическая.
Риc. 14.61. Пример построения сферы точками
Рис. 14.62. Пример построения сферы с помощью функции SphericolPlot3D
Пример построения поверхности, напоминающей по виду «тарелку» спутниковой антенны, в цилиндрической системе координат дан на рис. 14.63.
С помощью опции Viewpoint можно изменять положение точки, с которой рассматривается фигура. Это существенно меняет ее вид (рис. 14.64).
Еще раз напоминаем, что интерфейс Mathematica предусматривает изменение точки просмотра уже построенной фигуры. При этом Mathematica 4 позволяет вращать фигуру мышью. Рекомендуется просмотреть список опций данных функций, позволяющих в широких пределах менять вид и стиль построения графиков.
Рис. 14.63. Пример построения поверхности в цилиндрической системе координат
Рис. 14.64. Пример построения фигуры, видимой из заданной точки просмотра
Представление полей на плоскости — PlotField
В подпакете PlotField имеются функции, позволяющие строить стрелками графики полей:
Рисунок 14.65 показывает применение функции PlotVectorField для построения векторного поля согласно параметрически заданной на плоскости функции.
Риc. 14.65. График векторного поля на плоскости
Еще один пример (рис. 14.66), иллюстрирует построение градиента поля с помощью функции PlotGradientField. Применение функции PlotHamiltonianField демонстрирует рис. 14.67.
Указанные функции имеют множество опций. Отметим основные из них (в качестве значений приведены значения по умолчанию):
Рис. 14.66. График градиента поля
Риc. 14.67. Пример применения функции PlotHamiltonianField
Пример построения сложного графика с применением шестнадцати узловых точек по каждому направлению и использованием опции ScaleFunction показан на рис. 14.68.
Работу функции PlotPolyaField поясняет рис. 14.69. Обратите внимание на то, что функция в данном случае комплексная.
Рис. 14.68. Пример графика поля с применением нескольких опций
Рис. 14.69. Пример графика поля для комплексной функции
Применение опций позволяет строить самые разнообразные графики различных полей — тепловых, гравитационных, электрических и др.
В подпакете PlotField есть еще одна функция, представляемая в двух формах:
Применение этой функции поясняет график, представленный на рис. 14.70.
Рис. 14.70. Пример построения графика векторного поля с помощью функции ListPlotVectorField
Приведенных примеров вполне достаточно, чтобы судить о возможностях подпа-кета PlotField. В справочной базе данных можно найти другие примеры построения графиков векторных полей.
Представление полей в пространстве — PlotField3D
Для представления векторных полей в пространстве служат функции подпакета PlotField3D:
Эти функции подобны описанным в предшествующем разделе, но используются для построения векторных полей не на плоскости, а в пространстве. Рисунок 14.71 показывает пример такого построения.
Как видно из рис. 14.71, векторное поле строится отрезками прямых, а не стрелками. Последнее связано с тем, что по умолчанию задана опция VectorHeads-> False. Изменив ее на VectorHeads->True, можно получить представление векторного поля направленными стрелками. Кроме того, используя опцию Plot-Points->n, можно получить заданное число стрелок п по всем направлениям графика. Все это учтено на графике, представленном на рис. 14.72.
Рис. 14.71. Пример построения графика векторного поля в пространстве отрезками прямых
Рис. 14.72. Пример построения графика градиента поля направленными стрелками
В подпакете PlotFieldSD имеется еще одна функция:
Рисунок 14.73 поясняет применение этой функции.
Рис. 14.73. Пример построения графика векторного поля функцией ListPlotVectorReld3D
Нетрудно заметить, что при большом числе векторов в пространстве графики этого типа теряют наглядность. Рекомендуется тщательно отлаживать их, используя весь набор опций (как его получить, описывалось неоднократно).
Построение полиэдров — Polyhedra
Подпакет Polyhedra служит для создания регулярных пространственных фигур — полиэдров. Они задаются как графические примитивы и выводятся функцией Show:
Возможно задание следующих имен полиэдров: 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:
Рисунок 14.76 показывает построение звездообразного (или игольчатого) полиэдра. Представленная фигура напоминает некоторых морских животных — ежей и звезд.
Рис. 14.76. Построение звездчатой формы полиэдра
Полиэдры, применяемые в геодезии, можно получить с помощью следующей функции:
Рисунок 14.77 показывает применение этой функции.
Для построения усеченных полиэдров предназначены следующие функции:
Рис. 14.77. Построение полиэдра в виде сферы
Рисунок 14.78 показывает построение усеченного полиэдра Усечение сделано так, будто полиэдр заполнен материалом. Поэтому усеченные области выглядят как дополнительные грани. Параметр ratio, задающий степень усечения, может иметь значения от 0 до 0.5 (в ином случае выводятся сообщения об ошибке в задании параметра).
Рис. 14.78. Построение усеченного полиэдра
Усечение может быть открытым — такой вариант реализуется функцией со словом Open в имени. В этом случае фигура выглядит так, будто она склеена из тонкого картона (рис. 14.79). При этом в местах усечения фигура прозрачна.
Рис. 14.79. Построение усеченного полиэдра с открытыми местами усечения
В заключение этого раздела отметим следующие функции:
Они ничего не строят, а лишь возвращают специфические параметры полиэдров. Примеры применения этих функций представлены ниже:
First[ Polyhedron[ Octahedron ]]
{Polygon[{{0, 0, 1.41421}, {1.41421, 0, 0}, {0, 1.41421, 0}}],
Polygon[{{0, 0, 1.41421}, {0, 1.41421, 0}, {-1.41421, 0, 0}}],
Polygon[{{0, 0, 1.41421}, {-1.41421, 0, 0}, {0, -1.41421, 0}}],
Polygon[{{0, 0, 1.41421}, {0, -1.41421, 0}, {1.41421, 0, 0}}],
Polygon[{{1.41421, 0, 0}, {0, -1.41421, 0}, {0, 0, -1.41421}}],
Polygon[ {{1.41421, 0, 0}, {0, 0, -1.41421}, {0, 1.41421, 0}}],
Polygon[{{0, 0, -1.41421}, {0, -1.41421, 0}, {-1.41421, 0, 0}}],
Polygon[{{0, 1.41421, 0}, {0, 0, -1.41421}, {-1.41421, 0, 0}}]}
Vertices[ Octahedron ]
{{0, 0, 1.41421}, {1.41421, 0, 0},
{0, 1.41421, 0}, {0, 0, -1.41421},
{-1.41421, 0, 0}, {0, -1.41421, 0}}
Faces[ Octahedron ]
{{1, 2, 3}, {1, 3, 5}, {1, 5, 6},
{1, 6, 2}, {2, б, 4}, {2, 4, 3}, {4, б, 5}, {3,4,5}}
Приведенные выше функции можно использовать на занятиях по стереометрии, где полученные с их помощью фигуры могут прекрасно иллюстрировать теоретические положения курса.
Создание графических форм — Shapes
Нередко желательно придать трехмерным объектам определенную форму, например кольца или бублика. Некоторые возможности для этого дают функции под-пакета Shapes. Основной из них является функция Show [Graphics3D [shape] ], которая производит отображение формы со спецификацией shape.
С ней могут использоваться графические примитивы:
Возможно указание фигур без параметров. Это означает, что они выбираются по умолчанию следующими:
Со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 имеются следующие функции:
Рисунок 14.82 иллюстрирует осуществление вращения для кольца Мебиуса. Эффект вращения хорошо заметен, если сравнить положения фигуры на рис. 14.81 и 14.82.
Рис. 14.82. Кольцо Мебиуса после поворота
Функции Show и Graphics3D позволяют строить трехмерные фигуры, которые пересекаются в пространстве. Пример такого построения приведен на рис. 14.83. Нетрудно заметить, что линии пересечения строятся с точностью до одной ячейки — полигона. Поэтому для получения качественных фигур надо увеличивать число полигонов, из которых фигуры синтезируются. Это, однако, увеличивает время построения фигур — оно становится заметным даже при работе на современных компьютерах с процессорами Pentium II и Pentium III.
Рис. 14.83. Фигуры, пересекающиеся в пространстве
В заключение этого раздела отметим, что функция WireFrame [g] дает «каркас» графического объекта, то есть делает все его грани прозрачными. Применение этой функции иллюстрирует пример, показанный на рис. 14.84.
Рис. 14.84. Пример применения функции WireFrame для построения каркаса сферы
Примитивы, использующие сплайны — Spline
Подпакет 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. Они представлены следующими функциями:
Рисунок 14.88 дает простой пример построения поверхности, образованной линией cos(x) при изменении х от 0 до 4л, вращающейся вокруг оси xz. Построение задано функцией SurfaceOfRevolution [f, {x, xmin, xmax} ]. В этом случае линия вращается в пределах угла от 0 до 2-я, поэтому поверхность получается круговой.
Рис. 14.88. Фигура, образованная вращением линии cos(x)
Следующий пример показывает ту же фигуру (рис. 14.89) в другом положении. Это достигается сменой угла обзора с помощью опции viewVertical.
Рис. 14.89. Фигура рис. 14.88 в другом положении
Пример применения функции SurfaceOfRevolutibn [ {fx, fy}, {t, tmin, tmax) ] представлен на рис. 14.90. Формируется этакое декоративное яйцо на подставке. Заменив в определении функции Cos [u] на Sin [u], можно получить изображение рюмки.
Рис. 14.90. Построение декоративного яйца на подставке
Рисунок 14.91 демонстрирует возможность построения объемной фигуры с вырезами. Все, что для этого надо, — удачно выбрать диапазон изменения угла вращения. Если он будет от 0 до 2л, то фигура будет сплошной, не содержащей вырезов.
Рис. 14.91. Построение яйца с вырезом
Для управления положением оси вращения служат следующие опции:
Рисунок 14.92 иллюстрирует применение опции RevolutionAxis->{x, у, z }.
Следующая функция позволяет построить фигуру вращения, образующая линия которой задается массивом точек:
Рисунок 14.93 показывает задание массива точек с помощью функции Table и фигуру вращения, полученную при использовании функции ListSurfaceOf-Revolution во второй форме.
Рис. 14.92. Управление положением оси вращения
Рис. 14.93. Пример построения фигуры вращения с образующей, заданной массивом точек
Что еще есть в пакете расширения Graphics
Помимо уже рассмотренных подпакетов пакет расширения 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.
В этом уроке мы научились: