Spec-Zone.ru › Matplotlib 3.1

matplotlib.tri

Функции для работы с неструктурированными треугольными сетками.

class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None) [source]

Неструктурированная треугольная сетка, состоящая из npoints точек и ntri треугольников. Треугольники могут быть указаны пользователем или автоматически сгенерированы с помощью триангуляции Делоне.

Параметры:
x, y : array-like of shape (npoints)

Координаты точек сетки.

triangles : integer array_like of shape (ntri, 3), optional

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

mask : boolean array-like of shape (ntri), optional

Какие треугольники замаскированы.

Примечания

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

Атрибуты:
edges : int array of shape (nedges, 2)

Возвращает целочисленный массив формы (nedges, 2), содержащий все рёбра не замаскированных треугольников.

neighbors : int array of shape (ntri, 3)

Возвращает целочисленный массив формы (ntri, 3), содержащий соседние треугольники.

mask : bool array of shape (ntri, 3)

Замаскированные треугольники.

is_delaunay : bool

Является ли Triangulation вычисленной триангуляцией Делоне (где triangles не был указан) или нет.

calculate_plane_coefficients(self, z) [source]

Вычисляет коэффициенты уравнения плоскости для всех незамаскированных треугольников из координат точек (x, y) и заданного массива z формы (npoints). Возвращаемый массив имеет форму (npoints, 3) и позволяет вычислить значение z в позиции (x, y) в треугольнике tri, используя z = array[tri, 0] * x  + array[tri, 1] * y + array[tri, 2].

edges

Возвращает целочисленный массив формы (nedges, 2), содержащий все рёбра не замаскированных треугольников.

Каждая строка определяет ребро по индексу начальной точки и индексу конечной точки. Каждое ребро появляется только один раз, т.е. для ребра между точками i и j будет только либо (i, j), либо (j, i).

get_cpp_triangulation(self) [source]

Возвращает внутренний объект C++ Triangulation, создавая его при необходимости.

static get_from_args_and_kwargs(*args, **kwargs) [source]

Возвращает объект Triangulation из args и kwargs, и оставшиеся args и kwargs со значениями, которые были использованы.

Есть два варианта: либо первый аргумент — это объект Triangulation, в этом случае он возвращается, либо args и kwargs достаточны для создания нового Triangulation для возврата. В последнем случае см. Triangulation.__init__ для возможных args и kwargs.

get_masked_triangles(self) [source]

Возвращает массив треугольников, которые не замаскированы.

get_trifinder(self) [source]

Возвращает значение по умолчанию matplotlib.tri.TriFinder этой триангуляции, создавая его при необходимости. Это позволяет легко использовать один и тот же объект TriFinder.

neighbors

Возвращает целочисленный массив формы (ntri, 3), содержащий соседние треугольники.

Для каждого треугольника индексы трёх треугольников, которые разделяют общие рёбра, или -1, если такого соседнего треугольника нет. neighbors[i,j] — треугольник, который является соседом к ребру от точки с индексом triangles[i,j] до точки с индексом triangles[i,(j+1)%3].

set_mask(self, mask) [source]

Устанавливает или очищает маску массива. Это либо None, либо булевский массив формы (ntri).

class matplotlib.tri.TriFinder(triangulation) [source]

Абстрактный базовый класс для классов, используемых для поиска треугольников триангуляции, в которых лежат точки (x,y).

Вместо создания объекта класса, производного от TriFinder, обычно лучше использовать функцию matplotlib.tri.Triangulation.get_trifinder().

Производные классы реализуют __call__(x,y), где x,y — координаты точек array_like одинаковой формы.

class matplotlib.tri.TrapezoidMapTriFinder(triangulation) [source]

Базируется на: matplotlib.tri.trifinder.TriFinder

TriFinder класс, реализованный с помощью алгоритма карты трапеций из книги "Вычислительная геометрия, алгоритмы и приложения", второе издание, М. де Берг, М. ван Кревельд, М. Овермарс и О. Шварцкопф.

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

class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None) [source]

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

Производные классы реализуют следующие методы:

  • __call__(x, y) , где x, y — координаты точек array_like одинаковой формы, и возвращает массив с маской той же формы, содержащий интерполированные значения z.
  • gradient(x, y) , где x, y — координаты точек array_like одинаковой формы, и возвращает список из 2 массивов с маской той же формы, содержащих 2 производные интерполятора (производные интерполированных значений z по x и y).
END_OF_DOCUMENT_MARKER
class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None) [source]

Базы: matplotlib.tri.triinterpolate.TriInterpolator

LinearTriInterpolator выполняет линейную интерполяцию на треугольной сетке.

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

Параметры:
triangulation : Triangulation object

Триангуляция, по которой выполняется интерполяция.

z : array_like of shape (npoints,)

Массив значений, определенных в узлах сетки, для интерполяции.

trifinder : TriFinder object, optional

Если это не указано, будет использован стандартный TriFinder триангуляции, вызывая matplotlib.tri.Triangulation.get_trifinder().

Методы

`__call__` (x, y) ( Возвращает интерполированные значения в точках x,y)
`gradient` (x, y) (Возвращает интерполированные производные в точках x,y)
gradient(self, x, y) [source]

Возвращает список из 2-х массивов с масками, содержащих интерполированные производные в заданных точках x,y.

Параметры:
x, y : array-like

Координаты x и y одинаковой формы и любого количества измерений.

Возвращает:
dzdx, dzdy : np.ma.array

2 массива с масками той же формы, что и x и y; значения, соответствующие точкам (x,y) за пределами триангуляции, замаскированы. Первый возвращённый массив содержит значения \(\frac{\partial z}{\partial x}\), а второй — \(\frac{\partial z}{\partial y}\).

class matplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None) [source]

Базы: matplotlib.tri.triinterpolate.TriInterpolator

CubicTriInterpolator выполняет кубическую интерполяцию на треугольных сетках.

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

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

Параметры:
triangulation : Triangulation object

Триангуляция, по которой выполняется интерполяция.

z : array_like of shape (npoints,)

Массив значений, определенных в узлах сетки, для интерполяции.

kind : {'min_E', 'geom', 'user'}, optional

Выбор алгоритма сглаживания для вычисления производных интерполянта (по умолчанию 'min_E'):

  • если 'min_E': (по умолчанию) Производные в каждой вершине вычисляются для минимизации энергии изгиба.
  • если 'geom': Производные в каждой вершине вычисляются как взвешенное среднее соответствующих нормалей треугольников. Используется для оптимизации скорости (большие сетки).
  • если 'user': Пользователь предоставляет аргумент dz, вычисление не требуется.
trifinder : TriFinder object, optional

Если не указано, будет использован стандартный TriFinder триангуляции, вызывая matplotlib.tri.Triangulation.get_trifinder().

dz : tuple of array_likes (dzdx, dzdy), optional

Используется только если kind ='user'. В этом случае dz должен быть предоставлен как (dzdx, dzdy), где dzdx, dzdy — массивы той же формы, что и z, и представляют собой первые производные интерполянта в точках triangulation.

Примечания

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

Интерполяция основана на схеме подразделения Клоуза-Точера сетки triangulation (поясняя, каждый треугольник сетки будет разделен на 3 дочерних треугольника, и на каждом дочернем треугольнике интерполирующая функция является кубическим многочленом от 2 координат). Эта техника происходит из анализа метода конечных элементов (МКЭ); используемый элемент — сокращенный элемент Хсие-Клоуза-Точера (HCT). Его базисные функции описаны в [R0be0c58fd53f-1]. Гарантируется, что полученная функция является C1-гладкой, т.е. непрерывной, и её первые производные также непрерывны (это легко показать внутри треугольников, но это также верно при пересечении рёбер).

В случае по умолчанию (kind ='min_E'), интерполянт минимизирует энергию кривизны в функциональном пространстве, сгенерированном функциями формы элемента HCT — с заданными значениями, но произвольными производными в каждой вершине. Минимизируемый функционал — интеграл так называемой полной кривизны (реализация основана на алгоритме из [R0be0c58fd53f-2] — решение разреженных систем с помощью PCG):

\[E(z) = \frac{1}{2} \int_{\Omega} \left( \left( \frac{\partial^2{z}}{\partial{x}^2} \right)^2 + \left( \frac{\partial^2{z}}{\partial{y}^2} \right)^2 + 2\left( \frac{\partial^2{z}}{\partial{y}\partial{x}} \right)^2 \right) dx\,dy\]

Если пользователь выбирает случай kind ='geom', используется простое геометрическое приближение (взвешенное среднее векторов нормали треугольника), что может улучшить скорость на очень больших сетках.

Ссылки

[R0be0c58fd53f-1] Michel Bernadou, Kamal Hassan, "Basis functions for general Hsieh-Clough-Tocher triangles, complete or reduced.", International Journal for Numerical Methods in Engineering, 17(5):784 - 789. 2.01.
[R0be0c58fd53f-2] C.T. Kelley, "Iterative Methods for Optimization".

Методы

`__call__` (x, y) ( Возвращает интерполированные значения в точках x,y)
`gradient` (x, y) (Возвращает интерполированные производные в точках x,y)
gradient(self, x, y) [source]

Возвращает список из 2-х массивов с масками, содержащих интерполированные производные в заданных точках x,y.

Параметры:
x, y : array-like

Координаты x и y одинаковой формы и любого количества измерений.

Возвращает:
dzdx, dzdy : np.ma.array

2 массива с масками той же формы, что и x и y; значения, соответствующие точкам (x,y) за пределами триангуляции, замаскированы. Первый возвращённый массив содержит значения \(\frac{\partial z}{\partial x}\), а второй — \(\frac{\partial z}{\partial y}\).

class matplotlib.tri.TriRefiner(triangulation) [source]

Абстрактный базовый класс для классов, реализующих уточнение сетки.

TriRefiner инкапсулирует объект Triangulation и предоставляет инструменты для уточнения сетки и интерполяции.

Производные классы должны реализовать:

  • refine_triangulation(return_tri_index=False, **kwargs) , где необязательные ключевые аргументы kwargs определены в каждой конкретной реализации TriRefiner, и которая возвращает:

    • уточненную триангуляцию
    • необязательно (в зависимости от return_tri_index), для каждой точки уточнённой триангуляции: индекс треугольника исходной триангуляции, к которому она принадлежит.
  • refine_field(z, triinterpolator=None, **kwargs) , где:

    • массив z значений поля (для уточнения), определенных в узлах базовой триангуляции
    • triinterpolator — TriInterpolator (необязательно)
    • другие необязательные ключевые аргументы kwargs определены в каждой конкретной реализации TriRefiner

    и которая возвращает (в виде кортежа) уточнённую треугольную сетку и интерполированные значения поля в узлах уточнённой триангуляции.

class matplotlib.tri.UniformTriRefiner(triangulation) [source]

Основа: matplotlib.tri.trirefine.TriRefiner

Равномерное уточнение сетки путём рекурсивного деления.

Параметры:
triangulation : Triangulation

Оборачиваемая триангуляция (для уточнения)

refine_field(self, z, triinterpolator=None, subdiv=3) [source]

Уточняет поле, определённое на оборачиваемой триангуляции.

Возвращает refi_tri (уточнённая триангуляция), refi_z (интерполированные значения поля в узлах уточнённой триангуляции).

Параметры:
z : 1d-array-like of length n_points

Значения поля для уточнения, определённые в узлах оборачиваемой триангуляции. (n_points — количество точек в исходной триангуляции)

triinterpolator : TriInterpolator, optional

Интерполятор, используемый для интерполяции поля. Если не указан, используется CubicTriInterpolator.

subdiv : integer, optional

Уровень рекурсии для деления. По умолчанию 3. Каждый треугольник будет разделён на 4**subdiv дочерних треугольника.

Возвращает:
refi_tri : Triangulation object

Возвращаемая уточнённая триангуляция

refi_z : 1d array of length: refi_tri node count.

Возвращаемое интерполированное поле (в узлах refi_tri)

refine_triangulation(self, return_tri_index=False, subdiv=3) [source]

Вычисляет равномерно уточнённую триангуляцию refi_triangulation оборачиваемой triangulation.

Эта функция уточняет оборачиваемую триангуляцию, разбивая каждый исходный треугольник на 4 дочерних подтреугольника, построенных на серединах сторон, рекурсивно (уровень рекурсии subdiv). В конечном итоге каждый треугольник делится на 4**subdiv дочерних треугольников. Значение по умолчанию для subdiv равно 3, что приводит к 64 уточнённым подтреугольникам для каждого треугольника исходной триангуляции.

Параметры:
return_tri_index : boolean, optional

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

subdiv : integer, optional

Уровень рекурсии для деления. По умолчанию 3. Каждый треугольник будет разделён на 4**subdiv дочерних треугольников.

Возвращает:
refi_triangulation : Triangulation

Возвращаемая уточнённая триангуляция

found_index : array-like of integers

Индекс исходной триангуляции, содержащий треугольник для каждой точки refi_triangulation. Возвращается только если return_tri_index установлено в True.

class matplotlib.tri.TriAnalyzer(triangulation) [source]

Определяет основные инструменты для анализа и улучшения триангулярных сеток.

TriAnalyzer оборачивает объект Triangulation и предоставляет базовые инструменты для анализа и улучшения сетки.

Параметры:
triangulation : Triangulation object

Оборачиваемая триангуляция для анализа.

Атрибуты:
`scale_factors`
circle_ratios(self, rescale=True) [source]

Возвращает меру плоскогости треугольников триангуляции.

Отношение радиуса вписанной окружности к радиусу описанной окружности — широко используемый показатель плоскогости треугольника. Оно всегда <= 0.5 и == 0.5 только для равносторонних треугольников. Отношения окружностей ниже 0,01 обозначают очень плоские треугольники.

Чтобы избежать чрезмерно низких значений из-за разницы в масштабе между 2 осями, триангулярную сетку можно предварительно масштабировать так, чтобы она поместилась в единичный квадрат с помощью scale_factors (только если rescale равно True, что является значением по умолчанию).

Параметры:
rescale : boolean, optional

Если True, внутренне будет произведено масштабирование (на основе scale_factors), чтобы (незамаскированные) треугольники точно поместились в сетку единичного квадрата. По умолчанию True.

Возвращает:
circle_ratios : masked array

Отношение радиуса вписанной окружности к радиусу описанной окружности для каждого «масштабированного» треугольника оборачиваемой триангуляции. Значения, соответствующие замаскированным треугольникам, маскируются.

get_flat_tri_mask(self, min_circle_ratio=0.01, rescale=True) [source]

Удаляет чрезмерно плоские граничные треугольники из триангуляции.

Возвращает маску new_mask, которая позволяет очистить оборачиваемую триангуляцию от её граничных плоских треугольников (согласно их circle_ratios()). Эта маска предназначена для последующего применения к триангуляции с помощью matplotlib.tri.Triangulation.set_mask(). new_mask — это расширение начальной маски триангуляции в том смысле, что первоначально замаскированный треугольник останется замаскированным.

Массив new_mask вычисляется рекурсивно; на каждой итерации плоские треугольники удаляются только в том случае, если они имеют общую сторону с текущей границей сетки. Таким образом, новые отверстия в области триангуляции не будут создаваться.

Параметры:
min_circle_ratio : float, optional

Граничные треугольники с отношением радиусов вписанной/описанной окружностей r/R будут удалены, если r/R < min_circle_ratio. Значение по умолчанию: 0,01

rescale : boolean, optional

Если True, сначала внутренне выполняется масштабирование (на основе scale_factors), чтобы (незамаскированные) треугольники точно поместились в сетку единичного квадрата. Это масштабирование учитывает разницу в масштабе между 2 осями. По умолчанию (и рекомендуется) True.

Возвращает:
new_mask : array-like of booleans

Маска для применения к оборачиваемой триангуляции. Все первоначально замаскированные треугольники остаются замаскированными в new_mask.

Примечания

Причина, по которой эта функция создана в том, что триангуляция Делоне — для неупорядоченного набора точек — иногда содержит почти плоские треугольники на границе, что приводит к артефактам в графиках (особенно при контурном отображении высокой точности). Замаскированные с вычисленной new_mask, оборачиваемая триангуляция больше не будет содержать незамаскированных граничных треугольников с отношением окружностей ниже min_circle_ratio, тем самым улучшая качество сетки для последующих графиков или интерполяции.

scale_factors

Факторы для масштабирования триангуляции в единичный квадрат.

Возвращает k, кортеж из 2 коэффициентов масштабирования.

Возвращает:
k : tuple of 2 floats (kx, ky)

Кортеж чисел с плавающей запятой, которые масштабируют триангуляцию : [triangulation.x * kx, triangulation.y * ky] точно помещается в единичный квадрат.

© 2012–2018 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.1.1/api/tri_api.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API