
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.