matplotlib.tri
Функции для неструктурированных треугольных сеток.
- classmatplotlib.tri.Triangulation(x, y, triangles=None, mask=None)[source]
-
Неструктурированная треугольная сетка, состоящая из npoints точек и ntri треугольников. Треугольники могут быть заданы пользователем или автоматически сгенерированы с использованием триангуляции Делоне.
- Параметры
-
- x, y(npoints,) массив-подобный объект
-
Координаты узлов сетки.
- triangles(ntri, 3) массив-подобный объект целых чисел, необязательно
-
Для каждого треугольника индексы трёх точек, образующих треугольник, упорядоченные против часовой стрелки. Если не указаны, вычисляется триангуляция Делоне.
- mask(ntri,) массив-подобный объект булевых значений, необязательно
-
Какие треугольники замаскированы.
Примечания
Для того, чтобы триангуляция была корректной, она не должна содержать дублирующих точек, треугольников, образованных коллинеарными точками, или перекрывающихся треугольников.
- Атрибуты
-
- triangles(ntri, 3) массив целых чисел
-
Для каждого треугольника индексы трёх точек, образующих треугольник, упорядоченные против часовой стрелки. Если вы хотите учесть mask, используйте
get_masked_trianglesвместо этого. - mask(ntri, 3) массив булевых значений
-
Замаскированные треугольники.
- is_delaunaybool
-
Является ли триангуляция вычисленной триангуляцией Делоне (где triangles не было указано) или нет.
- calculate_plane_coefficients(z)[source]
-
Вычисление коэффициентов уравнения плоскости для всех незамаскированных треугольников по координатам точек (x, y) и указанному массиву z формы (npoints). Возвращаемый массив имеет форму (npoints, 3) и позволяет вычислить значение z в позиции (x, y) в треугольнике tri с использованием
z = array[tri, 0] * x + array[tri, 1] * y + array[tri, 2].
- propertyedges
-
Возвращает целочисленный массив формы (nedges, 2), содержащий все рёбра не замаскированных треугольников.
Каждая строка определяет ребро по индексу начальной точки и конечной точки. Каждое ребро встречается только один раз, т.е. для ребра между точками i и j будет только либо (i, j), либо (j, i).
- get_cpp_triangulation()[source]
-
Возвращает базовый объект C++ Triangulation, создавая его при необходимости.
- staticget_from_args_and_kwargs(*args, **kwargs)[source]
-
Возвращает объект Triangulation из args и kwargs, а оставшиеся args и kwargs с удалёнными значениями.
Существуют две альтернативы: либо первый аргумент — объект Triangulation, в таком случае он возвращается, либо args и kwargs достаточны для создания нового Triangulation для возвращения. В последнем случае см. Triangulation.__init__ для возможных args и kwargs.
- get_masked_triangles()[source]
-
Возвращает массив треугольников, которые не замаскированы.
- get_trifinder()[source]
-
Возвращает значение по умолчанию
matplotlib.tri.TriFinderэтой триангуляции, создавая его при необходимости. Это позволяет легко использовать один и тот же объект TriFinder.
- propertyneighbors
-
Возвращает целочисленный массив формы (ntri, 3), содержащий соседние треугольники.
Для каждого треугольника индексы трёх треугольников, которые разделяют общие рёбра, или -1, если такого соседнего треугольника нет.
neighbors[i, j]является треугольником, который является соседом ребра от точки с индексомtriangles[i, j]до точки с индексомtriangles[i, (j+1)%3].
- set_mask(mask)[source]
-
Устанавливает или сбрасывает маску массива.
- Параметры
-
- maskNone или массив булевых значений длиной ntri
- classmatplotlib.tri.TriContourSet(ax, *args, **kwargs)[source]
-
Базовый класс:
matplotlib.contour.ContourSetСоздание и хранение набора линий контура или заполненных областей для треугольной сетки.
Этот класс обычно не создается напрямую пользователем, но используется
tricontourиtricontourf.- Атрибуты
-
-
ax
Axes -
Объект Axes, в котором отрисовываются контуры.
-
collections
silent_listобъектовPathCollection -
Объекты
Artist, представляющие контур. Это список объектовPathCollectionдля линий и заполненных контуров. - levelsмассив
-
Значения уровней контура.
- layersмассив
-
Аналогично levels для линий контура; значение посередине между уровнями для заполненных контуров. См.
ContourSet._process_colors.
-
ax
Отрисовка линий контура или заполненных областей треугольной сетки, в зависимости от того, является ли ключевое слово arg 'filled' False (по умолчанию) или True.
Первый аргумент инициализатора должен быть объектом axes. Остальные аргументы и ключевые аргументы описаны в документации к
tricontour.
- classmatplotlib.tri.TriFinder(triangulation)[source]
-
Абстрактный базовый класс для классов, используемых для поиска треугольников Triangulation, в которых лежат точки (x, y).
Вместо создания объекта класса, производного от TriFinder, обычно лучше использовать функцию
Triangulation.get_trifinder.Производные классы реализуют __call__(x, y), где x и y — массивоподобные координаты точек, имеющие одинаковую форму.
- classmatplotlib.tri.TrapezoidMapTriFinder(triangulation)[source]
-
Базируется на
matplotlib.tri.trifinder.TriFinderTriFinderкласс, реализованный с использованием алгоритма карты трапеций из книги "Computational Geometry, Algorithms and Applications", второе издание, авторы M. de Berg, M. van Kreveld, M. Overmars и O. Schwarzkopf.Треугольная сетка должна быть валидной, т.е. не должна содержать дублирующих точек, треугольников, образованных коллинеарными точками или перекрывающихся треугольников. Алгоритм обладает некоторой толерантностью к треугольникам, образованным коллинеарными точками, но на этом полагаться не следует.
- classmatplotlib.tri.TriInterpolator(triangulation, z, trifinder=None)[source]
-
Абстрактный базовый класс для классов, используемых для интерполяции на треугольной сетке.
Производные классы реализуют следующие методы:
-
__call__(x, y), где x, y — массивоподобные координаты точек с одинаковой формой, и возвращает массив значений z с маскировкой. -
gradient(x, y), где x, y — массивоподобные координаты точек с одинаковой формой, и возвращает список из 2-х массивов значений z с маскировкой, содержащих 2 производные интерполятора (производные интерполированных значений z по x и y).
-
- classmatplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None)[source]
-
Базируется на
matplotlib.tri.triinterpolate.TriInterpolatorЛинейный интерполятор на треугольной сетке.
Каждый треугольник представляется плоскостью, таким образом, что интерполированное значение в точке (x, y) лежит на плоскости треугольника, содержащего (x, y). Интерполированные значения поэтому непрерывны по всей треугольной сетке, но их первые производные разрывны на рёбрах между треугольниками.
- Параметры
-
-
triangulation
Triangulation -
Треугольная сетка для интерполяции.
- z(npoints,) array-like
-
Массив значений, определённых в узлах сетки, между которыми требуется интерполяция.
-
trifinder
TriFinder, необязательно -
Если это не указано, будет использован по умолчанию TriFinder треугольной сетки, вызывая
Triangulation.get_trifinder.
-
triangulation
Методы
`__call__` (x, y)
(Возвращает интерполированные значения в точках (x, y).)
`gradient` (x, y)
(Возвращает интерполированные производные в точках (x, y).)
- gradient(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}\).
- classmatplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None)[source]
-
Bases:
matplotlib.tri.triinterpolate.TriInterpolatorКубический интерполятор на треугольной сетке.
В одномерном случае — на отрезке — кубическая интерполирующая функция определяется значениями функции и её производной на обоих концах. Это почти то же самое в 2D внутри треугольника, за исключением того, что значения функции и её двух производных должны быть определены в каждом узле треугольника.
CubicTriInterpolator принимает значения функции в каждом узле (предоставленные пользователем) и внутренне вычисляет значения производных, что приводит к гладкой интерполяции. (В качестве специальной функции пользователь также может задать значения производных в каждом узле, но это не предполагается как стандартное использование.)
- Параметры
-
-
triangulation
Triangulation -
Треугольная сетка для интерполяции.
- z(npoints,) array-like
-
Массив значений, определённых в узлах сетки, для интерполяции между ними.
- kind{'min_E', 'geom', 'user'}, optional
-
Выбор алгоритма сглаживания для вычисления производных интерполянта (по умолчанию 'min_E'):
- если 'min_E': (по умолчанию) Производные в каждом узле вычисляются для минимизации энергии изгиба.
- если 'geom': Производные в каждом узле вычисляются как взвешенная средняя величина соответствующих нормалей треугольников. Используется для оптимизации скорости (большие сетки).
- если 'user': Пользователь предоставляет аргумент dz, вычисление не требуется.
-
trifinder
TriFinder, optional -
Если не указано, используется значение по умолчанию для TriFinder треугольной сетки, вызываемое с помощью
Triangulation.get_trifinder. - dztuple of array-likes (dzdx, dzdy), optional
-
Используется только если kind ='user'. В этом случае dz должен быть задан как (dzdx, dzdy), где dzdx, dzdy — массивы такой же формы, что и z, и представляют собой первые производные интерполянта в точках triangulation.
-
triangulation
Примечания
Это примечание немного техническое и описывает, как вычисляется кубическая интерполяция.
Интерполяция основана на схеме подразделения Клоха-Точера для сетки 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, "Iterative Methods for Optimization".
Методы
`__call__` (x, y)
(Возвращает интерполированные значения в точках (x, y).)
`gradient` (x, y)
(Возвращает интерполированные производные в точках (x, y).)
- gradient(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}\).
- classmatplotlib.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;
и которая возвращает (в виде кортежа) уточнённую треугольную сетку и интерполированные значения поля в узлах уточнённой треугольной сетки.
-
- classmatplotlib.tri.UniformTriRefiner(triangulation)[source]
-
Основы:
matplotlib.tri.trirefine.TriRefinerРавномерное уточнение сетки путём рекурсивного деления.
- Параметры
-
-
triangulation
Triangulation -
Оборачиваемая триангуляция (для уточнения)
-
triangulation
- refine_field(z, triinterpolator=None, subdiv=3)[source]
-
Уточнение поля, определённого на охватываемой триангуляции.
- Параметры
-
- z(npoints,) массив-подобный
-
Значения поля для уточнения, определённые в узлах охватываемой триангуляции. (
n_points— количество точек в исходной триангуляции) -
triinterpolator
TriInterpolator, необязательно -
Интерполятор, используемый для интерполяции поля. Если не указан, будет использован
CubicTriInterpolator. - subdivint, по умолчанию: 3
-
Уровень рекурсии для разбиения. Каждый треугольник делится на
4**subdivдочерних треугольников.
- Возвращает
-
-
refi_tri
Triangulation -
Возвращённая уточнённая триангуляция.
- refi_zОдномерный массив длиной: количество узлов refi_tri.
-
Возвращённое интерполированное поле (в узлах refi_tri).
-
refi_tri
- refine_triangulation(return_tri_index=False, subdiv=3)[source]
-
Вычисление равномерно уточнённой триангуляции refi_triangulation охватываемой
triangulation.Эта функция уточняет охватываемую триангуляцию, разбивая каждый треугольник на 4 дочерних подтреугольника, построенных на серединах сторон, и повторяя это subdiv раз. В итоге каждый треугольник делится на
4**subdivдочерних треугольников.- Параметры
-
- return_tri_indexbool, по умолчанию: False
-
Возвращать ли таблицу индексов, указывающую индекс родительского треугольника для каждой точки.
- subdivint, по умолчанию: 3
-
Уровень рекурсии для разбиения. Каждый треугольник делится на
4**subdivдочерних треугольников; таким образом, значение по умолчанию приводит к 64 уточнённым подтреугольникам для каждого треугольника исходной триангуляции.
- Возвращает
-
-
refi_triangulation
Triangulation -
Уточнённая триангуляция.
- found_indexмассив целых чисел
-
Индекс исходной триангуляции, содержащий треугольник для каждой точки refi_triangulation. Возвращается только если return_tri_index установлено в True.
-
refi_triangulation
- classmatplotlib.tri.TriAnalyzer(triangulation)[source]
-
Определяет основные инструменты для анализа и улучшения треугольной сетки.
TriAnalyzer инкапсулирует объект
Triangulationи предоставляет основные инструменты для анализа и улучшения сетки.- Параметры
-
-
triangulation
Triangulation -
Инкапсулируемая треугольная сетка для анализа.
-
triangulation
- Атрибуты
-
scale_factors-
Коэффициенты для масштабирования треугольной сетки в единичный квадрат.
- circle_ratios(rescale=True)[source]
-
Возвращает меру плоскогости треугольников треугольной сетки.
Отношение радиуса вписанной окружности к радиусу описанной окружности — широко используемый показатель плоскогости треугольника. Оно всегда
<= 0.5и== 0.5только для равносторонних треугольников. Отношения окружностей ниже 0,01 указывают на очень плоские треугольники.Чтобы избежать чрезмерно низких значений из-за разницы масштаба между двумя осями, треугольную сетку можно предварительно масштабировать, чтобы она поместилась в единичный квадрат с помощью
scale_factors(только если rescale равно True, что является его значением по умолчанию).- Параметры
-
- rescalebool, по умолчанию: True
-
Если True, внутренне масштабирует (на основе
scale_factors), так что (незамаскированные) треугольники точно помещаются в сетку единичного квадрата.
- Возвращает
-
- массив с маской
-
Отношение радиуса вписанной окружности к радиусу описанной окружности для каждого «масштабированного» треугольника инкапсулированной треугольной сетки. Значения, соответствующие замаскированным треугольникам, маскируются.
- get_flat_tri_mask(min_circle_ratio=0.01, rescale=True)[source]
-
Исключает слишком плоские граничные треугольники из треугольной сетки.
Возвращает маску new_mask, которая позволяет очистить инкапсулированную треугольную сетку от её граничных плоских треугольников (в соответствии с их
circle_ratios()). Эта маска предназначена для последующего применения к треугольной сетке с помощьюTriangulation.set_mask. new_mask является расширением начальной маски треугольной сетки в том смысле, что начальный замаскированный треугольник остаётся замаскированным.Массив new_mask вычисляется рекурсивно; на каждом шаге плоские треугольники удаляются только в том случае, если они имеют общую сторону с текущей границей сетки. Таким образом, не будут создаваться новые отверстия в области, разбиение которой производится по треугольникам.
- Параметры
-
- min_circle_ratiofloat, по умолчанию: 0.01
-
Граничные треугольники с отношением радиусов вписанной/описанной окружностей r/R будут удалены, если r/R < min_circle_ratio.
- rescalebool, по умолчанию: True
-
Если True, сначала выполняется внутреннее масштабирование (на основе
scale_factors) так, чтобы (незамаскированные) треугольники точно поместились в сетку единичного квадрата. Это масштабирование учитывает возможную разницу масштаба между двумя осями.
- Возвращает
-
- массив bool
-
Маска для применения к инкапсулированной треугольной сетке. Все замаскированные изначально треугольники остаются замаскированными в new_mask.
Примечания
Основание этой функции заключается в том, что триангуляция Делоне — для неупорядоченного набора точек — иногда содержит почти плоские треугольники на границе, что приводит к артефактам в графиках (особенно при контурном построении высокой разрешающей способности). Замаскированные с помощью вычисленной new_mask, инкапсулированная треугольная сетка больше не будет содержать незамаскированных граничных треугольников с отношением кругов ниже min_circle_ratio, тем самым улучшая качество сетки для последующих графиков или интерполяции.
- propertyscale_factors
-
Коэффициенты для масштабирования треугольной сетки в единичный квадрат.
- Возвращает
-
- (float, float)
-
Коэффициенты масштабирования (kx, ky) такие, что треугольная сетка
[triangulation.x * kx, triangulation.y * ky]точно помещается в единичный квадрат.
© 2012–2021 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.5.1/api/tri_api.html