biVector forum

Rotor based laplace-beltrami

Was thinking about how to apply geometric algebra to the discrete laplace-beltrami operator. Also referred to as the cotan laplacian. Cotan, because you build it out of a mess of cotangents between edge angles.

One way to derive the cotan operator is that cot(angle) = width/height of a triangle ( aspect ratio ).
My thought was that we could directly use the ratios of the 1-vectors for the width and height. That’s a rotor.

Since we are discretizing a continuous function on a surface, values on those triangles end up in the same vertex tangent space ( in the limit ). So we can consider them as rotors on in-plane values in the same plane. We don’t need a sandwich operator or half angles, we can directly apply the rotors via geometric product.

To help see how this would work let’s think about a single one-ring neighbourhood of a vertex.
Go around a given vertex in a mesh and consider all the rotor elements generated from the connected triangles. If you applied the sum of those rotors to a given test 1-vector you could see that the difference between the input and output would be the angle deficit at that point. This is a measure of curvature. If the neighbourhood was flat the vector would return to the same spot. With positive curvature it should go past and with negative curvature it would end up short.

So it should be possible to go through the formula for the cotan laplacian, replace all occurences of cot with rotors. Now you have a linear system of equations with multivector coefficients you can use as a Discrete Laplace-Betrami operator.

Has anyone done any work on or seen mention of this in the past? Thoughts on this fine Sunday?

It works! Just replacing cotan with rotors in the standard cotan laplacian didn’t work, but following the description I gave for a curvature operator appears to work. Which is nifty because it’s way less code and no trig in sight.

Actually I don’t quite have it right. The ratio I was referring to involves the cot of two angles of the triangle. What I did calculate was done by measuring the angle deficit using the path around the rim of the one-ring. Which is far less accurate than integrating around the circumcentres. My calculation is heavily dependent on the particular geometry of the triangles involved. So close, but not correct.

Still, this demonstrates you can build an approximate Laplace-Beltrami operator using rotors. Which I think is a cool result in itself.

To correct what I’ve done you could calculate the actual circumcentre of the triangles ( use conformal GA or PGA ) and then construct the rotor via (cirum(B)-v)/(circum(A)-v) where A and B are triangles sharing an edge with vertex v.

Probably there is some cleverness there you can use to avoid actually calculating the circumcentres.

1 Like

Was quick enough to try this out using barycentres. Barycentric discrete laplace-beltrami is fine to use ( although not exact), and in some cases it’s to be preferred, as it works with any shaped triangle.

Results are better. You can see the (absolute) curvature map is more consistent around the neck and ears.

Screen Shot 2020-03-02 at 11.42.51 AM