You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.9 KiB
110 lines
2.9 KiB
/***************************************************************************
|
|
* Copyright (C) 2003-2004 by David Saxton *
|
|
* david@bluehaze.org *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
***************************************************************************/
|
|
|
|
#ifndef VEC_H
|
|
#define VEC_H
|
|
|
|
typedef unsigned uint;
|
|
|
|
/**
|
|
@short Vector of doubles, faster than STL vector
|
|
@author David Saxton
|
|
*/
|
|
class Vector
|
|
{
|
|
public:
|
|
Vector( const int size );
|
|
~Vector();
|
|
|
|
double & operator[]( const int i ) { b_changed=true; return m_vec[i]; }
|
|
const double operator[]( const int i ) const { return m_vec[i]; }
|
|
int size() const { return m_size; }
|
|
/**
|
|
* Resets all values to 0
|
|
*/
|
|
void reset();
|
|
/**
|
|
* Limits the absolute value of each component of this vector to scaleMax
|
|
* times bigger or smaller than the components of limitVector.
|
|
*/
|
|
void limitTo( double scaleMax, Vector * limitVector );
|
|
/**
|
|
* Adds the Vector rhs to this
|
|
*/
|
|
void operator+=( Vector *rhs );
|
|
/**
|
|
* Subtracts the Vector rhs from this
|
|
*/
|
|
void operator-=( Vector *rhs );
|
|
/**
|
|
* Multiplies this Vector by the given scaler constant
|
|
*/
|
|
void operator*=( double s );
|
|
/**
|
|
* Sets this vector equal to the given vector
|
|
*/
|
|
void operator=( Vector& v );
|
|
/**
|
|
* Copies the negative values of the given vector to this vector.
|
|
* (i.e. sets this = -rhs )
|
|
*/
|
|
void negative( Vector *rhs );
|
|
/**
|
|
* Returns the absolute value of this vector, defined as the squareroot
|
|
* of the sum of the square of each element of the vector
|
|
*/
|
|
double abs() const;
|
|
/**
|
|
* Returns true if the vector has changed since setUnchanged was last called
|
|
* Note that this will return true if the vector has just been read, due to
|
|
* limitations with the [] operator.
|
|
*/
|
|
inline bool isChanged() const { return b_changed; }
|
|
/**
|
|
* Sets the changed status to false.
|
|
*/
|
|
inline void setUnchanged() { b_changed=false; }
|
|
|
|
private:
|
|
Vector( const Vector & );
|
|
Vector & operator= ( const Vector & );
|
|
|
|
bool b_changed;
|
|
double *m_vec;
|
|
int m_size;
|
|
};
|
|
|
|
/**
|
|
@short Container for Vector of Vectors
|
|
@author David Saxton
|
|
*/
|
|
class matrix
|
|
{
|
|
public:
|
|
matrix( const uint size );
|
|
~matrix();
|
|
|
|
Vector & operator[]( const uint i ) { return *(m_mat[i]); }
|
|
const Vector & operator[]( const uint i ) const { return *(m_mat[i]); }
|
|
/**
|
|
* Swaps the pointers to the given rows
|
|
*/
|
|
void swapRows( const uint a, const uint b );
|
|
|
|
private:
|
|
matrix( const matrix & );
|
|
matrix & operator= ( const matrix & );
|
|
|
|
Vector **m_mat;
|
|
uint m_size;
|
|
};
|
|
|
|
#endif
|