matplotlib.tri

非结构化三角网格函数。

class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None)[源代码]

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

参数:
x, y形状的数组(npoints)

网格点坐标。

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

对于每个三角形,构成三角形的三个点的指数,按逆时针顺序排列。如果未指定,则计算Delaunay三角测量。

maskbool-array-like-of-shape(ntri),可选

哪些三角形被遮住了。

笔记

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

属性:
edges形状的int数组(Nedges,2)

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

neighbors形状的int数组(ntri,3)

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

mask形状的布尔数组(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] .

property edges

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

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

get_cpp_triangulation()[源代码]

返回下面的C++三角测量对象,必要时创建它。

static get_from_args_and_kwargs(*args, **kwargs)[源代码]

从args和kwargs返回一个三角测量对象,并返回剩余的args和kwargs,删除消耗的值。

有两种选择:第一个参数是一个三角测量对象,在这种情况下,它会被返回,或者args和kwargs足以创建一个要返回的新三角测量。在后一种情况下,请参见 Triangulation.__init__ 对于可能的args和kwargs。

get_masked_triangles()[源代码]

返回未屏蔽的三角形数组。

get_trifinder()[源代码]

返回默认值 matplotlib.tri.TriFinder 三角测量,必要时创建。这使得同一个trifinder对象很容易共享。

property neighbors

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

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

set_mask(mask)[源代码]

设置或清除遮罩阵列。

参数:
mask长度为ntri的None或bool数组
class matplotlib.tri.TriContourSet(ax, *args, **kwargs)[源代码]

基类:matplotlib.contour.ContourSet

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

用户可调用方法:clabel

属性:
ax

绘制轮廓的轴对象。

collections

一个无声的线条集合或多集合列表。

levels

轮廓水平。

layers

与线轮廓的级别相同;填充轮廓的级别之间的中间。见 _process_colors() .

根据关键字arg“filled”是False(默认值)还是True,绘制三角形网格等高线或填充区域。

初始值设定项的第一个参数必须是axes对象。其余的参数和关键字参数在的docstring中描述 tricontour .

class matplotlib.tri.TriFinder(triangulation)[源代码]

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

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

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

class matplotlib.tri.TrapezoidMapTriFinder(triangulation)[源代码]

基类:matplotlib.tri.trifinder.TriFinder

TriFinder 类使用“计算几何、算法和应用”一书中的梯形图算法实现,第二版,M.de Berg、M.van Kreveld、M.Overmars和O.Schwarzkopf。

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

class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None)[源代码]

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

派生类实现以下方法:

  • __call__(x, y) ,其中x,y是相同形状的类似数组的点坐标,它返回包含插值z值的相同形状的屏蔽数组。
  • gradient(x, y) ,其中x,y是相同形状的类似数组的点坐标,它返回一个包含2个插值器导数(插值z值相对于x和y的导数)的相同形状的2个遮罩数组的列表。
class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None)[源代码]

基类:matplotlib.tri.triinterpolate.TriInterpolator

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

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

参数:
三角测量Triangulation三角测量

要插入的三角测量。

z形状类似数组(npoints,)

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

三分之一TriFinder 可选TriFinder,可选

如果未指定,将通过调用 Triangulation.get_trifinder .

方法

`__call__` (x, y) (返回(x,y)点处的插值值。)
`gradient` (x, y) (返回(x,y)点处的插值导数。)
gradient(x, y)[源代码]

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

参数:
x, y类数组

同一形状的X和Y坐标以及任意数量的尺寸。

返回:
DZDXnp.ma.array

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

class matplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None)[源代码]

基类:matplotlib.tri.triinterpolate.TriInterpolator

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

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

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

参数:
三角测量Triangulation三角测量

要插入的三角测量。

z形状类似数组(npoints,)

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

kind'min_e'、'geom'、'user',可选

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

  • 如果“Min_e”:(默认值),则计算每个节点的导数以最小化弯曲能量。
  • 如果“geom”:每个节点上的导数都是以相关三角形法线的加权平均值计算的。用于速度优化(大网格)。
  • if“user”:用户提供参数 dz 因此不需要计算。
三分之一TriFinder 可选TriFinder,可选

如果未指定,将通过调用 Triangulation.get_trifinder .

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

仅用于 kind =“用户”。在这种情况下 dz 必须作为(dzdx,dzdy)提供,其中dzdx,dzdy是与 z 并且是在 三角测量 点。

笔记

这个注释有点技术性,详细说明了如何计算三次插值。

插值是基于 三角测量 网格(为了更清楚,网格的每个三角形将被划分为3个子三角形,在每个子三角形上,插值函数是2个坐标的三次多项式)。这种方法来源于有限元分析,所用的单元是一个简化的谢-克劳-托(Hct)单元。其形状功能如 [1]. 装配函数保证C1光滑,即连续,其一阶导数也连续(这很容易在三角形内部显示,但在穿过边缘时也是如此)。

在默认情况下( kind ='min_e'),内插函数将HCT元素形状函数生成的函数空间上的曲率能量最小化-在每个节点上使用强制值但任意导数。最小化函数是所谓的总曲率的积分(基于 [2] -PCG稀疏解算器):

\[E(z)=\frac{1}{2}\int{\Omega}\左(\]

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

工具书类

[1]贝纳多,哈桑,“全三角形或约简三角形的基函数”,国际工程数值方法杂志,17(5):784-789.2.01。
[2]C.T.Kelley,“迭代优化方法”。

方法

`__call__` (x, y) (返回(x,y)点处的插值值。)
`gradient` (x, y) (返回(x,y)点处的插值导数。)
gradient(x, y)[源代码]

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

参数:
x, y类数组

同一形状的X和Y坐标以及任意数量的尺寸。

返回:
DZDXnp.ma.array

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

class matplotlib.tri.TriRefiner(triangulation)[源代码]

实现网格优化的类的抽象基类。

TriRefiner封装了三角测量对象,并提供了网格细化和插值工具。

派生类必须实现:

  • refine_triangulation(return_tri_index=False, **kwargs) ,其中可选关键字参数 关键字参数 在每个trifinder具体实现中定义,并返回:

    • 精确的三角测量,
    • 可选(取决于 return_tri_index ,对于精确三角测量的每个点:它所属的初始三角测量三角形的索引。
  • refine_field(z, triinterpolator=None, **kwargs) ,其中:

    • z 在基本三角剖分节点上定义的字段值数组(要细化),
    • 三插补器 是可选的 TriInterpolator
    • 其他可选关键字参数 关键字参数 在每一个具体实现中都有定义;

    它返回(作为元组)一个精三角网格和精三角节点处字段的内插值。

class matplotlib.tri.UniformTriRefiner(triangulation)[源代码]

基类:matplotlib.tri.trirefine.TriRefiner

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

参数:
三角测量Triangulation三角测量

封装三角测量(待完善)

refine_field(z, triinterpolator=None, subdiv=3)[源代码]

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

参数:
z :1d长度类似阵列 n_points一维阵列长度

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

三插补器TriInterpolator 可选三插补器,可选

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

subdivint,默认值:3

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

返回:
refi_triTriangulation三角测量

返回精确的三角剖分。

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

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

refine_triangulation(return_tri_index=False, subdiv=3)[源代码]

计算一致精确三角剖分 refi_triangulation 封装的 triangulation .

此函数通过将每个父三角形拆分为4个子三角形(构建在边中间节点上)来细化封装的三角剖分,并递归 细分 次。最后,每个三角形被分成 4**subdiv 儿童三角形。

参数:
return_tri_indexbool,默认值:False

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

subdivint,默认值:3

细分的递归级别。每个三角形分为 4**subdiv 子三角形;因此,默认结果是初始三角剖分的每个三角形有64个精化的子三角形。

返回:
refi_triangulationTriangulation三角测量

精细三角测量。

found_index数组数组

包含三角形的初始三角测量的索引,用于 refi_triangulation . 仅当 return_tri_index 设置为真。

class matplotlib.tri.TriAnalyzer(triangulation)[源代码]

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

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

参数:
三角测量Triangulation三角测量

要分析的封装三角测量。

属性:
scale_factors

将三角测量重新调整为单位平方的因子。

circle_ratios(rescale=True)[源代码]

返回三角形平面度的度量值。

内圆半径与外圆半径之比是衡量三角形平面度的常用指标。它总是 <= 0.5== 0.5 仅适用于等边三角形。小于0.01的圆比率表示非常平的三角形。

为了避免由于两个轴之间的比例差而导致值过低,可以首先重新调整三角形网格,使其适合于单位平方 scale_factors (仅当 重新缩放 为真,这是它的默认值)。

参数:
rescalebool,默认值:True

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

返回:
屏蔽阵列

对于封装三角测量的每个“重新缩放”三角形,内圆半径与外圆半径的比率。对应于遮罩三角形的值被遮罩掉。

get_flat_tri_mask(min_circle_ratio=0.01, rescale=True)[源代码]

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

返回掩码 new_mask 它允许从位于平面三角形的边界(根据其 circle_ratios() )此遮罩将随后应用于三角测量,使用 Triangulation.set_mask . new_mask 是初始三角测量遮罩的扩展,即初始遮罩三角形将保持遮罩。

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

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

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

rescalebool,默认值:True

如果为True,则首先在内部重新缩放(基于 scale_factors )这样(无遮罩的)三角形正好适合单位正方形网格。此重缩放说明了2轴之间可能存在的缩放差异。

返回:
布尔数组式

应用于封装三角测量的遮罩。所有最初被遮罩的三角形在 new_mask .

笔记

此函数背后的基本原理是,一个非结构化点集的Delaunay三角测量有时在其边界处包含几乎平坦的三角形,从而导致绘图中出现伪影(尤其是高分辨率轮廓)。用计算机屏蔽 new_mask ,封装的三角剖分将不再包含具有以下圆比率的未屏蔽边界三角形。 min_circle_ratio 从而提高后续绘图或插值的网格质量。

property scale_factors

将三角测量重新调整为单位平方的因子。

返回:
(浮标,浮标)

比例因子(kx,ky)使三角测量 [triangulation.x * kx, triangulation.y * ky] 正好在一个单位正方形内。