треугольные сетки
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`
- `neighbors`
-
is_delaunay : bool -
Признак того, является ли триангуляция рассчитанной триангуляцией Делоне (если
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].
-
edges -
Возвращает целочисленный массив формы (nedges, 2), содержащий все рёбра не замаскированных треугольников.
Каждое ребро — это индекс начальной и конечной точки. Каждое ребро (начало, конец и конец, начало) появляется только один раз.
-
get_cpp_triangulation()[source]
-
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()[source] -
Возвращает массив треугольников, которые не замаскированы.
-
get_trifinder()[source] -
Возвращает стандартный
matplotlib.tri.TriFinderэтой триангуляции, создавая его при необходимости. Это позволяет легко обмениваться одним и тем же объектом TriFinder.
-
neighbors -
Возвращает целочисленный массив формы (ntri, 3), содержащий соседние треугольники.
Для каждого треугольника индексы трёх треугольников, которые имеют общие рёбра, или -1, если такого соседнего треугольника нет. neighbors[i,j] — это треугольник, который является соседом к ребру от точки с индексом triangles[i,j] до точки с индексом triangles[i,(j+1)%3].
-
set_mask(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] -
Наследуется от
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] -
Наследуется от
matplotlib.tri.triinterpolate.TriInterpolatorLinearTriInterpolator выполняет линейную интерполяцию на треугольной сетке.
Каждый треугольник представляется плоскостью, таким образом, что интерполированное значение в точке (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(x, y)[source] -
Возвращает список из 2 массивов с маской, содержащих интерполированные производные в указанных точках x,y.
Параметры: -
x, y : array-like -
Координаты x и y той же формы и любого количества измерений.
Возвращает: -
dzdx, dzdy : np.ma.array -
2 массива с маской той же формы, что и x и y; значения, соответствующие точкам (x, y) вне триангуляции, замаскированы. Первый возвращаемый массив содержит значения
, а второй —
.
-
-
-
class matplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None)[source] -
Bases:
matplotlib.tri.triinterpolate.TriInterpolatorA 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 координат). Этот метод происходит из анализа метода конечных элементов (МКЭ); используемый элемент — уменьшенный элемент Хси-Клаффа-Точера (ХКТ). Его базисные функции описаны в [1]. Гарантируется, что полученная функция является C1-гладкой, т. е. непрерывной и её первые производные также непрерывны (это легко показать внутри треугольников, но это также справедливо при пересечении рёбер).
В случае по умолчанию (kind ='min_E') интерполянт минимизирует энергию кривизны в функциональном пространстве, сгенерированном базисными функциями элемента ХКТ — с заданными значениями, но произвольными производными в каждой вершине. Минимизируемый функционал — интеграл так называемой полной кривизны (реализация основана на алгоритме из [2] — решатель PCG для разреженных систем):
Если пользователь выберет вариант kind ='geom', используется простое геометрическое приближение (взвешенное среднее векторов нормали треугольников), что может улучшить скорость на очень больших сетках.
Ссылки
[1] (1, 2) 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] (1, 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, y : array-like -
Координаты x и y одинаковой формы и любого числа измерений.
Возвращает: -
dzdx, dzdy : np.ma.array -
2 маскированных массива той же формы, что и x и y; значения, соответствующие точкам (x,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(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(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] -
Определяет основные инструменты для анализа триангулярной сетки и её улучшения.
Класс TriAnalizer оборачивает объект
Triangulationи предоставляет базовые инструменты для анализа и улучшения сетки.Параметры: -
triangulation : Triangulation object -
Оборачиваемая триангуляция для анализа.
Атрибуты: - `scale_factors`
-
circle_ratios(rescale=True)[source] -
Возвращает меру плоскогости треугольников триангуляции.
Отношение радиуса вписанной окружности к радиусу описанной окружности — широко используемый показатель плоскогости треугольника. Оно всегда
<= 0.5и== 0.5только для равносторонних треугольников. Значения отношения ниже 0,01 указывают на очень плоские треугольники.Для предотвращения неоправданно низких значений из-за разницы масштаба между осями, триангулярную сетку можно предварительно масштабировать так, чтобы она поместилась в единичный квадрат с помощью
scale_factors(Только если rescale равно True, что является значением по умолчанию).Параметры: -
rescale : boolean, optional -
Если True, выполнится внутреннее масштабирование (на основе
scale_factors), чтобы (незамаскированные) треугольники точно поместились в сетку единичного квадрата. По умолчанию True.
Возвращаемое значение: -
circle_ratios : masked array -
Отношение радиуса вписанной окружности к радиусу описанной окружности для каждого «масштабированного» треугольника оборачиваемой триангуляции. Значения, соответствующие замаскированным треугольникам, замаскированы.
-
-
get_flat_tri_mask(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), так что (незамаскированные) треугольники точно поместятся в сетку единичного квадрата. Это масштабирование учитывает возможную разницу масштаба между осями. Значение по умолчанию (и рекомендуемое) — 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/2.2.3/api/tri_api.html