[vtk-developers] Curvatures class upgrades

Philip Batchelor philip.batchelor at ucl.ac.uk
Fri Jun 10 12:06:20 EDT 2005


Hi all,

I have recently written 2 new algorithms for curvatures. One computes a 
curvature tensor for a triangulated surface using a technique by Taubin, 
the other is just an update of line curvatures (curv. and torsion). Now 
comes the question of where they should go. I'll give a bit more  
details of the current and new algorithms below, first the class 
possibilities.
CLASSES
  Option 1: Make everything part of the current vtkCurvatures class. 
Then there would have to be a 'SetCurvatureToTensor' sth like that for 
the Tensor, and somehow check the cell type to decide whether to use the 
line curvature or not.
         Advantage: backwards compatibility as vtkCurvatures does the 
same by default,
         Disadvantage: it's not that easy, puts lots of switches in the 
class, and the class becomes just a wrapper for lots of things, deciding 
when to use the line curvature makes it a mess?

 Option 2a: Separate the lines and surface curvatures, thus there would 
be at least two classes, vtkPolylineCurvatures and vtkCurvatures. The 
first does curvatures of 1D objects, the other could be an abstract 
class with subclass vtkDiscreteCurvatures (the actual vtkCurvatures) and 
vtkCurvatureTensor.
        Advantage: avoids the clash of lines and surfaces
        Disadvantage: not backwards compatible, vtkCurvatures becomes 
deprecated, need a new name for the base class.

Option 2b: Pushing option 2a further, in a mathematically consistent 
way: an abstract Curvatures class representing curvatures of objects, 
with subclasses corresponding to the dimension of the object, i.e. e.g. 
subclasses vtkLineCurvatures (1D), vtkSurfaceCurvatures (2D), which 
itself would have vtkDiscreteCurvatures (as in 2a) and 
vtkCurvatureTensor subclasses.
        Advantage: it is mathematically consistent, it would keep open 
the possibility to have curvature for higher dimensional objects, or add 
other methods of curvature computations (there are some...)
        Disadvantage: too complicated or abstract?

  Anyone has any comments-preferences? I hope to have summarised 
correctly the discussions we have had with Goodwin Lawlor, and Andrew 
MacLean.

ALGORITHMS
Just to give some details.
-The current vtkCurvatures computes them directly from the 
triangulation, (as angle defects) thus is mainly a loop over 
facets-vertices, finding neighbours, and mathematically the most complex 
operation is angle computation. it's simpistic, but should be relatively 
robust and fast.
-The tensor computation uses a technique from Taubin which sort of 
computes the tensor directly from the triangulation too, although it is 
certainly not that differnt from a fitting method. It computes a tensor 
called the Taubin tensor that has same eigenvectors but different 
eigenvalues, but these eigenvalues are related to the principal 
curvatures. It is quite close in spirit to the previous
in that it requires just finding neighbours, (although in Curvatures I 
was loping over facets, where here I loop over vertices) but, at each 
vertex, it requires a diagonalisation, for which it uses 
vtkMath::Jacobi, which is likely to be difficult part in cost and 
accuracy. To scalar curvatures it adds the possibility of following 
lines of curvatures, and a more sound way to compute the principal 
curvatures, hence derived shape indices etc...
-The line curvature is a simple forward finite difference of the Frenet 
equations. (NB: torsions become meaningless at points where the line 
curvature is zero, ideally we should have a check for this).

Ph








More information about the vtk-developers mailing list