Цель лекции: познакомиться с принципами создания в Mathematica двумерных и трёхмерных объектов и принципами работы с ними.
В предыдущей лекции мы познакомились с принципами визуализации данных, научились строить двумерные графики непрерывных и дискретных зависимостей от одной переменной. В настоящей лекции мы продолжим знакомство с графическими возможностями системы Mathematica и научимся визуализировать зависимости от двух и трёх переменных средствами двумерной и трёхмерной графики. Кроме того, мы научимся визуализировать динамические процессы, когда меняется один или несколько параметров. В качестве основы рассмотрения по-прежнему будем использовать книгу Е. М. Воробьёва [1].
Функция двух переменных определяет в трёхмерном пространстве некоторую поверхность. Встроенные функции Mathematica для работы с трёхмерной графикой, оканчиваются на Plot3D.
Для создания трёхмерных графических объектов предназначены функции Plot3D, ParametricPlot3D и ListPlot3D.
Формат обращения к функции Plot3D отличается от такового для функции Plot третьим обязательным аргументом: Plot3D[func,{x,xmin,xmax},{y,ymin,ymax}], где func — заданная функция переменных x и y, меняющихся на отрезках от xmin до xmax и от ymin до ymax, соответственно. На рисунке 7.1 в качестве примера (In[1]) мы построили поверхность, заданную функцией Cos[x*y]-x.
Функция ParametricPlot3D позволяет строить параметрически заданные зависимости: как поверхности, так и кривые в трёхмерном пространстве. В примере Out[2] на рис. 7.1 слева мы параметрически построили поверхность — тор, задав функциональную зависимость от двух переменных. В примере Out[2] справа мы изобразили в трёхмерном пространстве кривую, иллюстрирующую параметрическую зависимость от одной переменной.
Подробней о функциях Plot3D и ParametricPlot3D см. книги Е. М. Воробьёва [1, с. 83–86] и А. Н. Прокопени и А. В. Чичурина [5, с. 58–63].
(рис 7.1) Построение трёхмерных зависимостей непрерывных функций
Для трёхмерного графического представления дискретных численных данных используется функция ListPlot3D. Если единственный аргумент функции задан в виде матрицы mxn, т.е., в виде {{v11,v12,...,v1n},{v21,v22,...,v2n},...,{vm1,vm2,...,vmn}}, то данные в ячейке матрицы vij рассматриваются как z-координаты (по оси аппликат) точки в трёхмерном пространстве, а координатам по осям абсцисс и ординат соответствуют значения x=i и y=j (пример In[1] на рис. 7.2). Подобный способ задания возможен, если значение n не равняется 3.
Если аргумент задан в виде матрицы, содержащей 3 столбца (т.е., матрица mxn, где n=3), то элементы матрицы интерпретируются иным образом: каждая точка i списка {{x1,y1,z1},{x2,y2,z2},...,{xm,ym,zm}} обладает координатами {xi,yi,zi} (пример In[2] на рис. 7.2).
О функции ListPlot3D см. книгу В. П. Дьяконова [2, с. 429–430].
(рис 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].
(рис 7.3) Использование опции окрашивание трёхмерной поверхности ColorFunction
Наглядность трёхмерного рисунка определяется позицией, с которой этот рисунок рассматривается. Эта позиция выбирается опцией 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].
(рис 7.4) Изменение положения точки, из которой рассматривается изображение
Различать рельеф изображённой поверхности или форму изображённого тела помимо цвета помогают линии криволинейной сетки, образованной линиями пересечения плоскостей х=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].
(рис 7.5) Задание координатной сетки на трёхмерном рисунке
Визуализация трёхмерных поверхностей средствами двумерной графики при помощи линий уровня подробно описывается в книге А.Н. Прокопени и А.В. Чичурина [5, с. 63–65]. Если поверхность, заданную некоторой функцией $$z=f(x,y)$$, пересечь плоскостью $$z=const$$, то в сечении получится плоская кривая, которую можно спроектировать на плоскость XY. Если мы многократно осуществим такое пересечение, изменяя каждый раз значение z, и отобразим проекции всех полученных кривых на плоскость XY, то мы получим изображение пространственной поверхности в виде набора линий уровня. Подобное построение реализуется при помощи функции ContourPlot. Формат обращения к этой функции такой же, как и к иным функциям построения зависимостей двух переменных, т.е., первым аргументом указывается функция, уровни которой мы хотим построить, вторым и третьим аргументами — итераторы, определяющие переменные и интервалы их изменения.
На рис. 7.6 мы для наглядности изобразили зависимость функции двух переменных $$Sin[x]*Sin[y]$$ при помощи функций Plot3D (рисунок слева) и ContourPlot (рисунок справа).
(рис 7.6) Визуализация функции двух переменных средствами трёхмерной и двумерной графики
В качестве необязательных аргументов могут указываться дополнительные опции, меняющие внешний вид изображения.
Среди таких опций — опция Contours, которая определяет количество контурных линий на графике. Если опция задана в виде Contours->n, то количество контурных линий на рисунке будет равно n. Если опции задаётся значение в виде списка, Contours->{f1,f2,...}, то будут построены уровни, соответствующие значениям функции f1,f2,....
По умолчанию области между контурными линиями закрашиваются оттенками синего, причём области меньших значений имеют более тёмный оттенок, чем области больших значений. Самостоятельно задать стиль окрашивания можно при помощи опции ContourShading. При задании опции в виде ContourShading->None или ContourShading->False закрашивание полностью отменяется. Если мы зададим опцию в виде списка цветов c1,c2,..., т.е., ContourShading->{c1,c2,...}, то каждая область будет закрашена определённым цветом в соответствии с порядком в списке. Нумерация областей начинается с области, соответствующей наименьшему значению функции. Если в ContourShading задано n цветов, а закрашиваемых областей больше, чем n, то область с номером n+1 закрашивается цветом под номером 1 в списке, область с номером n+2 — цветом под номером 2 и т.д.
Вид контурных линий можно определять при помощи опции ContourStyle. При задании опции в виде ContourStyle->{d1,d2,...} каждая директива будет применена к области с ответствующим номером. Если количество контуров превышает количество заданных директив, то для контуров с чрезмерным номером применяется тот же принцип, что и при закрашивании областей между контурами. Если опция задана в виде ContourStyle->{{d1,d2,...}}, то все директивы d1,d2,... будут применены ко всем контурным линиям.
На рисунке 7.7 мы вновь построили контурное изображение функции $$Sin[x]*Sin[y]$$. Однако в первом примере (верхний левый рисунок) мы увеличили количество контурных линий, задав опцию Contours->25. Во втором примере (верхний правый рисунок) мы повлияли на выбор уровней контуров, задав Contours->{-0.8,-0.4,0,0.4,0.8}. В следующем примере (нижний левый рисунок) мы также задали способ заполнения областей между контурами, самостоятельно выбрав цвета областей, ContourShading->{Magenta,Blue,Green,Orange,Yellow,Red}. В последнем примере (нижний правый рисунок) мы вовсе отказались от закрашивания областей, ContourShading->None, зато особым образом выделили все линии контуров, сделав их толстыми, штриховыми и синего цвета, ContourStyle->{{Thick,Dashed,Blue}}.
Подробней о функции построения контурных изображений и её опциях см. книги Е. М. Воробьёва [1, с. 81–82], В. П. Дьяконова [2, с. 416–419] и А. Н. Прокопени и А. В. Чичурина [5, с. 63–64].
(рис 7.7) Изменение внешнего вида контурных графиков функций двух переменных при помощи опций
Для двумерного представления функции двух переменных используется также функция DensityPlot. Она разбивает область изменения каждого из аргументов на некоторое количество одинаковых отрезков, формируя тем самым регулярную сетку квадратных ячеек. Значение функции в каждой ячейке отображается при помощи окрашивания этой ячейки в определённый цвет. Правила окрашивания по умолчанию такие же, как и для ContourPlot: ячейка с меньшим значением функции будет иметь более тёмный цвет. Таким образом, третьей координатой, соответствующей значению функции, выступает цвет.
По умолчанию область изменения каждого аргумента разбивается на 14 отрезков, то есть, всё изображение разбивается на $$14^2=196$$ ячеек. Однако количеством отрезков можно манипулировать при помощи опции PlotPoints. Она задаёт число точек на интервале, между которыми будут формироваться отрезки. Таким образом, число отрезков всегда будет на 1 меньше, чем число точек, заданных опцией PlotPoints. Заданная в виде PlotPoints->k опция способствует разбиению области изменения каждого аргумента на k-1 отрезков. Если задать опцию в виде списка двух элементов, PlotPoints->{m,n}, то интервал вдоль оси абсцисс разбивается на m-1 отрезков, а вдоль оси ординат — на n-1 отрезков.
Для функции DensityPlot также может быть задана опция Mesh. Однако поскольку проекциями линий задаваемой этой опцией криволинейной сетки на отображаемую плоскость являются прямые, то опция Mesh в функции DensityPlot по сути генерирует равномерную сетку с одинаковыми прямоугольными ячейками. Число линий этой сетки определяется опцией PlotPoints. Таким образом, чтобы проверить, на какое количество ячеек было разбито плотностное изображение, следует задать опцию в виде Mesh->Full.
По умолчанию ячейки окрашиваются градациями синего. Однако способ окрашивания можно изменять при помощи опции ColorFunction. Задание опции в виде ColorFunction->GrayLevel изобразит рисунок в градациях серого: при этом наименьшему значению визуализируемой функции соответствует чёрный цвет, а наибольшему — белый. Чтобы окрасить изображение в цвета Hue-палитры, следует задать опцию как ColorFunction->Hue. Для того чтобы ячейки отличались друг от друга оттенками одного и того же цвета, следует воспользоваться уже известной нам директивой Hue[h,s,b], задав ColorFunction->(Hue[h,s,#]), где нужно самостоятельно указать значения h и s. Кроме того, можно просто воспользоваться стандартной цветовой схемой, окрасив, например, изображения в "цвета солнца": ColorFunction->"SolarColors".
Изобразим на рисунке 7.8 прежнюю функцию $$Sin[x]*Sin[y]$$ при помощи DensityPlot с разными значениями опций. В первом примере (верхний левый рисунок в Out[1]) мы обошлись без дополнительных опций. Во втором примере (верхний правый рисунок) мы накинули на график координатную сетку, Mesh->Full, чтобы убедиться, что по умолчанию область разбилась на 14x14 ячеек, а также окрасили изображение в оттенки серого, ColorFunction->GrayLevel. В следующем примере (нижний левый рисунок) мы уменьшили до трёх число отрезков вдоль каждого направления, PlotPoints->4, и теперь имеем наглядное представление того, как это влияет на качество изображения. Кроме того, мы окрасили изображение в зелёный цвет, задав в качестве изменяющейся координаты в зависимости от значения функции его яркость, ColorFunction->(Hue[0.4,1/2,#]). В последнем примере (нижний правый рисунок) мы известным нам ранее способом нарисовали фрагмент полного изображения, PlotRange->{{0,Pi},{0,Pi}}, избавились от координатной сетки поверх изображения, Mesh->None, значительно увеличили число отрезков вдоль каждого направления, PlotPoints->40 (что положительно повлияло на качество изображения), а также окрасили рисунок в спокойные "пастельные" тона, используя соответствующую стандартную цветовую схему, ColorFunction->"Pastel".
Подробней о функции построения плотностных изображений и её опциях см. книги Е. М. Воробьёва [1, с. 82–83], В. П. Дьяконова [2, с. 419–420] и А. Н. Прокопени и А. В. Чичурина [5, с. 64–65].
(рис 7.8) Визуализация функции двух переменных средствами двумерной графики при помощи функции DensityPlot
На основе уже имеющихся знаний о функциях ListPlot3D, ContourPlot и DensityPlot не составляет никакого труда разобраться в действии функций ListContourPlot и ListDensityPlot, предназначенных для двумерного представления дискретных зависимостей от двух переменных. В настоящем курсе мы лишь приведём примеры использования функций контурной визуализации (левое изображение) и плотностной визуализации (правое изображение) некоторой дискретной зависимости на рисунке 7.9. Управление характеристиками изображения дискретных зависимостей при помощи опций полностью аналогично таковому для непрерывных зависимостей.
(рис 7.9) Визуализация дискретных зависимостей от двух переменных средствами двумерной графики
В предыдущем разделе мы научились представлять функциональные зависимости и дискретные наборы данных от двух переменных на плоскости, заменяя третью координату цветом (изображение плотности функции) или линиями уровня (контурное изображение). Похожий трюк мы используем для представления в трёхмерном пространстве зависимостей от трёх переменных, для которых принципиально нет возможности снабдить и функцию, и каждую переменную собственной координатной осью. В этом нам поможет функция ContourPlot3D. Заданная в виде ContourPlot3D[{f,{x,xmin,xmax},{y,ymin,ymax},{z,zmin,zmax}}] функция генерирует трёхмерное контурное изображение функции f переменных x, y и z, при этом, в отличие от двумерного случая, контурами будут являться криволинейные поверхности. Функция ContourPlot3D[{f==g,{x,xmin,xmax},{y,ymin,ymax},{z,zmin,zmax}}] рисует только ту контурную поверхность, для которой f и g равны.
В примере In[1] на рис. 7.10 мы построили в контурном представлении некоторую зависимость $$x^3+y^2-z^2$$. На рисунке слева мы обошлись без дополнительных настроек. Поскольку количеством контуров и их оформлением в трёхмерном случае можно манипулировать точно так же, как и в двумерном, на рисунке справа мы построили на рисунке пять контуров, Contours->5/, характеризующих зависимость, и каждый из них раскрасили в определённый цвет, ContourStyle->{Red,Orange,Green,Cyan,Blue}.
В примере In[2] на рис. 7.10 мы построили контурную поверхность той же зависимости, удовлетворяющую условию $$x^3+y^2-z^2==0$$.
(рис 7.10) Представление функций трёх переменных в трёхмерном пространстве
Имеется в Mathematica и функция для представления в трёхмерном пространстве дискретного набора данных по трём координатам — ListContourPlot3D. В качестве аргумента выступает трёхуровневый вложенный список, т. о., функция задаётся в виде ListContourPlot3D[{{{f111,f112,...},{f121,f122,...},...},{{f211,f212,...},{f221,f222,...},...},...}], где индексы в виде ijk нумеруют элемент списка со значением функции fijk. На рисунке 7.11 мы построили ту же зависимость, что и в примере In[1] на рис. 7.10, однако задали её в дискретном виде при помощи функции Table.
Специальных функций для плотностной визуализации зависимостей от трёх переменных в Mathematica нет.
Подробней о трёхмерных функциях визуализации зависимостей от трёх переменных см. книгу В. П. Дьяконова [2, с. 468–470].
(рис 7.11) Представление дискретных наборов данных от трёх переменных в трёхмерном пространстве
Примитивы двумерной графики, точка, линия, прямоугольник, многоугольник, дуга, диск, текст, используются также и для построения трёхмерных графических изображений. Единственное отличие в трёхмерном случае заключается в том, что позиции всех точек описываются не двумя, а тремя координатами.
Для того чтобы превратить в рисунок трёхмерные примитивы, к ним следует применить функцию Graphics3D. На рис. 7.12 мы изобразили в трёхмерном пространстве точку, линию и многоугольник (треугольник). Для того чтобы отличать трёхмерное изображение от двумерного Mathematica заключила изображение в коробку.
(рис 7.12) Использование двумерных примитивов в трёхмерной графике
Однако трёхмерная графика обладает собственными специфическими примитивами, представляющими собой трёхмерные минимальные объекты: это параллелепипед (cuboid), сфера (sphere), цилиндр (cylinder), конус (cone), труба (tube).
Примитив Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}] рисует параллелепипед, стороны которого параллельны координатным осям, а противоположные углы на одной из диагоналей имеют координаты {xmin.ymin,zmin} и {xmax,ymax,zmax}.
Примитив Sphere[{x,y,z},r] изображает сферу радиуса r с центром в точке с координатами {x,y,z}.
На рис. 7.13 мы изобразили при помощи соответствующих примитивов параллелепипед и две пересекающихся сферы. Кроме того, мы воспользовались уже известной нам опцией Boxed для того, чтобы убрать обрамляющую изображение "коробку". Следует отметить, что эту опцию мы указали вне списка, содержащего графические примитивы и директивы, а как отдельный аргумент функции Graphics3D.
(рис 7.13) Трёхмерные графические примитивы: параллелепипед и сфера
Примитивы Cylinder[{{x1,y1,z1},{x2,y2,z2}},r] и Cone[{{x1,y1,z1},{x2,y2,z2}},r] рисуют соответственно цилиндр и конус с радиусами оснований r, осями которых выступает линия с координатами {x1,y1,z1},{x2,y2,z2}. Эффект использования обоих примитивов проиллюстрирован на рис. 7.14.
(рис 7.14) Трёхмерные графические примитивы: цилиндр и конус
Примитив Tube рисует в трёхмерном пространстве тело, которое мы будем называть трубой: это трёхмерный объект, представляющий собой некоторую суперпозицию линии и цилиндра. Заданный в виде Tube[{{x(1),y(1),z(1)},{x(2),y(2),z(2)},...}] примитив рисует цилиндры вокруг линий, соединяющих точки с заданными координатами {x(i),y(i),z(i)},{x(i+1),y(i+1),z(i+1)} (левое изображение в Out[1] на рис. 7.15). Если задать функцию с дополнительным аргументом, Tube[{{x(1),y(1),z(1)},{x(2),y(2),z(2)},...},r], то рисуются цилиндры радиуса r (центральное изображение в Out[1]). Если мы обратим внимание на открытые концы изображённых при помощи Tube тел, то увидим, что они не плоские, как у цилиндра, а скруглённые.
При помощи примитива Tube можно одновременно создавать изображение нескольких труб, задав в качестве первого аргумента список описывающих их линий (правое изображение в Out[1] на рис. 7.15). Можно менять способ соединения цилиндров соседних отрезков линии. Для этого используется директива JoinForm. Существует три способа соединения: скос (Bevel), скругление (Round) и угол (Miter). Все способы представлены в примере In[2].
Подробней о двумерных и трёхмерных графических примитивах Mathematica — в книге Ш. Гетца и Дж. Хелмстедт [9, с. 28–35, 49–52].
(рис 7.15) Трёхмерные графические примитивы: труба
Графические возможности Mathematica настолько широки, что позволяют создавать не только статические изображения, но и анимированную графику. Принцип создания анимации следующий: генерируется последовательность изображений (кадров), которые отличаются друг от друга значениями некоторого параметра, затем полученные кадры последовательно воспроизводятся.
Функция программы, которая позволяет создавать анимацию — Animate. Заданная в виде Animate[plot,{u,umin,umax}] функция анимирует изображение plot в зависимости от параметра u, непрерывно меняющегося в пределах от umin до umax. Изображение plot может быть построено при помощи уже известных нам двумерных и трёхмерных графических функций. Пример создания анимации приведён на рис. 7.16: в Out[1] мы получили окно, включающее в себя изображение, полученное при помощи функции Plot, а также панель управления воспроизведением. На панели воспроизведения (слева направо) имеется ползунок, показывающий значение параметра u, при котором в данный момент построен рисунок (ползунок можно также двигать самостоятельно при помощи мышки), кнопка Play/Pause для запуска и остановки воспроизведения, кнопки увеличения и уменьшения скорости воспроизведения и кнопка изменения направления воспроизведения.
(рис 7.16) Создание анимации в Mathematica
При задании функции в виде Animate[plot,{u,umin,umax,d}] параметр u меняется дискретно с промежутком d между соседними значениями. Параметр u может принимать значения, заданные пользователем самостоятельно. Для этого второй аргумент функции задаётся в виде вложенного списка {u,{u1,u2,...}}.
Меняться может сразу несколько параметров. В этом случае функция задаётся в виде Animate[plot,{u,...},{v,...},...].
Безусловно, у функции Animate имеются дополнительные опции, меняющие особенности динамического изображения.
Если задать функцию без дополнительных опций, то сразу же после осуществления вычисления анимация начинает воспроизводиться. Для того чтобы сразу после вычисления изображение оставалось статичным, а движение начиналось лишь после нажатия пользователем на кнопку Play, требуется задать опцию AnimationRunning->False.
Опция AnimationDirection задаёт направление изменения параметра u, от которого строится анимированная зависимость. По умолчанию она задана в виде AnimationDirection->Forward, и параметр u меняется от umin до umax. По достижении u значения umax анимация начинается сначала. Если задать опцию в виде AnimationDirection->Backward, u будет меняться от umax до umin. При присвоении опции значения ForwardBackward сначала u меняется от umin до umax, а по достижении значения umax — в обратную сторону, от umax до umin.
Относительная скорость анимации v определяется задающейся в следующем виде опцией AnimationRate->v. По умолчанию значение v равно 1.
На рис. 7.17 мы создали анимацию функции $$Cos[a*x]+Cos[b*y]$$ двух переменных x и y с изменяющимися параметрами a и b. При этом мы отключили автоматический старт анимации, AnimationRunning->False, уменьшили скорость воспроизведения анимации, AnimationRate->0.2, а также вынудили параметры a и b сначала изменяться от меньшего значения к большему, а затем в обратную сторону, AnimationDirection->ForwardBackward.
Подробней о функции Animate и её опциях см. книгу В. П. Дьяконова [2, с. 461–464].
(рис 7.17) Изменение особенностей воспроизведения анимированных объектов при помощи опций
Если изображения, которые могут стать кадрами анимационного ролика, созданы заранее (например, оформлены в виде списка), то совместить их в одном ролике позволит функция ListAnimate. На рис. 7.18. мы объединили в ролике пять графиков функции $$Cos[d*x]$$ при разных значениях d, в результате получили анимацию, последовательно воспроизводящую пять кадров.
(рис 7.18) Создание анимационного ролика из заранее сгенерированных кадров
Более широкими возможностями по сравнению с Animate обладает функция Manipulate. Применённая к некоторому выражению expr, зависящему от параметра u, функция Manipulate[expr,{u,umin,umax}] вычисляет значение выражения expr при установленном значении u. Значение u можно менять в ячейке Out[...], перетаскивая ползунок, либо вводя требуемое число в специальное поле в панели воспроизведения, появляющееся сразу после начала воспроизведения непосредственно под ползунком. Кроме того, можно наблюдать за изменением значения выражения expr, запустив автоматическое изменение параметра u в пределах от umin до umax при помощи Play.
На рис. 7.19 мы привели в качестве примера вычисление значения функции x*Sin[x] при интерактивно задаваемом x.
(рис 7.19) Вычисление выражения, зависящего от интерактивно задаваемого аргумента
Аргументы функции Manipulate задаются тем же способом, что и аргументы Animate: параметр может принимать непрерывные и дискретные значения, можно одновременно задавать несколько параметров. Кроме того, функция может быть задана в виде Manipulate[expr,{{u,uinit},umin,umax}]: тогда сразу после вычисления u принимает значение uinit, а не umin.
В качестве первого expr функции Manipulate может выступать функция построения изображения: именно поэтому мы рассматриваем эту функцию именно в данной лекции. В этом случае Manipulate будет представлять собой расширенную версию функции Animate, поскольку, обладая всеми её возможностями, функция Manipulate позволяет ещё и вручную задавать значения параметра, а также визуализирует его текущее значение.
На рисунке 7.20 мы применили Manipulate к функции построения той же зависимости, что и на рис. 7.17. Как мы видим, теперь в Out[1] у нас появились дополнительные инструменты для отображения и задания значений параметров функции a и b.
Подробней о функции Manipulate и её опциях см. книгу В. П. Дьяконова [2, с. 512–513].
(рис 7.20) Функция Manipulate как расширенная альтернатива функции Animate
Если задаётся сразу несколько параметров манипуляции, то значения одного параметра могут зависеть от значений другого. Так на рис. 7.21 мы строим функцию Sin[a*x+b], имеющую два параметра — a и b. При этом границы изменения параметра b зависят от значения параметра а: параметр b может принимать значения от a до 5*а. В Out[1] на рис. 7.21 мы задали значение a=2.5 и выставили максимальное значение b, которое при данном a оказалось равно 12.5.
(рис 7.21) Функция Manipulate. Задание зависимых параметров манипуляции
В данной лекции мы значительно расширили наши знания в области визуализации математических зависимостей средствами встроенной графики Mathematica. В частности, мы познакомились с основными графическими функциями Mathematica для визуализации явных и параметрических зависимостей от двух и трёх переменных, научились изменять внешний вид рисунков при помощи необязательных аргументов графических функций — опций. Мы познакомились с трёхмерными графическими примитивами, правилами их задания и применения. Мы также научились визуализировать динамические изображения путём создания анимированных изображений.
ParametricPlot3D строит поверхность, а в каких — кривую в трёхмерном пространстве?Boxed;BoxRatios;ColorFunction;ViewPoint;Mesh;MeshStyle.Boxed, ViewPoint?Contours, ContourStyle, ContourShading, PlotPoints? Какие задачи они выполняются?ContourPlot3D? Каков формат обращения ней?JoinForm? Какие значения она может принимать?Manipulate? В каком виде может быть задан её итератор?-5 до 5, окрасьте первую поверхность красным, а вторую — зелёным. Пользуясь опцией ViewPoint, ориентируйте изображение построенных поверхностей таким образом, чтобы на экране оно выглядело как квадрат, разделённый по диагоналям на треугольники.При помощи опции BoxRatios преобразуйте рисунок так, чтобы изображённая на нём поверхность визуально воспринималась как
x от 0 до 30. Назовём полученное изображение "пружинкой" из-за сходства с соответствующим объектом. При помощи опции BoxRatios визуально "сожмите" "пружинку" в три раза; растяните в два раза; визуально преобразуйте звенья "пружины" из окружностей в эллипсы.
Окрасьте кривую в цвета радуги, используя соответствующую цветовую схему.
Contours, разбейте изображение на области, в которых $$f(x,y)>0$$ и $$f(x,y)<0$$.ListPlot3D. Для этого предварительно при помощи функции Table создайте список, содержащий значения переменных $$x$$ и $$y$$ и соответствующие им значения функции $$f(x,y)$$.
Постройте в отдельности друг от друга контурное и плотностное изображения этой же функции, затем совместите их на одном рисунке, предварительно убрав заливку на контурном изображении.
Используя только примитив "труба", нарисуйте каркас тетраэдра, куба, октаэдра.
Для создания анимации воспользуйтесь функцией Animate.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.