2015-10-13 89 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

相關問題