Thank you very much for this useful code. I have a question, it would be great if you could help. Consider 3D data sampled from the same type of physical object whose shape/size varies from one sample to another, which means the radius as a parameter of triangulation varies across samples as well. What would then be the best criterion for the choice of radius? Any idea(s) would be very helpful. Many thanks in advance.

My name is Gustavo and I am PhD student in Ecology in Brazil. I am working in a R code to estimate home range of arboreal mammals. Because these species are arboreal, I am trying to estimate three-dimensional volume based on Kernel probability density functions. Unfortunately, these tetrahedrons are non-convex and I am having a lot of difficult to estimate these volumes. I got very excited when I saw your Matlab forum statements (http://www.mathworks.com/matlabcentral/fileexchange/28851-alpha-shape-volume). The R have a package alphashape3d to deal with these issues, but the functions are new and extremely unstable (the results are crazy, the R crash or no values are returned). The package geometry also is very useful, but it have functions to estimate only convex tetrahedrons.

I am ecologist, not math, and the I have a lot of difficulty with deal with this 3D geometry. Additionally, I have not intimacy with Matlab code. I would like to know if you could help me, or to indicate who can help me to solve this problem. I could send to you a dataset (dataframe com 3 columns [x,y,z] that describe the kernel surface of 95% probability of the opossum to you inspect the data.

If you or other people are interested in helping me. Please send a email to gu_tapirus@hotmail.com

hi, just a quick note. 'delaunay()' requires at least 2 inputs (x,y as a vector, probably couldnt take matrix). i was trying with the 2d example that provided in the code. changed in the 65th line as 'delaunay(X(:,1),X(:,2))'. now it works, the graph looks nice. thanks for the code. i didnt look inside or try with the theory yet, could be wrong! just to let you know...

As I try to run one of your examples, Matlab (7.8.0 R2009) complains with the following message: "??? Error: File: alphavol.m Line: 78 Column: 3
Expression or statement is incorrect--possibly unbalanced (, {, or [."

Examining the referred line, I see:
[~,rcc] = circumcenters(TriRep(T,X));

It seems that Matlab cannot understand the tilde as an output value. I tried to change it to [cc rcc] = circumcenters... and now Matlab complains about line 194, which reads:
[~,p,r] = dmperm(C);
Again, the tilde seems to be the problem.
By the way, as far I as know, tilde is used as a negation operator in Matlab. What is its use here? Any clue on how to solve this problem?

Thanks for this nice code!
One Question:
There are some artefacts inside the volume (like rectangles). How could I avoid them?
As an example run the "3D Example - Ring" with the plotsettings 'FaceColor','r' and 'FaceAlpha',0.5 to see the artefacts inside the volume.
A solution would be very helpfully for me.
Thanks in advance

It looks like the algorithm unequally connects point vertically and horizontally.
Try this data, for example:
n = 1000;
k = 10;
x = linspace(0,1,n)';
y(:,1) = k*x + randn(n,1) - k/2;
y(:,2) = -k*x + randn(n,1) + k/2;
xx = [x;x];
yy = y(:);
alphavol([xx yy], 0.5, 1);

k Z, Thank you for the feedback. It seems to be a problem with DelaunayTri and nonunique data points. DelaunauyTri is also very slow for equally spaced data. I will switch to delaunayn and remove nonunique data points - when I have the time.

Hi, nice code. Although the algorithm is useful when nonconvex data is used, I tested on convex data to check how robust it is. I try the sphere function. The volume of the sphere using alpha=Inf is not the same as the sphere volume, in this case the function convhulln computes more accurately the volume. It seems that summing the volume of all tetrahedron counts more that the overal volume, at least for this case. Check this please.

Updates

05 Oct 2010

DelaunayTri replaced by delaunayn. 3D plots added.

29 Sep 2011

New contact info

08 Mar 2012

More output added. DELAUNAYN replaced by DELAUNAY.