小编Cod*_*its的帖子

Python中的最小表面解决方案

我有一组定义3D轮廓的3D点.我想要做的是获得与此轮廓相对应的最小曲面表示(请参阅维基百科中的最小曲面).基本上这需要求解非线性偏微分方程.

在Matlab中,使用该pdenonlin函数几乎是直截了当的(参见Matlab的文档).可以在此处找到用于解决最小表面问题的示例:单位磁盘上的最小表面问题.

我需要在Python中实现这样的实现,但我知道我还没有找到任何关于如何实现这一目标的Web资源.

任何人都可以指出这种实施的任何资源/例子吗?

谢谢,米格尔.

UPDATE

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

在此输入图像描述

好吧,做一些研究我发现这个最小的表面问题与双调和方程的解决方案有关,我还发现薄板样条是这个方程的基本解.

所以我认为这种方法是尝试使用薄板样条来拟合表面的稀疏表示(由点的3D轮廓给出).我在scipy.interpolate中找到了这个例子,其中使用薄板样条插值散射数据(x,y,z格式)以获得均匀网格(XI,YI)上的ZI坐标.

出现两个问题:(1)薄板样条插值是否是从三维轮廓点集计算表面问题的正确方法?(2)如果是这样,如何使用NON-UNIFORM网格在scipy上执行薄板插值?

再次感谢!米格尔

更新:MATLAB中的实现(但它不适用于SCIPY PYTHON)

我使用Matlab的函数跟踪了这个例子,tpaps并在均匀网格上获得了适合我轮廓的最小曲面.这是Matlab的结果(看起来很棒!): 在此输入图像描述

但是我需要在Python中实现它,所以我使用包scipy.interpolate.Rbf和thin-plate函数.这是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)
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

很明显,scipy的结果与最小的表面不对应. …

python geometry interpolation mesh differential-equations

23
推荐指数
1
解决办法
4335
查看次数

按顺时针/逆时针顺序对一组三维点进行排序

在三维空间中,我有一组无序的,比如6分; 这样的事情:

           (A)*
                          (C)*
(E)*
                         (F)*
     (B)*

                  (D)*
Run Code Online (Sandbox Code Playgroud)

这些点形成三维轮廓,但它们是无序的.对于无序我的意思是他们存储在一个

unorderedList = [A - B - C - D - E - F]
Run Code Online (Sandbox Code Playgroud)

我只是想从任意位置开始重新组织这个列表(让我们说A点)并顺时针或逆时针遍历点.像这样的东西:

orderedList = [A - E - B - D - F - C]
Run Code Online (Sandbox Code Playgroud)

要么

orderedList = [A - C - F - D - B - E]
Run Code Online (Sandbox Code Playgroud)

我正在尝试尽可能简单地实现算法,因为提到的点集对应于~420000点的网格上的每个顶点的N环邻域,并且我必须对网格上的每个点执行此操作.

前段时间对二维中的点进行了类似的讨论,但目前我不清楚如何从这种方法转向我的三维场景.

sorting algorithm geometry mesh

10
推荐指数
1
解决办法
6243
查看次数

通过最小化正交距离最佳拟合平面

我有一组从表面网格获得的点(形式为x1,y1,z1 ... xn,yn,zn).我想通过最小化正交距离找到最适合这些点的3D平面.x,y,z坐标是独立的,即我想获得平面方程Ax + By + Cz + D = 0的系数A,B,C,D.

获得A,B,C,D的算法是什么?

注意:在前一篇文章中,通过将z坐标视为x,y的线性函数,讨论了最小二乘意义上的最佳拟合平面.然而,这不是我的情况.

algorithm geometry regression

4
推荐指数
1
解决办法
7994
查看次数