Boost logo

Boost :

From: Janek Kozicki (janek_listy_at_[hidden])
Date: 2007-03-06 18:09:16

Kasak Sergey said: (by the date of Mon, 5 Mar 2007 03:45:25 +0300)

> library contain vector(any static size), matrix 4x4, quaternion,
> plane(3D), sphere(3D), AABB(3D) and have little fuzzy logic support.
> This is little code snippet of vector class:

Hello Sergey,

It is really great that you want to spent time hard working on such a
library. There have been numerous discussions in the past. I can
forward you all of them if you want (they sit in my inbox). Every
time I was hoping that such library will finally be done.

The problem is very difficult, because every person seems to have a
unique idea about what this library should have, or shouldn't. Perhaps
even the library name name should be different to make it clear how
the scope of the library is restricted. I still remember my total
surprise, when somebody asked why there is no *planned* support for
conversions between cartesian, polar and cylindrical coordinates.
Support for polylines, points, splines, boxes, tetrahedrons. Support
for higher dimensions 4D, 5D, etc... It's a geometry after all, right?

A quote from old thread, I proposed that such library should have only:

> vector2
> vector3
> vector4
> matrix2
> matrix3
> matrix4
> quaternion
> se3

Someone (Geoffrey Irving) added:

>> vector1
>> matrix1
>> diagonal_matrix2
>> diagonal_matrix3
>> symmetric_matrix2
>> symmetric_matrix3
>> upper_triangular_matrix2
>> upper_triangular_matrix3

And finally someone (Theodore Papadopoulo) added:

>>> Euclidean::Point<N>
>>> Euclidean::Line<N>
>>> 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...


And currently I think that se3 is not necessary. If someone needs it,
he will create it from available components.

So your first step is to very stricly define the scope if your library. It should be:
 1. very small (or else, you will never write it),
 2. and very coherent (or everyone will point out, why have this, and not that)

Ad.2: For instance, why put into library the AABB and not K-dop ? Remove AABB then. Because adding K-dop means that you should add dozens of other bounding volume shapes.

I'm not sure about sphere or plane too. What's the rationale? What is that fuzzy logic?

wish you luck

Janek Kozicki                                                         |

Boost list run by bdawes at, gregod at, cpdaniel at, john at