STL no da soporte para objetos geométricos, por eso, tenemos que implementar las clases que representan puntos o vectores y que contengan los métodos apropriados para trabajar con ellos.
Por ejemplo en siguiente trozo de código implementa un punto d3_point que simula el comportamiento de un punto tridimensional de Leda tal como lo usamos en el fichero IGPoint.h. El código se usa solamente si la variable HAVE_LEDA no está definida durante la compilación (en el otro caso se ve que se incluye el punto d3_point de Leda).
#if defined(HAVE_LEDA)
#include <LEDA/d3_point.h>
#else
class d3_point {
protected:
double x,y,z;
public:
d3_point(
) :
x(0.0),
y(0.0),
z(0.0)
{
}
d3_point(
double x_,
double y_,
double z_
) :
x(x_),
y(y_),
z(z_)
{
}
d3_point(
const d3_point& p
) :
x(p.x),
y(p.y),
z(p.z)
{
}
d3_point& operator=(
const d3_point& P
) {
x=P.x;
y=P.y;
z=P.z;
return *this;
}
d3_point operator*(
double d
) const {
return d3_point(x*d,y*d,z*d);
}
d3_point operator+(
const d3_point& P
) const {
return d3_point(x+P.x,y+P.y,z+P.z);
}
const d3_point& to_vector(void) const { return *this; }
double xcoord(void) const { return x; }
double ycoord(void) const { return y; }
double zcoord(void) const { return z; }
};
#endif