[vtkusers] vtkCurvatures: mean curvature

philip batchelor philipp.batchelor at kcl.ac.uk
Wed Sep 29 04:26:47 EDT 2004


Hi

I wrote that code, so I'll attempt some answers (all very good questions 
by the way, I sweated on them at the time):

(1) The curvature along an edge e: without going into too much 
calculations here: image the edge is smoothed by replacing it with
a sector of cylinder, i.e. its cross section is a arc of circle with 
small radius eps, and angle dihedral(e), length length(e) = l.

**The exact, differential geometric principal curvatures are 0 and 
1/eps, thus mean curvature H = 1/(2*eps), constant over this region, thus
integrated over this smoothed edge region, we get

Area * 1/(2*eps) = l*dihedral(e)*eps/(2*eps) = l*dihedral(e)/2,

  independent of eps. Thus it makes sense to attribute l*dihedral(e)/2 
to that edge, note this is an integral, i.e. units of mean curvature x 
area.

**The units of mean curvatures are 1/distance, and we need to normalise 
by a surface area,
we have to share the facet area between  3  edges, thus the factor A/3, 
and an edge has two vertices, thus factor 1/2. This is acknowledgeably 
heuristic (as Tim says, there is no unique way to go from continuous to 
discrete), I checked a posteriori by computing curvatures in cases where 
I know its value (sphere with fixed radius e.g.), and the overall 
scaling factor appeared correct.

(2) and (3). Very good point. The mean curvature is NOT uniquely 
defined, only UP TO SIGN. It is a local quantity, thus we just need a 
local orientation == local choice of outward or inward  normal. To have 
a GLOBALLY defined mean curvature, one HAS to run the surface through 
vktPolyDataNormals or anything which orients the surface, in the sense 
that the normal always points out or in. (NB: it is NOT possible for 
every surface, e.g. Moebius band, Klein bottle, but most surfaces you 
are likely to meet are orientable I suppose). This means that if an edge 
in one facet is traversed in one direction, it is traversed in opposite 
direction in neighbouring facet, this gives a unique direction to the 
edge. We need this, because to compute dihedral(e) , we need both the 
cosine and the sine. NB: the C++ function acos returns only an angle in 
[0,pi], the dihedral angle is defined as a signed angle in [-pi,pi], 
i.e. we need to use the atan2 function. Then the angle uniquely defined 
(this choice is fixed by one of the 2 choices of normal). To insist: a 
choice of outward normal N fixes the direction of e, deciding on 
anti-clockwise order e.g.


I had made some quick and dirty web page to try to clarify this, see 
Fig.3 at http://www-ipg.umds.ac.uk/p.batchelor/curvatures/node12.html
(but there were recently problems with latex2html, and transparent png
does anyone know if this is sorted? There are some additional refs at
http://www-ipg.umds.ac.uk/p.batchelor/curvatures/node24.html

Ph




arv0075 wrote:
> I believe this mean curvature implementation is a bit different than the
> one used in VTK (since there's no certified -right- way of going from
> continuous to discrete curvature), but the following paper:
> 
>    http://www-grail.usc.edu/pubs/DMSB_III.pdf
> 
> should help explain why it is how it is.  (Took me a while too).
> 
> HTH,
> 
> 
> 
> -Tim
> 
> ---------------------------------------
>  Timothy R. Jarvis                   
> ---------------------------------------
> Graduate Research Assistant 
> International Neuroimaging Consortium
> VA Medical Center
> 612-467-2619
> http://www.neurovia.umn.edu
> ---------------------------------------
> 
> On 28 Sep 2004, Bernard Chiu wrote:
> 
>>Dear vtk users,
>>
>>I am a novice in differential geometry and I would like to ask the
> 
> experts
> 
>>about a number of issues in the implementation of the class vtkCurvature:
>>
>>(1)I understand that the mean curvature of an vertex was calculated by
>>averaging the curvature along each edge connected to the vertex. However,
> 
> I
> 
>>don't understand how the curvature along an edge can be calculated by
> 
> H(edge
> 
>>e) = length(e)*dihedral_angle(e). In addition, curvature calculated using
>>this equation seems to be scaled by a factor (3/Af) in the code, where Af
> 
> is
> 
>>the total area of two neighbouring triangles that have edge e as their
>>common edge.
>>Could anyone explain why the curvature of each edge was computed this
> 
> way?
> 
>>(2) In the calculation of the mean curvature, the comments state that the
>>normal was assumed to be pointing outwards. In the code, the vertices of
> 
> a
> 
>>triangle were retrieved in an order according to its id. I thought the id
> 
> of
> 
>>a triangle can be ordered arbitrarily, and therefore, I don't understand
> 
> how
> 
>>we can be sure that the normal always points outwards.
>>
>>(3)Since the order of the vertices in a triangle is arbitrary, there are
> 
> two
> 
>>choices in the direction of the unit vector pointing along the direction
> 
> of
> 
>>an edge (this unit vector is denoted by e in the code) (one of the
> 
> choices
> 
>>has direction exactly opposite to each other). The way in which the sine
> 
> of
> 
>>the dihedral_angle was calculated would imply that the dihedral_angle is
> 
> not
> 
>>uniquely defined, even if the normal of the triangles are defined as
>>pointing outwards. Then, would it mean the curvature itself is not
> 
> uniquely
> 
>>defined?
>>
>>Thanks in advance for your help,
>>
>>Bernard Chiu
>>
>>_______________________________________________
>>This is the private VTK discussion list. 
>>Please keep messages on-topic. Check the FAQ at:
>><http://public.kitware.com/cgi-bin/vtkfaq>
>>Follow this link to subscribe/unsubscribe:
>>http://www.vtk.org/mailman/listinfo/vtkusers
>>
> 
> 
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers




More information about the vtkusers mailing list