Show Vector.h syntax highlighted
// Demeter Terrain Visualization Library by Clay Fowler
// Copyright (C) 2002 Clay Fowler
// $ID$
/*
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef _VECTOR_DEMETER_H_
#define _VECTOR_DEMETER_H_
#include "Demeter/Globals.h"
/// \brief The Demeter Terrain Engine.
namespace Demeter
{
/// \brief An extremely basic 3D vector class.
/// Demeter does not rely on all of the bells and whistles of most public
/// vector classes, so the external utility of this class is questionable.
/// No distinction is made between points and vectors.
class TERRAIN_API Vector
{
public:
/// \brief Constructs a new Vector with undefined components.
Vector()
{
}
/// \brief Destroys the Vector.
~Vector()
{
}
/// \brief Returns the length of the Vector.
/// Since this is done with a brute force sqrt() call, it is expensive.
/// \return The length of the Vector.
float GetLength();
/// \brief Makes the Vector's length = 1, leaving all 3 components in their original proportions to one another.
/// \param tolerance A number specifying the minimum length of a Vector that will actually be normalized. If the Vector is less than this length it will simply
/// be ignored. This is done to avoid floating point imprecision and errors caused by dividing by values close to or equal to zero.
/// \return The original length of the Vector before it was normalized.
float Normalize(float tolerance = EPSILON);
/// \brief Rotates the Vector about the z-axis.
/// \param theta The angle of rotation in radians.
void RotateZ(float theta);
/// \brief Assigns all of the components of one Vector to another.
Vector & operator =(const Vector & vector);
/// The abscissa of the head of the 3D vector
float x;
/// The ordinate of the head of the 3D vector
float y;
/// The elevation of the head of the 3D vector
float z;
};
}
#endif
See more files for this project here