2015-10-13 93 views
0

我有一个显示一个凹形图形的3D数据数组。我想找到所有不属于图形的点,但是在凸包内。我该怎么做?Matlab:获得凸包的正确方法是什么

我知道我应该使用convhull功能,但我不知道该如何输入(是大小m by n,其中m是点n数量和数组的维数,所以3在我的情况)。另外,我不确定如何处理此函数的输出 - 它与输入矩阵的大小相同。

我很感激任何例子。

+0

等等等等,你有一个数据图可以说file1.txt的点构成一个convexhull,并让说file2.txt的点(内部或外部)的船体? – Jay

回答

1
[K, V] = convhull(YourArray); 

K是贵点相对应的点上的凸包的索引,V只是由凸包跨区卷。因此,您可以使用此行索引查找您在YourArray之后的点。使用

下面的例子:

YourArray= rand(1e3,3); 
[K, V] = convhull(YourArray); 

K给了我一个140x3 'double'包含我的观点和V=0.9291的指数,体积由我的凸包跨越。您可以通过简单地调用

YourArray(K) 

Documentation link

不出所料越来越多的人用的凸包内获得积分,并已实际写入代码,这个奋斗得到的凸包从YourArray回点,见由John D'Errico编码的代码MathWorks Central

+0

根据文档,我的数组“大小为mpts-by-ndim,其中mpts是点的数量,ndim是点所在空间的维度”。那么为什么它会为一个32位乘32乘32的数组工作?我需要找到凸包内的所有点,但不在我的图形中。我该怎么做? – DailyInformation

+0

@DailyInformation - 这可能有助于:http://stackoverflow.com/questions/33110501/reshaping-arrays-in-matlab/33110725#33110725 – rayryeng

+0

大小[32x32x32]的数组基本上是一个均匀分布的3D网格,即32个网格指向每个方向,因此可以使用@rayryeng告诉你的方式将其重塑为Nx3阵列。 – Adriaan

相关问题