Spec-Zone.ru › Matplotlib 3.2

matplotlib.tri

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

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

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

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

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

trianglesinteger array-like of shape (ntri, 3), optional

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

maskboolean array-like of shape (ntri), optional

Треугольники, которые исключаются из рассмотрения.

Примечания

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

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

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

neighborsint array of shape (ntri, 3)

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

maskbool array of shape (ntri, 3)

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

is_delaunaybool

Является ли триангуляция вычисленной триангуляцией Делоне (где 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].

property 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.

property 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 — массивные координаты точек одинаковой формы.

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

Bases: matplotlib.tri.trifinder.TriFinder

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

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

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

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

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

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

Bases: matplotlib.tri.triinterpolate.TriInterpolator

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

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

Параметры:
triangulationTriangulation object

Триангуляция для интерполяции.

zarray-like of shape (npoints,)

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

trifinderTriFinder 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, yarray-like

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

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

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

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

Bases: matplotlib.tri.triinterpolate.TriInterpolator

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

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

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

Параметры:
triangulationTriangulation object

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

zarray-like of shape (npoints,)

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

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

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

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

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

dztuple of array-likes (dzdx, dzdy), optional

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

Примечания

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

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

В случае по умолчанию (kind ='min_E') интерполянт минимизирует энергию кривизны в функциональном пространстве, сгенерированном функциями формы элемента ХКТ — со значениями, но произвольными производными в каждой вершине. Минимизируемый функционал — интеграл так называемой полной кривизны (реализация основана на алгоритме из [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', используется простое геометрическое приближение (взвешенное среднее векторов нормалей к треугольникам), что может улучшить скорость на очень больших сетках.

Ссылки

[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.
[2] C.T. Kelley, "Итерационные методы для оптимизации".

Методы

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

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

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

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

Возвращает:
dzdx, dzdynp.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

Равномерное уточнение сетки путём рекурсивных подразделений.

Параметры:
triangulationTriangulation

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

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

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

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

Параметры:
z1d-array-like of length n_points

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

triinterpolatorTriInterpolator, optional

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

subdivinteger, optional

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

Возвращает:
refi_triTriangulation object

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

refi_z1d 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_indexboolean, optional

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

subdivinteger, optional

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

Возвращает:
refi_triangulationTriangulation

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

found_indexarray-like of integers

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

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

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

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

Параметры:
triangulationTriangulation object

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

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

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

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

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

Параметры:
rescaleboolean, optional

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

Возвращает:
circle_ratiosmasked 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_ratiofloat, optional

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

rescaleboolean, optional

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

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

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

Примечания

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

property scale_factors

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

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

Возвращает:
ktuple 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.2.2/api/tri_api.html

Spec-Zone.ru

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