25620-1 (751112), страница 5
Текст из файла (страница 5)
Среди этих функций надо отметить прежде всего средства построения графиков ряда новых типов (например, в виде линий равного уровня, векторных полей и т.д.), а также средства объединения различных графиков в один. Особый интерес представляют две первые функции, обеспечивающие оживление (анимацию) как двумерных графиков (animate), так и трехмерных (animate3d). Этот пакет вполне
заслуживает описания в отдельной книге. Но, учитывая ограниченный объем данной книги, мы рассмотрим лишь несколько характерных примеров его применения. Заметим, что для использования приведенных функций нужен вызов пакета, например, командой with(plots).
13.6.2. Построение графиков функций в двумерной полярной системе координат
В пакете plots есть функция для построения графиков в полярной системе координат. Она имеет вид polarplot(L,o), где L — объекты для задания функции, график которой строится и о — необязательные опции. На рис. 13.27 представлен пример построения графика с помощью функции polarplot.
Рис. 13.27. График, построенный с помощью функции polarplot.
В данном случае для большей выразительности опущено построение координатных осей, а график выведен линией удвоенной толщины. График очень напоминает лист клена, весьма почитаемого в Канаде и ставшего эмблемой системы Maple V.
13.6.3. Построение графиков линиями равного уровня
Графики, построенные с помощью линий равного уровня (их также называют контурными графиками) часто используются в картографии. Эти графики получаются, если мысленно провести через трехмерную поверхность ряд равноотстоящих плоскостей, параллельных плоскости, образованной осями Х и Y графика. Линии равных высот образуются в результате пересечения этих плоскостей с трехмерной поверхностью.
Для построения таких графиков используется функция contourplot, которая может использоваться в нескольких форматах:
contourplot(exprl,x=a..b,y=c..d)
contourplot(f,a..b,c..d)
contourplot([ exprf,exprg,exprh ],s=a..b,t=c..d)
contourplot([ f,g,h ],a..b,c..d)
contourplot3d(exprl,x=a..b,y=c..d)
contourplot3d(f,a..b,c..d)
contourplot3d([ exprf,exprg,exprh ],s=a..b,t=c..d) »'
contourplot3d([ f,g,h ],a..b,c..d)
Здесь — f, g и h — функции, expri — выражение, описывающее зависимость высоты поверхности от координат х и у, exprf, exprg и exprh — выражения, зависящие от s и t, описывающие поверхность в параметрической форме, а и b — константы вещественного типа, end — константы или выражения вещественного типа, х, y,,s и t — имена независимых переменных.
На рис. 13.28 показано построение графика линиями равного уровня для одной функции. Опция filled=true обеспечивает автоматическую функциональную окраску замкнутых фигур, образованных линиями равного уровня. Порою это придает графику большую выразительность, чем при построении только линий равного уровня.
Рис. 13.28. Пример построения графика функции линиями равного уровня.
Функция contourplot позволяет строить и графики ряда функций. Пример такого построения показан на рис. 13.29. Множество окружностей на этом рисунке создается четырьмя поверхностями, заданными функциями с1, с2, сЗ и с4.
Следует отметить, что, хотя графики в виде линий равного уровня выглядят не так эстетично и естественно, как обычные графики трехмерных поверхностей (ибо требуют осмысления результатов), у них есть один существенный плюс — экстремумы функций на таких графиках выявляются порой более четко, чем на обычных графиках. Например, небольшая возвышенность или впадина за большой «горой» на обычном графике может оказаться невидимой, поскольку заслоняется
«горой» — на графике линий равного уровня этого эффекта нет. Однако выразительность таких графиков сильно зависит от числа линий равного уровня.
Рис. 13.29. Пример построения графиков многих функций линиями равного уровня.
13.6.4. График плотности
Иногда трехмерные поверхности отображаются на плоскости как графики плотности окраски — чем выше высота поверхности, тем плотнее окраска. Такой вид графиков создается функцией densityplot. Она может записываться в двух форматах:
densityplot(exprl,x=a..b,y=c..d) densityplot(f,a..b,c..d),
где назначение параметров соответствует указанному выше для функции contour-plot.
На рис. 13.30 дан пример построения графика такого типа. Нетрудно заметить, что в плоскости X,Y график разбит на квадраты, плотность окраски которых различна. В нашем случае плотность окраски задается оттенками серого цвета.
Обычно графики такого типа не очень выразительны, но имеют свои области применения. К примеру, оттенки окраски полупрозрачной жидкости могут указывать на рельеф поверхности дна емкости, в которой находится эта жидкость.
13.6.5. График векторного поля двумерный
Еще один распространенный способ представления трехмерных поверхностей — графики векторного поля. Они часто применяются для отображения полей, например, электрических зарядов. Особенность таких графиков в том, что для их построения используют стрелки, направление которых соответствует направлению изменения градиента поля, а длина — значению градиента.
Рис. 13.30. График плотности для заданной функции.
Для построения таких графиков в двумерной системе координат используется функция fieldplot:
fieldplot(f, rl, r2) или fieldplot(f, rl, r2, ...),
где f — вектор или множество векторов, задающих построение, и rl и r2 — пределы.
На рис. 13.31 показан вид одного из таких графиков. Следует отметить, что для получения достаточного числа отчетливо видных стрелок надо поработать с форматированием графиков. Иначе графики этого типа могут оказаться не очень представительными. Так, слишком короткие стрелки превращаются в черточки и даже точки, не имеющие острия, что лишает графики наглядности.
Чуть позже мы рассмотрим построение на одном рисунке графиков плотности и векторного поля, а также создание более наглядных жирных стрелок.
13.6.6. Графики в разных системах координат
В пакете plots имеется множество функций для построения графиков в различных системах координат. Объем книги не позволяет воспроизвести примеры на все виды таких графиков, ибо их многие сотни. Да это и не надо — во встроенных в справочную систему примерах можно найти все нужные сведения. Так что ограничимся лишь парой примеров применения функции tubeplot(C, options), позволяющей строить весьма наглядные фигуры в пространстве, напоминающие трубы или иные объекты, образованные фигурами вращения.
На рис. 13.32 показана одна из таких фигур. Она поразительно напоминает раковину улитки. Функциональная окраска достигнута доработкой графика с помощью панели форматирования. Смысл параметра С (в документе Conchoid) легко понять из этого примера.
Рис. 13.31. Двумерный график типа векторного поля.
Рис. 13.32. Построение графика «улитки».
Эта функция может использоваться и для построения ряда трубчатых объектов в пространстве. При этом автоматически задается алгоритм удаления невидимых линий даже для достаточно сложных фигур. Это наглядно иллюстрирует пример
на рис. 13.33, показывающий фигуру «цепи». Не правда ли реалистичность этой фигуры поражает воображение?
Рис. 13.33. Фигура «цепи», построенная с применением функции tubeplot.
Можно немало размышлять о том, как природа «узнала» о математических закономерностях, положенных в основу тех или иных геометрических объектов, или, возможно, о гениальности людей, сумевших найти такие закономерности для природных объектов. В наше время Maple V открывает огромные возможности для таких людей.
13.6.7. Графики типа трехмерного векторного поля
Наглядность ряда графиков можно существенно увеличить, строя их в трехмерном представлении. Например, для такого построения векторных полей можно использовать графическую функцию fieldplot3d. В отличие от функции fieldplot, она строит стрелки как бы в трехмерном пространстве (рис. 13.34).
Все сказанное об особенностях таких двумерных графиков остается справедливым и для графиков трехмерных. В частности, для получения достаточной их представительности нужно тщательно отлаживать форматы представления таких графиков.
13.6.8. Контурные трехмерные графики
В отличие от векторных графиков, контурные графики трехмерных поверхностей, наложенные на сами эти поверхности, нередко повышают восприимчивость таких поверхностей — подобно изображению линий каркаса. Для одновременного построения трехмерной поверхности и контурных линий на них служит функция contourplot3d. Пример ее применения показан на рис. 13.35.
Рис. 13,34. Построение векторного поля в трехмерном пространстве.
Рис. 13.35. График трехмерной поверхности с контурными линиями.
Для повышения наглядности этот график доработан с помощью панели форматирования графиков. В частности, включена функциональная окраска и подобраны углы обзора фигуры, при которых отчетливо видны впадина и пик фигуры.
13.6.9. Техника визуализации сложных пространственных фигур
Приведенные выше достаточно простые примеры дают представление о высокой степени визуализации геометрических фигур с помощью пакета plots. Здесь мы рассмотрим еще несколько примеров визуализации трехмерных фигур. Многие видели катушки индуктивности, у которых провод того или иного диаметра намотан на тороидальный магнитный сердечник. Математическая абстракция такой катушки показана на рис. 13.36.
Рис. 13.36. Top с обмоткой — толстой спиралью.
В документе (рис. 13.36) для функции tubeplot использовано довольно большое число параметров-опций. Не всегда их действие очевидно. Поэтому на рис. 13.37 показано построение трех взаимно пересекающихся торов с разными типами их построения. Этот рисунок дает также наглядное представление о возможности построения нескольких графических объектов (представленных функциями р1, р2 и рЗ) с помощью функции tubeplot.
Наконец, на рис. 13.38 показано построение тора с тонкой обмоткой. Рекомендуется внимательно просмотреть запись функции tubeplot в этом примере и в примере, показанном на рис. 13.36. Можно также поэкспериментировать с опциями графика, от которых сильно зависит его представительность и наглядность.
В ряде случаев наглядно представленные фигуры можно строить с применением объединения однотипных фигур. Пример графика подобного рода представлен на рис. 13.39. Здесь готовится список графических объектов s, смещенных по вертикали. С помощью функции display они воспроизводятся на одном графике, что повышает реалистичность изображения.
Последний пример имеет еще одну важную особенность — он иллюстрирует задание графической процедуры, в теле которой используются функции пакета














