треугольные сетки
matplotlib.tri
Функции для работы со структурированными треугольными сетками.
-
class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None) -
Неструктурированная треугольная сетка, состоящая из npoints точек и ntri треугольников. Треугольники могут быть заданы пользователем или автоматически сгенерированы с помощью триангуляции Делоне.
Параметры: x, y : array_like формы (npoints)
Координаты точек сетки.
triangles : целочисленный array_like формы (ntri, 3), необязательно
Для каждого треугольника индексы трёх точек, образующих треугольник, упорядоченные против часовой стрелки. Если не указано, вычисляется триангуляция Делоне.
mask : булевый array_like формы (ntri), необязательно
Какие треугольники скрыты.
Примечания
Для того, чтобы триангуляция была валидной, она не должна содержать дублирующих точек, треугольников, образованных коллинеарными точками, или перекрывающихся треугольников.
Атрибуты
`edges` `neighbors` is_delaunay (bool) Является ли триангуляция вычисленной триангуляцией Делоне (где trianglesне было указано) или нет.-
calculate_plane_coefficients(z) -
Вычисление коэффициентов уравнения плоскости для всех нескрытых треугольников из координат точек (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()
-
static get_from_args_and_kwargs(*args, **kwargs) -
Возвращает объект Triangulation из args и kwargs, а также оставшиеся args и kwargs с удаленными использованными значениями.
Есть два варианта: либо первый аргумент — объект Triangulation, в этом случае он возвращается, или args и kwargs достаточно для создания нового объекта Triangulation, который нужно вернуть. В последнем случае см. Triangulation.__init__ для возможных args и kwargs.
-
get_masked_triangles() -
Возвращает массив треугольников, которые не скрыты.
-
get_trifinder() -
Возвращает значение по умолчанию
matplotlib.tri.TriFinderэтой триангуляции, создавая его при необходимости. Это позволяет легко совместно использовать один и тот же объект TriFinder.
-
neighbors -
Возвращает целочисленный массив формы (ntri,3), содержащий соседние треугольники.
Для каждого треугольника индексы трёх треугольников, имеющих общие рёбра, или -1, если такого соседнего треугольника нет. neighbors[i,j] — треугольник, являющийся соседом рёбра от точки с индексом triangles[i,j] до точки с индексом triangles[i,(j+1)%3].
-
set_mask(mask) -
Установить или очистить маску. Это либо None, либо булевый массив формы (ntri).
-
-
class matplotlib.tri.TriFinder(triangulation) -
Абстрактный базовый класс для классов, используемых для поиска треугольников триангуляции, в которых лежат точки (x,y).
Вместо создания объекта класса, производного от TriFinder, обычно лучше использовать функцию
matplotlib.tri.Triangulation.get_trifinder().Производные классы реализуют __call__(x,y), где x,y — координаты точек array_like одинаковой формы.
-
class matplotlib.tri.TrapezoidMapTriFinder(triangulation) -
Основывается на
matplotlib.tri.trifinder.TriFinderTriFinderкласс, реализованный с помощью алгоритма карты трапеций из книги «Вычислительная геометрия, алгоритмы и приложения», второе издание, авторы М. де Берг, М. ван Кревельд, М. Овермарс и О. Шварцкопф.Триангуляция должна быть валидной, т. е. не должна содержать дублирующих точек, треугольников, образованных коллинеарными точками, или перекрывающихся треугольников. Алгоритм имеет некоторую толерантность к треугольникам, образованным коллинеарными точками, но на этом полагаться не следует.
-
class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None) -
Абстрактный базовый класс для классов, используемых для интерполяции на треугольных сетках.
Производные классы реализуют следующие методы:
-
__call__(x, y), где x, y — координаты точек array_like одинаковой формы, и который возвращает массив с маской той же формы, содержащий интерполированные значения z. -
gradient(x, y), где x, y — координаты точек array_like одинаковой формы, и который возвращает список из 2 массивов с маской той же формы, содержащих 2 производные интерполятора (производные интерполированных значений z по x и y).
-
docstring__call__ = '\n Returns a masked array containing interpolated values at the specified\n x,y points.\n\n Parameters\n ----------\n x, y : array-like\n x and y coordinates of the same shape and any number of\n dimensions.\n\n Returns\n -------\n z : np.ma.array\n Masked array of the same shape as *x* and *y* ; values\n corresponding to (*x*, *y*) points outside of the triangulation\n are masked out.\n\n '
-
docstringgradient = '\n Returns a list of 2 masked arrays containing interpolated derivatives\n at the specified x,y points.\n\n Parameters\n ----------\n x, y : array-like\n x and y coordinates of the same shape and any number of\n dimensions.\n\n Returns\n -------\n dzdx, dzdy : np.ma.array\n 2 masked arrays of the same shape as *x* and *y* ; values\n corresponding to (x,y) points outside of the triangulation\n are masked out.\n The first returned array contains the values of\n :math:`\\frac{\\partial z}{\\partial x}` and the second those of\n :math:`\\frac{\\partial z}{\\partial y}`.\n\n '
-
-
class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None) -
Основывается на
matplotlib.tri.triinterpolate.TriInterpolatorLinearTriInterpolator выполняет линейную интерполяцию на треугольной сетке.
Каждый треугольник представлен плоскостью, так что интерполированное значение в точке (x,y) лежит на плоскости треугольника, содержащего (x,y). Интерполированные значения, следовательно, непрерывны по всей триангуляции, но их первые производные разрывны на рёбрах между треугольниками.
Параметры: triangulation :
TriangulationобъектТриангуляция, по которой интерполировать.
z : array_like формы (npoints,)
Массив значений, определённых в точках сетки, между которыми интерполировать.
trifinder :
TriFinderобъект, необязательноЕсли это не указано, будет использован по умолчанию TriFinder триангуляции, вызывая
matplotlib.tri.Triangulation.get_trifinder().Методы
`__call__` (x, y) ( Возвращает интерполированные значения в точках x,y) `gradient` (x, y) (Возвращает интерполированные производные в точках x,y) -
gradient(x, y) -
Возвращает список из 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) -
Основы:
matplotlib.tri.triinterpolate.TriInterpolatorCubicTriInterpolator выполняет кубическую интерполяцию на треугольных сетках.
В одном измерении — на отрезке — кубическая интерполяционная функция определяется значениями функции и её производной на обоих концах. Это почти то же самое в 2D внутри треугольника, за исключением того, что значения функции и её двух производных должны быть определены в каждой вершине треугольника.
CubicTriInterpolator принимает значение функции в каждой вершине — предоставленное пользователем — и внутренне вычисляет значение производных, что приводит к плавной интерполяции. (В качестве специальной функции пользователь также может задать значение производных в каждой вершине, но это не предполагается как общепринятый способ использования.)
Параметры: triangulation :
TriangulationобъектТреугольная сетка для интерполяции.
z : массив_подобный формы (npoints,)
Массив значений, определённых в узлах сетки, для интерполяции между ними.
kind : {‘min_E’, ‘geom’, ‘user’}, необязательно
Выбор алгоритма сглаживания для вычисления производных интерполянта (по умолчанию ‘min_E’):
- если ‘min_E’: (по умолчанию) Производные в каждой вершине вычисляются для минимизации энергии изгиба.
- если ‘geom’: Производные в каждой вершине вычисляются как взвешенное среднее значение соответствующих нормалей треугольников. Используется для оптимизации скорости (большие сетки).
- если ‘user’: Пользователь предоставляет аргумент
dz, вычисления не требуются.
trifinder :
TriFinderобъект, необязательноЕсли не указано, будет использоваться стандартный TriFinder треугольной сетки, вызывая
matplotlib.tri.Triangulation.get_trifinder().dz : кортеж массив_подобных (dzdx, dzdy), необязательно
Используется только если kind =’user’. В этом случае dz должен быть задан как (dzdx, dzdy), где dzdx, dzdy — массивы такой же формы, как z, и представляют собой первые производные интерполянта в точках triangulation.
Примечания
Это техническое примечание и подробно описывает способ, которым
CubicTriInterpolatorвычисляет кубическую интерполяцию.Интерполяция основана на схеме подразделения Клоуза-Точера для сетки triangulation (проще говоря, каждый треугольник сетки делится на 3 дочерних треугольника, и на каждом дочернем треугольнике интерполируемая функция является кубическим многочленом от 2 координат). Эта техника происходит из анализа метода конечных элементов (МКЭ); используемый элемент — это сокращённый элемент Хсие-Клоуза-Точера (HCT). Его функции формы описаны в [R45]. Гарантируется, что собранная функция будет гладкой C1, т.е. она непрерывна, и её первые производные также непрерывны (это легко показать внутри треугольников, но это также верно при пересечении рёбер).
В случае по умолчанию (kind =’min_E’), интерполянт минимизирует энергию кривизны на функциональном пространстве, сгенерированном функциями формы элемента HCT — с заданными значениями, но произвольными производными в каждой вершине. Минимизируемый функционал — это интеграл так называемой полной кривизны (реализация основана на алгоритме из [R55] — решатель разреженных систем PCG):
Если пользователь выбирает случай kind =’geom’, используется простое геометрическое приближение (взвешенное среднее векторов нормалей треугольников), что может улучшить скорость на очень больших сетках.
Список литературы
[R45] (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. [R55] (1, 2) C.T. Kelley, “Iterative Methods for Optimization”. Методы
`__call__` (x, y) ( Возвращает интерполированные значения в точках x,y) `gradient` (x, y) (Возвращает интерполированные производные в точках x,y) -
gradient(x, y) -
Возвращает список 2 замаскированных массивов, содержащих интерполированные производные в указанных точках x,y.
Параметры: x, y : массив_подобный
Координаты x и y одинаковой формы и любого количества измерений.
Возвращает: dzdx, dzdy : np.ma.array
2 замаскированных массива той же формы, что и x и y; значения, соответствующие точкам (x,y) вне треугольной сетки, маскируются. Первый возвращаемый массив содержит значения
, а второй — значения
.
-
class matplotlib.tri.TriRefiner(triangulation) -
Абстрактный базовый класс для классов, реализующих уточнение сетки.
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) -
Базы:
matplotlib.tri.trirefine.TriRefinerРавномерное уточнение сетки путём рекурсивного деления.
Параметры: triangulation :
TriangulationОборачиваемая триангуляция (для уточнения)
-
refine_field(z, triinterpolator=None, subdiv=3) -
Уточняет поле, определённое на обёрнутой триангуляции.
Возвращает refi_tri (уточнённая триангуляция), refi_z (интерполированные значения поля в узлах уточнённой триангуляции).
Параметры: z : массив-подобный 1d длины
n_pointsЗначения поля для уточнения, определённые в узлах обёрнутой триангуляции. (
n_points— количество точек в исходной триангуляции)triinterpolator :
TriInterpolator, необязательноИнтерполятор, используемый для интерполяции поля. Если не указан, будет использован
CubicTriInterpolator.subdiv : целое число, необязательно
Уровень рекурсии для деления. По умолчанию 3. Каждый треугольник будет разделён на
4**subdivдочерних треугольников.Возвращает: refi_tri :
TriangulationобъектВозвращённая уточнённая триангуляция
refi_z : массив 1d длины: refi_tri количество узлов.
Возвращённое интерполированное поле (в узлах refi_tri)
-
refine_triangulation(return_tri_index=False, subdiv=3) -
Вычисляет равномерно уточнённую триангуляцию refi_triangulation обёрнутой
triangulation.Эта функция уточняет обёрнутую триангуляцию, деля каждый исходный треугольник на 4 дочерних подтреугольника, построенных на средних точках сторон, рекурсивно (уровень рекурсии subdiv). В итоге каждый треугольник делится на
4**subdivдочерних треугольников. Значение по умолчанию для subdiv равно 3, что приводит к 64 уточнённым подтреугольникам для каждого треугольника исходной триангуляции.Параметры: return_tri_index : boolean, необязательно
Булево значение, указывающее, будет ли возвращена таблица индексов, указывающая индекс родительского треугольника для каждой точки. Значение по умолчанию False.
subdiv : целое число, необязательно
Уровень рекурсии для деления. Значение по умолчанию 3. Каждый треугольник будет разделён на
4**subdivдочерних треугольников.Возвращает: refi_triangulation :
TriangulationВозвращённая уточнённая триангуляция
found_index : массив-подобный целых чисел
Индекс исходной триангуляции, содержащей треугольник, для каждой точки refi_triangulation. Возвращается только если return_tri_index установлено в True.
-
-
class matplotlib.tri.TriAnalyzer(triangulation) -
Определяет базовые инструменты для анализа и улучшения треугольной сетки.
TriAnalizer оборачивает объект
Triangulationи предоставляет базовые инструменты для анализа и улучшения сетки.Параметры: triangulation :
TriangulationобъектОборачиваемая для анализа триангуляция.
Атрибуты
`scale_factors` -
circle_ratios(rescale=True) -
Возвращает меру плоскогости треугольников триангуляции.
Отношение радиуса вписанной окружности к радиусу описанной окружности — широко используемый показатель плоскогости треугольника. Оно всегда
<= 0.5и== 0.5только для равносторонних треугольников. Коэффициенты окружности ниже 0,01 указывают на очень плоские треугольники.Чтобы избежать излишне низких значений из-за разницы масштаба между двумя осями, сетка треугольников может быть предварительно масштабирована для помещения в квадрат единицы с
scale_factors(Только если rescale равно True, что является его значением по умолчанию).Параметры: rescale : boolean, необязательно
Если True, будет выполнено внутреннее масштабирование (на основе
scale_factors), чтобы (незамаскированные) треугольники точно поместились в сетку квадратной единицы. Значение по умолчанию True.Возвращает: circle_ratios : массив с маской
Отношение радиуса вписанной окружности к радиусу описанной окружности для каждого «масштабированного» треугольника обёрнутой триангуляции. Значения, соответствующие замаскированным треугольникам, замаскированы.
-
get_flat_tri_mask(min_circle_ratio=0.01, rescale=True) -
Удаляет чрезмерно плоские граничные треугольники из триангуляции.
Возвращает маску new_mask, которая позволяет очистить обёрнутую триангуляцию от её граничных плоских треугольников (в соответствии с их
circle_ratios()). Эта маска предназначена для последующего применения к триангуляции с использованиемmatplotlib.tri.Triangulation.set_mask(). new_mask является расширением исходной маски триангуляции в том смысле, что изначально замаскированный треугольник останется замаскированным.Массив new_mask вычисляется рекурсивно; на каждой итерации плоские треугольники удаляются только в том случае, если они имеют общую сторону с текущей границей сетки. Таким образом, новые дыры в триангулированной области не будут созданы.
Параметры: min_circle_ratio : число с плавающей точкой, необязательно
Граничные треугольники с отношением радиусов вписанной/описанной окружностей r/R будут удалены, если r/R < min_circle_ratio. Значение по умолчанию: 0,01
rescale : boolean, необязательно
Если True, предварительно выполняется внутреннее масштабирование (на основе
scale_factors), чтобы (незамаскированные) треугольники точно поместились в сетку квадратной единицы. Это масштабирование учитывает возможную разницу масштаба между двумя осями. Значение по умолчанию (и рекомендуемое) — True.Возвращает: new_mask : массив-подобный булевых значений
Маска для применения к обёрнутой триангуляции. Все изначально замаскированные треугольники в new_mask остаются замаскированными.
Примечания
Суть этой функции заключается в том, что триангуляция Делоне — неструктурированного набора точек — иногда содержит почти плоские треугольники на границе, что приводит к артефактам на графиках (особенно при контурной трассировке высокого разрешения). При маскировке с помощью вычисленной new_mask, обёрнутая триангуляция больше не будет содержать незамаскированных граничных треугольников с коэффициентом окружности ниже min_circle_ratio, что улучшит качество сетки для последующих графиков или интерполяции.
-
scale_factors -
Коэффициенты для масштабирования триангуляции в квадрат единицы.
Возвращает k, пару коэффициентов масштабирования.
Возвращает: k : пара чисел с плавающей точкой (kx, ky)
Пара чисел с плавающей точкой, которые бы масштабировали триангуляцию так, что
[triangulation.x * kx, triangulation.y * ky]точно поместится в квадрат единицы.
-
© 2012–2017 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
http://matplotlib.org/2.1.0/api/tri_api.html