【问题标题】:Python: interpolating in a triangular meshPython:在三角形网格中插值
【发布时间】:2018-05-26 04:19:54
【问题描述】:

是否有任何体面的 Pythonic 方法可以在三角形网格中进行插值,或者我需要自己实现吗?也就是说,给定一个 (X,Y) 点,我们将其称为 P,以及一个网格(在 (X,Y) 处的顶点,其值为 Z,形成三角形面),估计 P 处的值。所以这意味着首先找到包含该点的构面,然后进行插值 - 理想情况下,是比仅仅“在构面的顶点之间线性”(即考虑到相邻构面)更高阶的插值?

我可以自己实现它,但如果 Python 中已经有可用的东西的话......

(我检查了 scipy.interpolate,但它的“网格”似乎只是常规的点网格。这不是网格,而是真正的 2D 网格;顶点可以位于任何地方。)

【问题讨论】:

  • 根据我昨晚的工作:我发现没有任何预先存在的东西看起来很好用。我正在使用 scipy.spatial.KDTree 来查找所有附近的方面,然后通过边界框过滤这些方面,最后通过包含检查。我已经为我的所有方面预先计算了它们的邻居和一个关于高度相对于与共享边缘的距离的二次公式(2 个附加的方面 = 4 个唯一点;其中两个定义了边缘,那么这就是解决三个变量的三个距离点) .计划是估计每个边缘的高度并通过相对边缘距离对它们进行加权。应该是可行的。

标签: python interpolation mesh


【解决方案1】:

我经常为此目的使用 matplotlib.tri。这里 Xv,Yv 是三角形的顶点(或节点),Zv 是这些节点的值:

from matplotlib.tri import Triangulation, LinearTriInterpolator, CubicTriInterpolator

#you can add keyword triangles here if you have the triangle array, size [Ntri,3]
triObj = Triangulation(Xv,Yv) 

#linear interpolation
fz = LinearTriInterpolator(triObj,Zv)
Z = fz(X,Y)
#cubic interpolation
fzc = CubicTriInterpolator(triObj,Zv)
Zc = fz(X,Y)

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多