На этом шаге мы рассмотрим примеры использования этой функции.
Функция строит поверхность по переданному 2D-массиву высот.
Наиболее часто используемые варианты вызова surf() имеют следующий вид:
surf(s, ...) surf(x, y, s, ...) surf(x, y, f, ...)
Аргументы x, y, s, f являются позиционными (то есть их нельзя передавать с указанием имени параметра). Параметр s - это 2D-массив данных, каждый элемент которого является значением высоты поверхности; x, у - могут иметь размерность 1D или 2D, они используются для индексации массива s; вместо непосредственно 2D-массива с данными можно передать функцию f, которая для наборов координат x и у будет выдавать значения высоты уровня поверхности. Остальные аргументы функции surf() являются именованными. В дополнение к указанным на 162 шаге функция предоставляет следующие параметры:
Будем работать со следующим набором данных:
x, y = np.mgrid[-2:2:0.1, -2:2:0.1] z = 5 * np.cos(x * y) * np.sin(x * y)
Построим поверхность:
mlab.surf(z) mlab.show()
Вот полный текст приложения:
import numpy as np from mayavi import mlab x, y = np.mgrid[-2:2:0.1, -2:2:0.1] z = 5 * np.cos(x * y) * np.sin(x * y) mlab.surf(z) mlab.show()
Рис.1. Демонстрация работы функции surf()
Передадим в surf() помимо z массивы x и у:
import numpy as np from mayavi import mlab x, y = np.mgrid[-2:2:0.1, -2:2:0.1] z = 5 * np.cos(x * y) * np.sin(x * y) mlab.surf(x, y, z) mlab.show()
Получим следующее изображение, представленное на рисунке 2.
Рис.2. Демонстрация работы с параметрами x, y, z функции surf()
Так произошло потому, что в случае, когда мы передавали только массив z, в качестве значений координат (x, у) принимались индексы этого массива, во втором варианте, в дополнение к z были переданы предварительно сформированные массивы x и у. Обратите внимание, что шаг между соседними значениями в этих массивах 0.1, а не 1, как было в первом варианте, поэтому высоты и впадины имеют более выраженный вид.
На следующем шаге мы закончим изучение этого вопроса.