Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020

Version 3.1.1
matplotlib
Fork me on GitHub

目录

Related Topics

三角形网格

matplotlib.tri

非结构化三角网格函数。

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

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

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

网格点坐标。

三角形 : 形状类似整数数组(ntri,3),可选

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

mask : 与形状类似的布尔数组(ntri),可选

哪些三角形被遮住了。

笔记

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

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

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

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

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

mask : 形状的布尔数组(ntri,3)

遮掩三角形。

is_delaunay : 布尔

三角测量是否为计算的Delaunay三角测量(其中 triangles 未指定)或未指定。

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] .

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对象很容易共享。

neighbors

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

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

set_mask(mask)[源代码]

设置或清除遮罩数组。这要么是无,要么是一个布尔形状数组(ntri)。

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

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

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

派生类实现“调用”(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对象,可选

如果未指定,将通过调用 matplotlib.tri.Triangulation.get_trifinder() .

方法

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

返回在指定X、Y点处包含内插导数的两个屏蔽数组的列表。

参数:
x, y : 类数组

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

返回:
DZDX : np.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

CubictriInterpolator在三角形网格上执行三次插值。

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

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

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

要插入的三角测量。

z : 阵列形状(npoints,)

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

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

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

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

如果未指定,将通过调用 matplotlib.tri.Triangulation.get_trifinder() .

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

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

笔记

这是一个有点技术性和细节的方式A CubicTriInterpolator 计算三次插值。

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

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

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

工具书类

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

方法

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

返回在指定X、Y点处包含内插导数的两个屏蔽数组的列表。

参数:
x, y : 类数组

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

返回:
DZDX : np.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) ,其中可选关键字参数 关键字参数 在每个trifiner具体实现中定义,并返回:

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

    • z 在基本三角测量节点定义的字段值数组(要优化)
    • 三插补器 是一个 TriInterpolator (可选)
    • 其他可选关键字参数 关键字参数 在每个trifiner具体实现中定义

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

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

基类:matplotlib.tri.trirefine.TriRefiner

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

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

封装三角测量(待完善)

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

优化在封装的三角测量上定义的字段。

返回 refi_tri (精确三角测量) refi_z (精确三角测量节点处字段的插值值)。

参数:
z :1d长度类似阵列 n_points : 长度n_点的一维数组

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

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

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

细分 : 整数,可选

细分的递归级别。默认值为3。每个三角形将被分为 4**subdiv 儿童三角形。

返回:
refi_tri : Triangulation 对象 : 三角测量对象

返回的精确三角测量

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

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

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

计算均匀精确的三角测量 refi_triangulation 封装的 triangulation .

此函数通过递归地将每个父三角形拆分为4个子三角形(递归级别)来优化封装的三角测量。 细分 )最后,每个三角形被划分为 4**subdiv 儿童三角形。的默认值 细分 为初始三角测量的每个三角形生成64个精细的子三角。

参数:
return_tri_index : 布尔值,可选

布尔值,指示是否返回指示每个点的父三角形索引的索引表。默认值为假。

细分 : 整数,可选

细分的递归级别。默认值3。每个三角形将被分为 4**subdiv 儿童三角形。

返回:
refi_triangulation : Triangulation : 三角测量

返回的精确三角测量

found_index : 整数类数组

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

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

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

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

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

要分析的封装三角测量。

属性:
`scale_factors`
circle_ratios(rescale=True)[源代码]

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

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

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

参数:
重新缩放 : 布尔值,可选

如果为真,将在内部执行重新缩放(基于 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

重新缩放 : 布尔值,可选

如果为真,将首先在内部执行重新缩放(基于 scale_factors ,使(无遮罩)三角形正好适合单位正方形网格。这种重新缩放说明了两个轴之间可能存在的比例差异。默认(和推荐)值为真。

返回:
new_mask : 像布尔的数组

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

笔记

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

scale_factors

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

返回 k ,2个比例因子的元组。

返回:
k : 2个浮点的元组(kx,ky)

将重新缩放三角测量的浮点数: [triangulation.x * kx, triangulation.y * ky] 正好在一个单位正方形内。