Spec-Zone.ru › Matplotlib 3.3

matplotlib.tri

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

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

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

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

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

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

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

maskbool array-like of shape (ntri), optional

Треугольники, которые следует игнорировать.

Примечания

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

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

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

neighborsint array of shape (ntri, 3)

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

maskbool array of shape (ntri, 3)

Игнорируемые треугольники.

is_delaunaybool

Является ли 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].

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]

Устанавливает или сбрасывает маску массива.

Параметры:
maskNone or bool array of length ntri
class matplotlib.tri.TriContourSet(ax, *args, **kwargs) [source]

Наследуется от matplotlib.contour.ContourSet

Создаёт и хранит набор линий контура или заполненных областей для треугольной сетки.

Метод для вызова пользователем: clabel

Атрибуты:
ax

Объект осей, на котором отображаются контуры.

collections

Список LineCollections или PolyCollections.

levels

Уровни контуров.

layers

То же, что и levels для линий контура; посередине между уровнями для заполненных контуров. См. _process_colors().

Отображает линии контура треугольной сетки или заполненные области в зависимости от того, является ли ключевой аргумент 'filled' False (по умолчанию) или True.

Первый аргумент инициализатора должен быть объектом осей. Остальные аргументы и ключевые аргументы описаны в документации tricontour.

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

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

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

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

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 — массивоподобные координаты точек одинаковой формы, и возвращает массив с маской той же формы, содержащий интерполированные 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

Линейный интерполятор на треугольной сетке.

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

Параметры:
triangulationTriangulation

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

zarray-like of shape (npoints,)

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

trifinderTriFinder, optional

Если это не указано, используется стандартный TriFinder триангуляции, вызывая 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}\).

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

Bases: matplotlib.tri.triinterpolate.TriInterpolator

Кубический интерполятор на треугольной сетке.

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

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

Параметры:
triangulationTriangulation

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

zarray-like of shape (npoints,)

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

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

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

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

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

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

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

Примечания

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

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

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

Методы

`__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;

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

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

Базовые классы: matplotlib.tri.trirefine.TriRefiner

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

Параметры:
triangulationTriangulation

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

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

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

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

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

triinterpolatorTriInterpolator, optional

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

subdivint, default: 3

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

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

Полученная уточнённая триангуляция.

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 дочерних треугольников.

Параметры:
return_tri_indexbool, default: False

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

subdivint, default: 3

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

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

Уточнённая триангуляция.

found_indexint array

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

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

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

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

Параметры:
triangulationTriangulation

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

Атрибуты:
scale_factors

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

circle_ratios(self, rescale=True) [source]

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

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

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

Параметры:
rescalebool, default: True

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

Возвращает:
массив с маской

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

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

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

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

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

Параметры:
min_circle_ratiofloat, default: 0.01

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

rescalebool, default: True

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

Возвращает:
массив булевых значений

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

Примечания

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

property scale_factors

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

Возвращает:
(float, float)

Множители масштабирования (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.3.3/api/tri_api.html

END_OF_DOCUMENT_MARKER

Spec-Zone.ru

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