2015-10-13 5 views
0

У меня есть трехмерный массив данных, который показывает один вогнутый рисунок. Я хочу найти все точки, которые не принадлежат фигуре, но находятся внутри выпуклой оболочки. Как мне это сделать?Matlab: каков правильный способ получить выпуклый корпус

Я знаю, что я должен использовать функцию convhull, но я не знаю, как (входной массив размера m by n, где m является числом точек и n этого числа измерений, так 3 в моем случае). Кроме того, я не уверен, как обрабатывать выходные данные этой функции - он имеет тот же размер, что и входная матрица.

Буду признателен за любые примеры.

+0

Подождите, так что у вас есть фигура данных, позволяющая сказать file1.txt точек, составляющих выпуклый корпус, и позволяет сказать 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 просто вызвав

YourArray(K) 

Documentation link

Unsurprisingly больше людей боролись с получением точек в выпуклой оболочке и на самом деле написан код для этого, см 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] в основном представляет собой равномерно распределенную трехмерную сетку, то есть 32 сетки точек в каждом направлении и, таким образом, может быть преобразован в массив Nx3, используя то, что @rayryeng сказал вам – Adriaan

Смежные вопросы