$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Theodore Papadopoulo (Theodore.Papadopoulo_at_[hidden])
Date: 2006-03-23 04:51:42
On Wed, 2006-03-22 at 21:52 +0100, Janek Kozicki wrote:
> yes, certainly. At first we should decide what entities should appear,
> how to name them, and how to sort them into namespaces, to begin with,
> that's my library:
> 
> - vector2    +
> - vector3    +
> - vector4    +
> - matrix2    +
> - matrix3    +
> - matrix4    +
> - quaternion +
> - se3        +
> 
> Other readers of this list are welcome to add more components and "vote"
> by placing '+' next to it. Of course class names are subject to another
> discussion :)
It is a little surprising to see that to begin with, it is not
geometrical concepts that you speak of but representations
(vectors,quaternions, matrices...). If there is a geometric library
(which I would appreciate a lot since like many others I had to craft my
own with some strenghts and some weaknesses), I would prefer to speak
about geometrical concepts first and their relationship, the
implementation in terms of vectors (which I approve wrt a an
implementation with a struct), matrices, ... should come after.
So I'll somewhat oppose to your proposal (and the following ones):
N is the dimension. namespace notation is just notational not a
proposal.
Euclidean::Point<N>
Euclidean::Line<N>           // not very different from projective
line ??
Euclidean::SemiLine<N>
Euclidean::Segment<N>
Euclidean::Simplex<N>
Euclidean::Basis<N>
Affine:: same as Euclidean except maybe for Basis??
Projective::Point<N>
Projective::Line<N>
Projective::Basis<N>
SemiLines, Segments and Simplices are more complicated to define... 
Constructors::{ most are obvious but some may not be... an Affine Point
from a Projective one is not always possible}.
Transformations:: {
        Rotations, Translations, Scales, Affine, Euclidean, Projective,....
        In my experience, this is the most difficult to properly design except
if one wants to pay    always for the most general projective transform
even for the simpler ones.  
}
Distances:: {
        Point-Point, Point-Line, Point-Segment, Line-Segment, Line-Line, ....
and depends of the geometry and possibly on a "Metric".
}
Miscellanous:: {
        BoundingBoxes,
        Statistics, Volumes, Areas,
        Adding Noise
        ....
}	
        Theo.