Boost :

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,