matplotlib.tri#

非结构化三角网格函数。

matplotlib.tri。三角测量( x , y , triangles = None , mask = None ) [source] #

由 npoints 点和 ntri 三角形组成的非结构化三角形网格。三角形可以由用户指定,也可以使用 Delaunay 三角剖分自动生成。

参数
x, y (npoints,) 类数组

网格点的坐标。

triangles (ntri, 3) 类似 int 的数组,可选

对于每个三角形,组成三角形的三个点的索引以逆时针方式排列。如果未指定,则计算 Delaunay 三角剖分。

掩码(ntri,) 类似于 bool 的数组,可选

哪些三角形被掩盖了。

笔记

要使三角测量有效,它不能有重复的点、由共线点形成的三角形或重叠的三角形。

属性
三角形(ntri, 3) int 数组

对于每个三角形,组成三角形的三个点的索引以逆时针方式排列。如果您想考虑使用口罩,请get_masked_triangles改用。

掩码(ntri, 3) 布尔数组

掩盖了三角形。

is_delaunay布尔值

三角剖分是否是计算的 Delaunay 三角剖分(未指定三角形)。

calculate_plane_coefficients ( z ) [来源] #

从点 (x, y) 坐标和指定的形状 z 数组 (npoints) 计算所有未屏蔽三角形的平面方程系数。返回的数组具有形状 (npoints, 3) 并允许使用 计算三角形 tri 中 (x, y) 位置处的 z 值 。z = array[tri, 0] * x  + array[tri, 1] * y + array[tri, 2]

属性 边缘#

返回包含非蒙面三角形的所有边的整数形状数组(边,2)。

每行通过其起点索引和终点索引定义一条边。每条边只出现一次,即对于点 ij之间的边,只有(i, j)(j, i)

get_cpp_triangulation ( ) [来源] #

返回底层 C++ Triangulation 对象,如有必要,创建它。

静态 get_from_args_and_kwargs ( * args , ** kwargs ) [来源] #

从 args 和 kwargs 中返回一个 Triangulation 对象,剩余的 args 和 kwargs 已删除消耗的值。

有两种选择:第一个参数是一个 Triangulation 对象,在这种情况下它被返回,或者 args 和 kwargs 足以创建一个新的 Triangulation 来返回。在后一种情况下,请参阅 Triangulation.__init__ 以了解可能的 args 和 kwargs。

get_masked_triangles ( ) [来源] #

返回考虑掩码的三角形数组。

get_trifinder ( ) [来源] #

返回matplotlib.tri.TriFinder此三角剖分的默认值,必要时创建它。这允许轻松共享同一个 TriFinder 对象。

物业 邻居#

返回包含相邻三角形的形状 (ntri, 3) 的整数数组。

对于每个三角形,共享相同边的三个三角形的索引,如果没有这样的相邻三角形,则为 -1。是从 point index到 point index 的边的相邻三角形。neighbors[i, j]triangles[i, j]triangles[i, (j+1)%3]

set_mask (掩码) [来源] #

设置或清除掩码数组。

参数
掩码无或长度为 ntri 的 bool 数组
matplotlib.tri。TriContourSet ( ax , * args , ** kwargs ) [来源] #

基地:ContourSet

为三角形网格创建并存储一组等高线或填充区域。

此类通常不是由用户直接实例化,而是由 tricontourand实例化tricontourf

属性
斧头Axes

绘制轮廓的 Axes 对象。

s集合silent_listPathCollection

Artists 代表轮廓。这是 PathCollection线条和填充轮廓的 s 列表。

级别数组

等高线水平的值。

层数

与线轮廓的水平相同;填充轮廓的水平之间的一半。见ContourSet._process_colors

绘制三角形网格轮廓线或填充区域,具体取决于关键字 arg填充是 False(默认)还是 True。

初始化器的第一个参数必须是一个Axes 对象。其余参数和关键字参数在tricontour.

matplotlib.tri。TriFinder ( triangulation ) [来源] #

用于查找 (x, y) 点所在的三角剖分的三角形的类的抽象基类。

与其实例化从 TriFinder 派生的类的对象,不如使用函数Triangulation.get_trifinder.

派生类实现 __call__(x, y) 其中 x 和 y 是相同形状的类似数组的点坐标。

matplotlib.tri。TrapezoidMapTriFinder ( triangulation ) [来源] #

基地:TriFinder

TriFinder使用 M. de Berg、M. van Kreveld、M. Overmars 和 O. Schwarzkopf 所著《计算几何、算法和应用》第二版一书中的梯形映射算法实现的类。

三角测量必须是有效的,即它不能有重复的点、由共线点形成的三角形或重叠的三角形。该算法对由共线点形成的三角形有一定的容忍度,但不应依赖这一点。

matplotlib.tri。TriInterpolator ( triangulation , z , trifinder = None ) [来源] #

用于在三角形网格上插值的类的抽象基类。

派生类实现以下方法:

  • __call__(x, y),其中 x, y 是相同形状的类似数组的点坐标,它返回包含插值的 z 值的相同形状的掩码数组。

  • gradient(x, y), 其中 x, y 是相同形状的类似数组的点坐标,它返回一个包含 2 个相同形状的掩码数组的列表,其中包含插值器的 2 个导数(插值后的 z 值相对于 x 和 y 的导数)。

matplotlib.tri。LinearTriInterpolator ( triangulation , z , trifinder = None ) [来源] #

基地:TriInterpolator

三角形网格上的线性插值器。

每个三角形都由一个平面表示,因此点 (x, y) 处的插值位于包含 (x, y) 的三角形平面上。因此,插值在三角剖分中是连续的,但它们的一阶导数在三角形之间的边缘处不连续。

参数
三角测量Triangulation

要插值的三角剖分。

z (npoints,) 类数组

在网格点处定义的值数组,用于在其间进行插值。

三探仪TriFinder,可选

如果未指定,则通过调用将使用三角剖分的默认 TriFinder Triangulation.get_trifinder

方法

`__call__` (x, y)

(返回 (x, y) 点处的插值。)

`梯度` (x, y)

(返回 (x, y) 点的插值导数。)

渐变( x , y ) [来源] #

返回 2 个掩码数组的列表,其中包含在指定 (x, y) 点处的插值导数。

参数
x, y类数组

相同形状和任意维数的 x 和 y 坐标。

返回
dzdx, dzdy np.ma.array

2个与xy形状相同的掩码数组;对应于三角剖分之外的 (x, y) 点的值被屏蔽掉。第一个返回的数组包含 \(\frac{\partial z}{\partial x}\)第二个是 \(\frac{\partial z}{\partial y}\).

matplotlib.tri。CubicTriInterpolator ( triangulation , z , kind = 'min_E' , trifinder = None , dz = None ) [来源] #

基地:TriInterpolator

三角网格上的三次插值器。

在一维中 - 在一个段上 - 三次插值函数由函数的值及其两端的导数定义。这在三角形内部的 2D 中几乎相同,只是函数的值及其 2 个导数必须在每个三角形节点处定义。

CubicTriInterpolator 获取每个节点的函数值 - 由用户提供 - 并在内部计算导数的值,从而产生平滑插值。(作为一个特殊功能,用户还可以在每个节点上强加导数的值,但这不应该是常见的用法。)

参数
三角测量Triangulation

要插值的三角剖分。

z (npoints,) 类数组

在网格点处定义的值数组,用于在其间进行插值。

种类{'min_E', 'geom', 'user'}, 可选

平滑算法的选择,以计算插值导数(默认为“min_E”):

  • if 'min_E':(默认)计算每个节点的导数以最小化弯曲能量。

  • if 'geom':每个节点的导数计算为相关三角形法线的加权平均值。用于速度优化(大网格)。

  • if 'user': 用户提供参数dz,因此不需要计算。

三探仪TriFinder,可选

如果未指定,将通过调用来使用 Triangulation 的默认 TriFinder Triangulation.get_trifinder

dz类似数组的元组(dzdx,dzdy),可选

仅在kind ='user' 时使用。在这种情况下, dz必须作为 (dzdx, dzdy) 提供,其中 dzdx, dzdy 是与z形状相同的数组,并且是三角剖分点处的插值一阶导数。

笔记

这篇笔记有点技术性,详细说明了三次插值是如何计算的。

插值基于三角网格的 Clough-Tocher 细分方案(为了更清楚,网格的每个三角形将被划分为 3 个子三角形,并且在每个子三角形上,插值函数是 2 的三次多项式坐标)。该技术源自 FEM(有限元法)分析;使用的元素是简化的 Hsieh-Clough-Tocher (HCT) 元素。其形状函数在[1]中进行了描述。组装后的函数保证是 C1 光滑的,即它是连续的,并且它的一阶导数也是连续的(这在三角形内部很容易显示,但在穿过边缘时也是如此)。

在默认情况下(种类='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\]

如果用户选择了 case kind ='geom',则使用简单的几何近似(三角形法向量的加权平均值),这可以提高非常大网格的速度。

参考

[ 1 ]

Michel Bernadou, Kamal Hassan,“一般 Hsieh-Clough-Tocher 三角形的基函数,完整或简化。”,国际工程数值方法杂志,17(5):784 - 789. 2.01。

[ 2 ]

CT Kelley,“优化的迭代方法”。

方法

`__call__` (x, y)

(返回 (x, y) 点处的插值。)

`梯度` (x, y)

(返回 (x, y) 点的插值导数。)

渐变( x , y ) [来源] #

返回 2 个掩码数组的列表,其中包含在指定 (x, y) 点处的插值导数。

参数
x, y类数组

相同形状和任意维数的 x 和 y 坐标。

返回
dzdx, dzdy np.ma.array

2个与xy形状相同的掩码数组;对应于三角剖分之外的 (x, y) 点的值被屏蔽掉。第一个返回的数组包含 \(\frac{\partial z}{\partial x}\)第二个是 \(\frac{\partial z}{\partial y}\).

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 具体实现中定义;

    并返回(作为元组)一个细化的三角形网格和细化的三角剖分节点处的字段的插值。

matplotlib.tri。UniformTriRefiner ( triangulation ) [来源] #

基地:TriRefiner

通过递归细分统一网格细化。

参数
三角测量Triangulation

封装的三角剖分(待完善)

细化场z triinterpolator = None subdiv = 3[来源] #

优化在封装三角剖分上定义的字段。

参数
z (npoints,) 类数组

要细化的字段值,在封装三角剖分的节点处定义。(n_points是初始三角剖分中的点数)

三插值器TriInterpolator,可选

用于场插值的插值器。如果未指定,CubicTriInterpolator将使用 a。

细分整数,默认值:3

细分的递归级别。每个三角形分为4**subdiv子三角形。

返回
refi_triTriangulation

返回的精制三角剖分。

refi_z一维长度数组:refi_tri节点数。

返回的插值字段(在refi_tri节点处)。

细化三角return_tri_index = False细分= 3[来源] #

计算一个统一细化的三角剖分refi_triangulation的封装triangulation

此函数通过将每个父三角形拆分为 4 个子三角形来细化封装的三角剖分,这些子三角形构建在边缘中间节点上,递归细分时间。最后,每个三角形因此被划分为4**subdiv子三角形。

参数
return_tri_index布尔值,默认值:False

是否返回指示每个点的父三角形索引的索引表。

细分整数,默认值:3

细分的递归级别。每个三角形又分为4**subdiv子三角形;因此,默认会为初始三角剖分的每个三角形生成 64 个细化子三角形。

返回
refi_triangulationTriangulation

精致的三角测量。

found_index int 数组

对于refi_triangulation的每个点,包含三角形的初始三角剖分的索引。仅当return_tri_index设置为 True 时才返回。

matplotlib.tri。TriAnalyzer ( triangulation ) [来源] #

定义三角网格分析和改进的基本工具。

TriAnalyzer 封装一个Triangulation对象并为网格分析和网格改进提供基本工具。

参数
三角测量Triangulation

要分析的封装三角剖分。

属性
scale_factors

将三角剖分重新缩放为单位正方形的因素。

circle_ratios ( rescale = True ) [来源] #

返回三角剖分平面度的度量。

内圆半径与外接圆半径之比是广泛使用的三角形平面度指标。它总是且仅适用于等边三角形。低于 0.01 的圆比率表示非常平坦的三角形。<= 0.5== 0.5

为了避免由于 2 轴之间的比例差异而导致的值过低,可以首先重新缩放三角形网格以适应单位正方形scale_factors(仅当重新缩放为 True 时,这是其默认值)。

参数
重新调整布尔值,默认值:True

如果为真,则在内部重新缩放(基于scale_factors),以便(未遮罩的)三角形完全适合单位正方形网格。

返回
掩码数组

对于封装三角剖分的每个“重新缩放”三角形,内圆半径与外接圆半径的比率。对应于被屏蔽三角形的值被屏蔽掉。

get_flat_tri_mask ( min_circle_ratio = 0.01 , rescale = True ) [来源] #

从三角剖分中消除过分平坦的边界三角形。

返回一个掩码new_mask,它允许从位于边界的平面三角形中清除封装的三角剖分(根据它们的circle_ratios())。这个掩码是为了随后使用 应用于三角剖分Triangulation.set_masknew_mask是初始三角剖分掩码的扩展,因为最初被掩码的三角形将保持被掩码。

new_mask数组是递归计算的;在每一步,只有当它们与当前网格边界共享一条边时,才会删除平面三角形。因此,不会在三角化域中创建新洞。

参数
min_circle_ratio浮点数,默认值:0.01

如果 r/R < min_circle_ratio ,将删除具有内圆/外圆半径比 r/R 的边界三角形。

重新调整布尔值,默认值:True

如果为真,首先,在内部重新缩放(基于scale_factors),以便(未遮罩的)三角形完全适合单位正方形网格。这种重新缩放解释了 2 轴之间可能存在的比例差异。

返回
布尔数组

应用于封装三角剖分的掩码。所有最初被遮罩的三角形在 new_mask中仍然被遮罩。

笔记

此功能背后的基本原理是,Delaunay 三角剖分 - 一组非结构化点 - 有时在其边界处包含几乎平坦的三角形,导致绘图中出现伪影(特别是对于高分辨率轮廓)。使用计算的new_mask进行掩蔽,封装的三角剖分将不再包含圆比低于min_circle_ratio的未掩蔽边界三角形,从而提高后续绘图或插值的网格质量。

属性 scale_factors #

将三角剖分重新缩放为单位正方形的因素。

返回
(浮动,浮动)

比例因子 (kx, ky) 使三角剖分 完全适合单位正方形。[triangulation.x * kx, triangulation.y * ky]