This function calculates the principal curvature directions and values
of a triangulated mesh.
The function first rotates the data so the normal of the current
vertex becomes [-1 0 0], so we can describe the data by XY instead of
Secondly it fits a least-squares quadratic patch to the local
neighborhood of a vertex "f(x,y) = ax^2 + by^2 + cxy + dx + ey + f".
Then the eigenvectors and eigenvalues of the hessian are used to
calculate the principal, mean and gaussian curvature.
FV : A triangulated mesh (see Patch)
usethird : Use third order neighbour vertices for the curvature
fit, making it smoother but less local. true/ false (default)
Cmean : Mean Curvature
Cgaussian : Gaussian Curvature
Dir1 : XYZ Direction of first Principal component
Dir2 : XYZ Direction of second Principal component
Lambda1 : value of first Principal component
Lambda2 : value of second Principal component
Great work! Thank you
Seems to only work on closed patches, if there are open spots, missing faces, Cmean is complex
When I try to run the file on my data, I get the error:
Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN.
> In VectorRotationMatrix (line 7)
By shifting around a sphere we obtain different curvatures. thus the curvature seems to depend on the position of the centre (?)
[xx,yy,zz] = meshgrid(1:side,1:side,1:side);
c=[h_side h_side h_side]; % centre
rr = sqrt( (xx-c(1)).^2 + (yy-c(2)).^2 + (zz-c(3)).^2 );
Great tool, however I keep on getting the following warning:
Warning: Rank deficient
Did anyone experience the same problem? Did you find a solution?
why shifting the cylinder changes the curvature values? Is there an error in calculation?
I used the cylinder provided with this code but shifted the vertices keeping the same scaling. I obtained a different curvature values. Sounds strange to me.
Dear author, Thank you for this work.
However, I have a problem about this code. I am not quite understand the meanning of:
k = rand(1,3)
in the VectorRotationMatrix.
It will be very kind of you, if you can give me some hint.
This version seems much better!
Thank you, there was a bug which I solved by removing abs from the eigenvalues. This version will probably be online in one or two days.
Dear author, I have a question for the result.
Have you ever test your code for the torus? Did you notice that all the values for gauss and mean curvature are positive?
Well, I think this is incorrect.
Dear Mr.Kroon ,
Is it possible that you include how to calculate squared mean curvature over the mesh .
Great submission. Very help. Nice examples provided too!
Fixed eigenvector calculation, sign of eigenvalues and sorting of eigenvectors
Create scripts with code, output, and formatted text in a single executable document.