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.TriFinderTriFinderкласс, реализованный с помощью алгоритма карты трапеций из книги "Вычислительная геометрия, алгоритмы и приложения", второе издание, М. де Берг, М. ван Кревльд, М. Овермарс и О. Шварцкопф.Триангуляция должна быть корректной, т.е. она не должна содержать дублирующих точек, треугольников, образованных коллинеарными точками, или перекрывающихся треугольников. Алгоритм обладает некоторой толерантностью к треугольникам, образованным коллинеарными точками, но на этом не следует полагаться.
-
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;
и которая возвращает (в качестве кортежа) уточнённую треугольную сетку и интерполированные значения поля в узлах уточнённой триангуляции.
-
-
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]точно вписывалась в единичный квадрат.
-
END_OF_DOCUMENT_MARKER© 2012–2018 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.3.3/api/tri_api.html -