треугольные сетки
matplotlib.tri
Функции для работы с неструктурированными треугольными сетками.
-
class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None) -
Неструктурированная треугольная сетка, состоящая из npoints точек и ntri треугольников. Треугольники могут быть указаны пользователем или автоматически сгенерированы с помощью триангуляции Делоне.
Параметры: x, y : массив_подобный объекта типа shape (npoints)
Координаты точек сетки.
triangles : целочисленный массив_подобный объекта типа shape (ntri, 3), необязательно
Для каждого треугольника индексы трёх точек, образующих треугольник, упорядоченные против часовой стрелки. Если не указано, вычисляется триангуляция Делоне.
mask : булев массив_подобный объекта типа shape (ntri), необязательно
Какие треугольники маскируются.
Примечания
Для того, чтобы триангуляция была корректной, она не должна содержать дублирующихся точек, треугольников, образованных коллинеарными точками или перекрывающихся треугольников.
Атрибуты
edgesneighborsis_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), содержащий все ребра не замаскированных треугольников.
Каждое ребро - индекс начальной и конечной точки. Каждое ребро (начало,конец и конец,начало) появляется только один раз.
-
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 - массивоподобные координаты точек той же формы.
-
class matplotlib.tri.TrapezoidMapTriFinder(triangulation) -
Основывается на
matplotlib.tri.trifinder.TriFinderTriFinderкласс, реализованный с помощью алгоритма карты трапеций из книги «Вычислительная геометрия, алгоритмы и приложения», второе издание, авторы М. де Берг, М. ван Кревельд, М. Овермарс и О. Шварцкопф.Триангуляция должна быть корректной, т.е. она не должна содержать дублирующихся точек, треугольников, образованных коллинеарными точками или перекрывающихся треугольников. Алгоритм имеет некоторую толерантность к треугольникам, образованным коллинеарными точками, но на это не следует полагаться.
-
__call__(x, y) -
Возвращает массив, содержащий индексы треугольников, в которых лежат заданные точки x,y, или -1 для точек, которые не лежат внутри треугольника.
x, y - массивоподобные x и y координаты той же формы и любого количества измерений.
Возвращает целочисленный массив с той же формой, что и x и y.
-
-
class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None) -
Абстрактный базовый класс для классов, используемых для интерполяции на треугольных сетках.
Производные классы реализуют следующие методы:
-
__call__(x, y), где x, y - массивоподобные координаты точек той же формы, и который возвращает массив с маской той же формы, содержащий интерполированные значения z. -
gradient(x, y), где x, y - массивоподобные координаты точек той же формы, и который возвращает список из 2 массивов с маской той же формы, содержащий 2 производные интерполятора (производные интерполированных значений z по x и y).
-
-
class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None) -
Основывается на
matplotlib.tri.triinterpolate.TriInterpolatorLinearTriInterpolator выполняет линейную интерполяцию на треугольной сетке.
Каждый треугольник представляется плоскостью, так что интерполированное значение в точке (x,y) лежит на плоскости треугольника, содержащего (x,y). Поэтому интерполированные значения непрерывны по всей триангуляции, но их первые производные разрывны на рёбрах между треугольниками.
Параметры: triangulation :
TriangulationобъектТриангуляция для интерполяции.
z : массив_подобный объект типа shape (npoints,)
Массив значений, определённых в точках сетки, для интерполяции между.
trifinder :
TriFinderобъект, необязательноЕсли это не указано, по умолчанию будет использован TriFinder триангуляции, вызывая
matplotlib.tri.Triangulation.get_trifinder().Методы
__call__(x, y)( Возвращает интерполированные значения в точках x,y) gradient(x, y)(Возвращает интерполированные производные в точках x,y) -
__call__(x, y) -
Возвращает массив с маской, содержащий интерполированные значения в указанных точках x,y.
Параметры: x, y : массив_подобный объект
Координаты x и y той же формы и любого количества измерений.
Возвращает: z : np.ma.array
Массив с маской той же формы, что и 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.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None) -
Базы:
matplotlib.tri.triinterpolate.TriInterpolatorКласс CubicTriInterpolator выполняет кубическую интерполяцию на треугольных сетках.
В одномерном случае — на отрезке — кубическая интерполирующая функция определяется значениями функции и её производной на обоих концах. Это почти то же самое в двумерном случае внутри треугольника, за исключением того, что значения функции и её двух производных должны быть определены в каждой вершине треугольника.
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 координат). Этот метод происходит из анализа метода конечных элементов (МКЭ); используемый элемент — сокращённый элемент Хси-Клоуга-Точера (ХКТ). Его базисные функции описаны в [R1]. Гарантируется, что полученная функция будет C1-гладкой, т.е. непрерывной и с непрерывными первыми производными (это легко показать внутри треугольников, но это также верно при пересечении рёбер).
В случае по умолчанию (kind =’min_E’), интерполянт минимизирует энергию кривизны в функциональном пространстве, порождённом базисными функциями элемента ХКТ — при заданных значениях, но произвольных производных в каждой вершине. Минимизируемый функционал — интеграл так называемой полной кривизны (реализация основана на алгоритме из [R2] — решатель разреженных систем PCG):
Если пользователь выбирает kind =’geom’, используется простое геометрическое приближение (взвешенное среднее векторов нормалей треугольников), что может повысить скорость на очень больших сетках.
Ссылки
[R1] (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. [R2] (1, 2) C.T. Kelley, “Iterative Methods for Optimization”. Методы
__call__(x, y)( Возвращает интерполированные значения в точках x,y) gradient(x, y)(Возвращает интерполированные производные в точках x,y) -
__call__(x, y) -
Возвращает массив с маской, содержащий интерполированные значения в заданных точках x,y.
Параметры: x, y : массив-подобный
Координаты x и y одинаковой формы и любого числа измерений.
Возвращает: z : np.ma.array
Массив с маской той же формы, что и x и y; значения, соответствующие точкам (x, y) вне треугольной сетки, маскируются.
-
gradient(x, y) -
Возвращает список из 2 массивов с маской, содержащий интерполированные производные в заданных точках x,y.
Параметры: x, y : массив-подобный
Координаты x и y одинаковой формы и любого числа измерений.
Возвращает: dzdx, dzdy : np.ma.array
2 массива с маской той же формы, что и x и y; значения, соответствующие точкам (x,y) вне треугольной сетки, маскируются. Первый возвращаемый массив содержит значения
, а второй —
.Примеры
Пример эффективного применения показан ниже (график направления векторного поля, полученного из известного потенциала поля):
(Исходный код, png, hires.png, pdf)
-
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) -
Bases:
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)
Примеры
Основное применение этого метода — построение контуров изолиний высокого качества на грубой треугольной сетке (например, триангуляции, построенной из относительно разреженных тестовых данных):
(Исходный код, png, hires.png, pdf)
-
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, optional
Если True, внутренне выполняется масштабирование (на основе
scale_factors), чтобы (немаскированные) треугольники точно помещались в сетку единичного квадрата. По умолчанию True.Возвращает: circle_ratios : masked array
Отношение радиуса вписанной окружности к радиусу описанной окружности для каждого «масштабированного» треугольника инкапсулированной триангуляции. Значения, соответствующие замаскированным треугольникам, также маскируются.
-
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 : float, optional
Граничные треугольники с отношением радиусов вписанной/описанной окружностей r/R будут удалены, если r/R < min_circle_ratio. Значение по умолчанию: 0,01
rescale : boolean, optional
Если True, сначала выполняется внутреннее масштабирование (на основе
scale_factors), чтобы (немаскированные) треугольники точно помещались в сетку единичного квадрата. Это масштабирование учитывает возможную разницу в масштабе между двумя осями. Значение по умолчанию (и рекомендуемое) — True.Возвращает: new_mask : массив булевых значений
Маска для применения к инкапсулированной триангуляции. Все изначально замаскированные треугольники остаются замаскированными в new_mask.
Примечания
Причина создания этой функции заключается в том, что триангуляция Делоне — для неупорядоченного набора точек — иногда содержит почти плоские треугольники на границе, что приводит к артефактам на графиках (особенно при построении контуров высокой точности). Замаскированная с вычисленной new_mask, инкапсулированная триангуляция не будет содержать больше незамаскированных граничных треугольников с отношением окружностей ниже min_circle_ratio, что улучшает качество сетки для последующих графиков или интерполяции.
Примеры
Обратитесь к следующему иллюстративному примеру:
(Исходный код, png, hires.png, pdf)
-
scale_factors -
Коэффициенты для масштабирования триангуляции в квадрат единичного размера.
Возвращает k, кортеж из 2 коэффициентов масштабирования.
Возвращает: k : кортеж из 2 чисел с плавающей точкой (kx, ky)
Кортеж чисел с плавающей точкой, которые масштабируют триангуляцию :
[triangulation.x * kx, triangulation.y * ky]точно поместится в квадрат единичного размера.
-
© 2012–2016 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
http://matplotlib.org/1.5.3/api/tri_api.html