[Insight-developers] Hierarchy of Transformations : Math vs C++

Paul Hughett hughett@mercur.uphs.upenn.edu
Wed, 20 Dec 2000 13:33:09 -0500


>From Luis Ibanez:

> When trying to define a hierarchy for the RegistrationTransformation
> class, it seems to be a contradiction between the sense of "is a"
> as it is used in math, and as it is used in C++.

1. It seems to me that you are adding unnecessary complexity by using
separate classes for Euclidean, Similarity, and Affine transformations.
The representations are all the same (matrix plus offset) and the
difference is only in what conditions the matrix must satisfy.  These
conditions can be tested by using IsEuclidean, etc methods as needed.

2. The distinction between proper and improper transformations is at
least as important as the one you intend to use and is not reflected
at all in your proposed hierarchy.  The distinction between affine and
linear is probably less important but may matter in some applications.

3. The base class for transformations is not any of the above, but a
more generic transformation class that transforms points in a given
number of dimensions into other points; as a practical matter, it
should probably be bijective and continuous, but we may not want to
actually force that in the class definition.  The obvious subclasses
would include affine, grid-based, and mesh-based transformations;
also possible are perspective and polynomial transformations, though
I believe the first three are enough for us.

4. The file Documents/Registration.pdf discusses some of these issues
in more detail.


Paul Hughett