3. Трехмерная графика

 

Трехмерная графика

 

Трехмерная графика, называемая также ЗD-графикой, представляет в аксонометрической проекции объемное изображение поверхностей или фигур, которые описываются либо функциями двух переменных, либо параметрически заданными координатами объектов. В данном разделе описаны многие способы построения трехмерных графиков, начиная от простых контурных графиков и кончая графиками поверхностей и фигур с функциональной окраской.

Построение контурных графиков

Контурные графики, или графики линий равных высот, используются для отображения поверхностей на плоскости. Они удобны для выявления всех экстремумов функций в пределах области графика. Такие графики являются линиями пересечения поверхности с секущими горизонтальными плоскостями, расположенными параллельно друг под другом. Они часто используются в картографии.

Основными функциями и директивами для построения контурных графиков являются следующие:

  • ContourPlot[f,{x, xmin, xmax}, {у, ymin, ymax}] — порождает контурный график f как функции от х и у;
  • ContourGraphics [array] — представляет контурный график массива array;
  • ListContourPlot[array] — формирует контурный график из массива величин высот.

Этих функций достаточно для построения практически любых монохромных графиков такого типа.

Для управления возможностями графической функции ContourPlot используются опции, полный список которых выводит команда Options [ContourGraphics ]. Помимо уже рассмотренных ранее опций используются следующие:

  • ColorFunction — задает окраску областей между линиями;
  • Contours — задает число контурных линий;
  • ContourLines — задает прорисовку явных (explicit) контурных линий;
  • ContourShading — задает затенение областей между контурными линиями;
  • ContourSmoothing — задает сглаживание контурных линий;
  • ContourStyle — задает стиль рисуемых линий для контурных графиков;
  • MeshRange — задает области изменения х- и y-координат.

Рисунок 8.15 показывает построение контурного графика с окраской промежуточных областей между линиями. Окраска обеспечивается опцией ColorFunction-> Hue. Опция ContourSmoothing -> True задает сглаживание контурных линий.

Рис. 8.15. Контурный график поверхности sin(x у) с закраской областей между линиями равного уровня оттенками серого цвета

Следующий пример (рис. 8.16) иллюстрирует эффективность применения опции ContourShading. Если задать ее значение равным False, то заполнение пространства между линиями будет отсутствовать. Таким образом, в данном случае строятся только линии равного уровня.

Рис. 8.16. Контурный график, представленный только линиями равного уровня

Иногда график оказывается более наглядным, если убрать построение контурных линий, но оставить закраску областей между линиями. Такой вариант графика более предпочтителен, если нужно наблюдать качественную картину. Для построения такого графика надо использовать опцию ContourLine->False (рис. 8.17).

Рис. 8.17. Контурный график без пиний равного уровня

В данном случае используется вариант монохромной окраски областей между линиями (PostScript). Он может оказаться предпочтителен, например, если предполагается печать графика монохромным принтером.

Построение графиков плотности

Функцией двух переменных f(x, у) может описываться плотность некоторой среды. Для построения графиков плотности используются следующие графические функции:

  • DensityGraphics [array] — является представлением графика плотности;
  • DensityPlot[f, {х, xmin, xmax}, {у, ymin, ymax}] — строит график плотности f как функции от х и у;
  • ListDensityPlot [array] — формирует график плотности из массива величин высот.

С этими функциями используется множество (в основном уже рассмотренных) опций. Их перечень можно получить с помощью функции Options.

Внешне график плотности похож на контурный график. Однако для него характерно выделение элементарных участков (с равной плотностью) в форме квадратиков (рис. 8.18).

Рис. 8.18. График плотности

График плотности (рис. 8.18) также дан в режиме PostScript. Цветная функциональная раскраска таких графиков тоже возможна (см. опции, указанные выше для контурных графиков).

Построение графиков поверхностей — функция Plot 3D

Функция двух переменных z = f(x, у) образует в пространстве некоторую трехмерную поверхность или фигуру. Для их построения приходится использовать координатную систему с тремя осями координат: х, у и z. Поскольку экран дисплея плоский, то на самом деле объемность фигур лишь имитируется — используется хорошо известный способ наглядного представления трехмерных фигур с помощью аксонометрической проекции.

Вместо построения всех точек фигуры обычно строится ее каркасная модель, содержащая линии разреза фигуры по взаимно перпендикулярным плоскостям. В результате фигура представляется в виде совокупности множества криволинейных четырехугольников. Для придания фигуре большей естественности используются алгоритм удаления невидимых линий каркаса и функциональная закраска четырехугольников с целью имитации бокового освещения фигуры.

Для построения графиков трехмерных поверхностей используется основная графическая функция Plot 3D:

  • Plot3D[f, {x, xmin, xmax), {у, ymin, ymax}] — строит трехмерный график функции f переменных х и у;
  • Plot3D[{f, s}, {x, xmin, xmax}, {y, ymin, ymax}] — строит трехмерный график, в котором высоту поверхности определяет параметр f, а затенение — параметр s.

На рис. 8.19 показан пример построения поверхности, описываемой функцией двух переменных cos(x у) при х и у, меняющихся от -3 до 3. Поверхность строится в виде каркаса с прямоугольными ячейками с использованием функциональной окраски. Все опции заданы по умолчанию.

Рис. 8.19. Пример построения поверхности cos(xy) функцией Plot3D с опциями по умолчанию

Этот график будем считать исходным для демонстрации его модификаций, получаемых путем изменения опций.

Опции и директивы трехмерной графики

Для модификации трехмерных графиков могут использоваться многочисленные опции и директивы, список которых дан в приложении. Их применение позволяет строить большое число графиков различных типов даже при задании одной и той же поверхности. В качестве примера рассмотрим отдельные кадры документа, демонстрирующего влияние опций на вид трехмерной математической поверхности.

На рис. 8.20 показана исходная поверхность (см. рис. 8.19), построенная с применением опции PlotPoint->50. Это означает, что поверхность по каждой оси делится на 50 частей (в исходном графике по умолчанию используется деление на 10 частей). Масштаб по вертикали задается автоматически, с тем чтобы все высоты поверхности не ограничивались.

На рис. 8.21 показана та же поверхность, полученная с применением опции PlotRange-> {0, 0.5}, срезающей верхнюю часть поверхности (точки с ординатами выше 0.5). График поверхности при этом существенно меняется (сравните с рис. 8.20).

Рис. 8.20. Поверхность рис. 8.19 с большим числом ячеек

Рис. 8.21. Математическая поверхность с отсеченной верхней частью

Опция Boxed -> False удаляет ограничивающие рамки, образующие «ящик», в который вписывается построенная трехмерная поверхность (рис. 8.22). Остаются лишь координатные оси.

Опция Viewpoint позволяет включить при построении отображение перспективы и изменять углы, под которыми рассматривается фигура. Рисунок 8.23 иллюстрирует применение этой опции.

Рис. 8.22. Построение трехмерной поверхности без ограничительного «ящика»

Рис. 8.23. Математическая поверхность, построенная с учетом перспективы

Опция Mesh -> False позволяет удалить линии каркаса фигуры. Нередко это придает фигуре более естественный вид (рис. 8.24) — обычно мы наблюдаем такие фигуры без линий каркаса.

В ряде случаев, напротив, именно линии каркаса несут важную информацию. Система строит каркас трехмерных поверхностей двумя способами — с использованием и без использования алгоритма удаления невидимых линий. Рисунок 8.25 показывает результат построения при использовании алгоритма удаления невидимых линий. Нетрудно заметить, что в этом случае поверхность выглядит достаточно эстетично даже без применения функциональной закраски.

Рис. 8.24. Математическая поверхность с удаленными линиями каркаса

Рис. 8.25. Построение каркаса математической поверхности с использованием алгоритма удаления невидимых линий

На рис. 8.26 показано построение каркаса без удаления невидимых линий. Такой вид математическая поверхность имеет, если представить ее построенной из тонких проволочек, висящих в пространстве. Это дает дополнительную информацию о пространственной фигуре, но эстетически она выглядит хуже, чем фигура, построенная с применением алгоритма удаления невидимых линий каркаса.

Таким образом, как и ранее, применение опций позволяет легко управлять характером и типом графиков, придавая им вид, удобный для заданного применения. На рис. 8.27 показан пример построения трехмерного графика с применением одновременно нескольких опций.

Риc. 8.26. Построение каркаса математической поверхности без использования алгоритма удаления невидимых линий

Риc. 8.27. Пример построения трехмерного графика с несколькими опциями

Приведенные примеры самым наглядным образом показывают, насколько легко модифицируются графики с помощью различных опций. Разумеется, есть множество возможностей для иных модификаций, которые пользователь может опробовать самостоятельно.

В разделе приложения, посвященном данному уроку, указан ряд дополнительных директив и опций трехмерной графики. С их помощью можно расширить возможности построения графиков. Читателю рекомендуется самостоятельно построить графики ряда поверхностей с использованием различных опций.

Графическая функция ListPlot3D

Часто трехмерная поверхность задается массивом своих высот (аппликат). Для построения графика в этом случае используется графическая функция ListPlotSD:

  • ListPlot3D [array] — строит трехмерный график поверхности, представленной массивом значений высот;
  • ListPlot3D [array, shades] — строит график так, что каждый элемент поверхности штрихуется (затеняется) согласно спецификации shades.

Plot Joined — дополнительная опция для ListPlot, указывающая, следует ли соединять линией точки, нанесенные на график.

Пример применения функции ListPlotSD показан на рис. 8.28. График построен по данным таблицы tS, формирующей значения аппликат поверхности, которая описывается функцией cos(xy).

Рис. 8.28. Пример применения функции ListPlotSD

Применяя описанные в этом разделе графические функции вместе с их — опциями, директивами и примитивами, можно строить огромное число типов трехмерных графиков. Однако многие такие графики могут создаваться с помощью дополнительных функций, входящих в пакет расширения Graphics. Он описан в уроке 13.

Командой Options [ListPlot3D] можно вывести полный список опций данной функции, чтобы использовать их для модификации графиков, которые строит эта функция.

 

gl8-15.jpg

Изображение: 

gl8-16.jpg

Изображение: 

gl8-17.jpg

Изображение: 

gl8-18.jpg

Изображение: 

gl8-19.jpg

Изображение: 

gl8-20.jpg

Изображение: 

gl8-21.jpg

Изображение: 

gl8-22.jpg

Изображение: 

gl8-23.jpg

Изображение: 

gl8-24.jpg

Изображение: 

gl8-25.jpg

Изображение: 

gl8-26.jpg

Изображение: 

gl8-27.jpg

Изображение: 

gl8-28.jpg

Изображение: