tpaps matlab,Python中最小的表面解决方案

我有一组3D点定义3D轮廓。我想做的是获得与该轮廓

(see Minimal Surfaces in Wikipedia)相对应的最小表面表示。基本上,这需要求解非线性偏微分方程。

我需要在Python中进行这样一个实现,但是要知道我没有找到任何关于如何实现的Web资源。

任何人可以指出任何这样的实现的资源/例子吗?

谢谢,

米格尔

更新

我想要找到的3D表面(理想的是三角形网格表示)是由这组3D点限定的(如图中所示,这些点位于最佳拟合平面):

好的,所以做一些研究,我发现这个最小的表面问题与Biharmonic Equation的解决方案有关,我也发现Thin-plate spline是这个方程式的根本解决方案。

所以我认为这种方法是尝试使用薄板样条拟合表面的稀疏表示(由点的3D轮廓给出)。我发现使用薄板样条插值分散数据(x,y,z格式)以获得均匀网格上的ZI坐标(XI,YI)的this example in scipy.interpolate。

出现两个问题:

(1)薄板样条插值是否是从3D轮廓点集合计算曲面的问题的正确方法?

(2)如果是,如何使用NON-UNIFORM网格在scipy上执行薄板插值?

再次感谢!

米格尔

更新:MATLAB中的实现(但它不在SCIPY PYTHON上工作)

我跟着this example使用Matlab的tpaps函数,并获得了在均匀网格上适合我轮廓的最小表面。这是Matlab中的结果(看起来很棒!):

但是我需要在Python中实现,所以我使用的是scipy.interpolate.Rbf和薄板功能。以下是python中的代码(XYZ包含轮廓中每个点的3D坐标):

GRID_POINTS = 25

x_min = XYZ[:,0].min()

x_max = XYZ[:,0].max()

y_min = XYZ[:,1].min()

y_max = XYZ[:,1].max()

xi = np.linspace(x_min, x_max, GRID_POINTS)

yi = np.linspace(y_min, y_max, GRID_POINTS)

XI, YI = np.meshgrid(xi, yi)

from scipy.interpolate import Rbf

rbf = Rbf(XYZ[:,0],XYZ[:,1],XYZ[:,2],function='thin-plate',smooth=0.0)

ZI = rbf(XI,YI)

然而,这是结果(与Matlab中获得的结果完全不同):

很显然,scipy的结果不符合最小的表面。

是scipy.interpolate.Rbf薄板做的预期,为什么不同于Matlab的结果?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值