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)。
每行通过其起点索引和终点索引定义一条边。每条边只出现一次,即对于点 i和j之间的边,只有(i, j)或(j, i)。
- 静态 get_from_args_and_kwargs ( * args , ** kwargs ) [来源] #
从 args 和 kwargs 中返回一个 Triangulation 对象,剩余的 args 和 kwargs 已删除消耗的值。
有两种选择:第一个参数是一个 Triangulation 对象,在这种情况下它被返回,或者 args 和 kwargs 足以创建一个新的 Triangulation 来返回。在后一种情况下,请参阅 Triangulation.__init__ 以了解可能的 args 和 kwargs。
- get_trifinder ( ) [来源] #
返回
matplotlib.tri.TriFinder
此三角剖分的默认值,必要时创建它。这允许轻松共享同一个 TriFinder 对象。
- 物业 邻居#
返回包含相邻三角形的形状 (ntri, 3) 的整数数组。
对于每个三角形,共享相同边的三个三角形的索引,如果没有这样的相邻三角形,则为 -1。是从 point index到 point index 的边的相邻三角形。
neighbors[i, j]
triangles[i, j]
triangles[i, (j+1)%3]
- 类 matplotlib.tri。TriContourSet ( ax , * args , ** kwargs ) [来源] #
基地:
ContourSet
为三角形网格创建并存储一组等高线或填充区域。
此类通常不是由用户直接实例化,而是由
tricontour
and实例化tricontourf
。- 属性:
- 斧头
Axes
绘制轮廓的 Axes 对象。
- s的集合
silent_list
PathCollection
Artist
s 代表轮廓。这是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 ) [来源] #
-
三角形网格上的线性插值器。
每个三角形都由一个平面表示,因此点 (x, y) 处的插值位于包含 (x, y) 的三角形平面上。因此,插值在三角剖分中是连续的,但它们的一阶导数在三角形之间的边缘处不连续。
- 参数:
- 三角测量
Triangulation
要插值的三角剖分。
- z (npoints,) 类数组
在网格点处定义的值数组,用于在其间进行插值。
- 三探仪
TriFinder
,可选 如果未指定,则通过调用将使用三角剖分的默认 TriFinder
Triangulation.get_trifinder
。
- 三角测量
方法
`__call__` (x, y)
(返回 (x, y) 点处的插值。)
`梯度` (x, y)
(返回 (x, y) 点的插值导数。)
- 类 matplotlib.tri。CubicTriInterpolator ( triangulation , z , kind = 'min_E' , trifinder = None , dz = None ) [来源] #
-
三角网格上的三次插值器。
在一维中 - 在一个段上 - 三次插值函数由函数的值及其两端的导数定义。这在三角形内部的 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) 点的插值导数。)
- 类 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_tri
Triangulation
返回的精制三角剖分。
- refi_z一维长度数组:refi_tri节点数。
返回的插值字段(在refi_tri节点处)。
- refi_tri
- 细化三角(return_tri_index = False,细分= 3)[来源] #
计算一个统一细化的三角剖分refi_triangulation的封装
triangulation
。此函数通过将每个父三角形拆分为 4 个子三角形来细化封装的三角剖分,这些子三角形构建在边缘中间节点上,递归细分时间。最后,每个三角形因此被划分为
4**subdiv
子三角形。- 参数:
- return_tri_index布尔值,默认值:False
是否返回指示每个点的父三角形索引的索引表。
- 细分整数,默认值:3
细分的递归级别。每个三角形又分为
4**subdiv
子三角形;因此,默认会为初始三角剖分的每个三角形生成 64 个细化子三角形。
- 返回:
- refi_triangulation
Triangulation
精致的三角测量。
- found_index int 数组
对于refi_triangulation的每个点,包含三角形的初始三角剖分的索引。仅当return_tri_index设置为 True 时才返回。
- refi_triangulation
- 类 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_mask
。 new_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]