One option you might look at is alphaShape. It's similar to convhull, but more general. It will create non-convex shapes. You use it like this. First I need a simple cloud of points.
npts = 75;
pts = randn(npts,3);
scatter3(pts(:,1),pts(:,2),pts(:,3),'filled')
Then I create my alphaShape, and plot it.
shp = alphaShape(pts);
h = plot(shp);
But the reason this might be useful for you, is that it has a method that will return the volume of the shape:
And another method which will tell you whether other points are inside the shape.
testpts = randn(150,3);
inmask = inShape(shp,testpts);
h.FaceColor = [.75 .75 .75];
h.FaceAlpha = .25;
hold on
scatter3(testpts(inmask,1),testpts(inmask,2),testpts(inmask,3),'.','MarkerEdgeColor','green')
scatter3(testpts(~inmask,1),testpts(~inmask,2),testpts(~inmask,3),'.','MarkerEdgeColor','red')
Best Answer