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),可选
哪些三角形被遮住了。
笔记
为了使三角测量有效,它不能有重复的点、由共线点形成的三角形或重叠的三角形。
属性: -
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)。
每一行通过其起点索引和终点索引定义一条边。每个边只出现一次,即点之间的边 i 和 j 只有一个 (i,j) 或 (J,I) .
-
static
get_from_args_and_kwargs
(*args, **kwargs)[源代码]¶ 从args和kwargs返回一个三角测量对象,并返回剩余的args和kwargs,删除消耗的值。
有两种选择:第一个参数是一个三角测量对象,在这种情况下,它会被返回,或者args和kwargs足以创建一个要返回的新三角测量。在后一种情况下,请参见 Triangulation.__init__ 对于可能的args和kwargs。
-
get_trifinder
()[源代码]¶ 返回默认值
matplotlib.tri.TriFinder
三角测量,必要时创建。这使得同一个trifinder对象很容易共享。
-
property
neighbors
¶ 返回包含相邻三角形的形状(ntri,3)的整数数组。
对于每个三角形,共享相同边的三个三角形的索引,如果没有相邻的三角形,则为-1。
neighbors[i, j]
是从点索引到边的相邻三角形triangles[i, j]
对点索引triangles[i, (j+1)%3]
.
-
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)点处的插值导数。) - 三角测量 :
-
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)点处的插值导数。) - 三角测量 :
-
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_tri :
Triangulation
三角测量 返回精确的三角剖分。
- refi_z :1d长度数组: refi_tri 节点计数。一维长度数组:
返回的插值字段(在 refi_tri 节点)。
- z :1d长度类似阵列
-
refine_triangulation
(return_tri_index=False, subdiv=3)[源代码]¶ 计算一致精确三角剖分 refi_triangulation 封装的
triangulation
.此函数通过将每个父三角形拆分为4个子三角形(构建在边中间节点上)来细化封装的三角剖分,并递归 细分 次。最后,每个三角形被分成
4**subdiv
儿童三角形。参数: - return_tri_indexbool,默认值:False
是否返回指示每个点的父三角形索引的索引表。
- subdivint,默认值:3
细分的递归级别。每个三角形分为
4**subdiv
子三角形;因此,默认结果是初始三角剖分的每个三角形有64个精化的子三角形。
返回: - refi_triangulation :
Triangulation
三角测量 精细三角测量。
- 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]
正好在一个单位正方形内。
- 三角测量 :