我有一组定义3D轮廓的3D点。我想要做的是获得对应于这个轮廓的最小表面表示(see Minimal Surfaces in Wikipedia)。基本上这需要求解一个非线性偏微分方程。Python中的最小表面解决方案
我需要在Python中做出这样的实现,但是我知道我还没有找到任何关于如何实现这个的网页资源。
任何人都可以指出我的任何资源/这种实现的例子吗?
谢谢, Miguel。
UPDATE
所述的3D表面(理想的三角形网格表示),我想找到由该组3D点的有界(如见于该图中,点位于在最佳拟合平面) :
好了,所以做了一些研究,我发现,这个极小曲面问题与Biharmonic Equation的解决方案相关的,而且我还发现,Thin-plate spline是这个方程根本上解决。
所以我认为这种方法将尝试使用薄板样条拟合表面的稀疏表示(由点的3D轮廓给出)。我发现this example in scipy.interpolate其中散布数据(x,y,z格式)使用薄板样条插值以获得均匀网格(XI,YI)上的ZI坐标。
出现两个问题: (1)对于3D轮廓点集计算曲面问题,薄板样条插值是否是正确的方法? (2)如果是这样,如何使用非均匀网格对scipy执行薄板插值?
再次感谢! 米格尔
UPDATE:实现在Matlab(但它不工作ON SciPy的Python)的
我跟着this example使用Matlab的tpaps功能和获得的最小表面安装到我的轮廓上的统一电网。这是结果在Matlab(看上去太棒了!):
不过,我需要在Python实现这一点,所以我使用的是包scipy.interpolate.Rbf和thin-plate功能。下面是在Python代码(XYZ包含每个点的轮廓中的三维坐标):
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
你的3d点与你想要的输出之间的关系究竟是什么?你有没有位于最小表面上的点,并且你正在寻找该表面的代数描述?或者点描述了某种边界,并且您正在寻找由该边界定义的最小曲面?你的输出应该是什么形式?它可能有助于查看整个matlab代码,以便人们可以寻找翻译方法,即使不理解解释为最小曲面。 https://launchpad.net/cbcpdesys看起来有用吗? –
+0
@MvG:在我更新的问题中查看更多详情。 (1)这些点大致位于最小的表面上; (2)这些点描述尚未获得的曲面的边界(3)理想情况下,我想获得的曲面类型是三角形网格表示。 –
+0
尝试在http://scicomp.stackexchange.com中询问。 –