vector3 Class Reference

Represents a vector in 3-dimensional real space. More...

#include <openbabel/math/vector3.h>

List of all members.

Public Member Functions

 vector3 (const double inX=0.0, const double inY=0.0, const double inZ=0.0)
 vector3 (const vector3 &v)
void Set (const double inX, const double inY, const double inZ)
void Set (const double *c)
void SetX (const double inX)
void SetY (const double inY)
void SetZ (const double inZ)
void Get (double *c)
double operator[] (unsigned int i)
vector3operator= (const vector3 &v)
const double * AsArray () const
vector3operator+= (const vector3 &v)
vector3operator-= (const vector3 &v)
vector3operator+= (const double *f)
vector3operator-= (const double *f)
vector3operator *= (const double &c)
vector3operator/= (const double &c)
vector3operator *= (const matrix3x3 &)
void randomUnitVector (OBRandom *oeRand=NULL)
vector3normalize ()
bool CanBeNormalized () const
double length_2 () const
double length () const
const double & x () const
const double & y () const
const double & z () const
double & x ()
double & y ()
double & z ()
int operator== (const vector3 &) const
int operator!= (const vector3 &other) const
bool IsApprox (const vector3 &other, const double &precision) const
double distSq (const vector3 &vv) const
bool createOrthoVector (vector3 &v) const


Detailed Description

Represents a vector in 3-dimensional real space.

The vector3 class was designed to simplify operations with floating point coordinates. To this end many of the common operations have been overloaded for simplicity. Vector addition, subtraction, scalar multiplication, dot product, cross product, magnitude and a number of other utility functions are built in to the vector class. For a full description of the class member functions please consult the documentation. The following code demonstrates several of the functions of the vector class:

    vector3 v1,v2,v3;
    v1 = VX;
    v2 = VY;
    v3 = cross(v1,v2);
    v3 *= 2.5;
    v3.normalize();


Constructor & Destructor Documentation

vector3 ( const double  inX = 0.0,
const double  inY = 0.0,
const double  inZ = 0.0 
) [inline]

Constructor.

vector3 ( const vector3 v  )  [inline]

Copy Constructor.


Member Function Documentation

void Set ( const double  inX,
const double  inY,
const double  inZ 
) [inline]

Set x,y and z-component of a vector.

void Set ( const double *  c  )  [inline]

Set x,y and z-component of a vector from c[0]..c[2].

void SetX ( const double  inX  )  [inline]

Access function to get the x-coordinate of the vector.

void SetY ( const double  inY  )  [inline]

Access function to get the y-coordinate of the vector.

void SetZ ( const double  inZ  )  [inline]

Access function to get the z-coordinate of the vector.

void Get ( double *  c  )  [inline]

Set c[0]..c[2] to the components of the vector.

Warning:
No error checking is performed

double operator[] ( unsigned int  i  ) 

Access function to x: [0], y: [1], and z[2].

This (slow) method allows to access the elements of the vector as if it were an array of doubles. If the index is > 2, then a warning is printed and 0.0 is returned. Otherwise, if i is 0, 1 or 2, then a reference to x, y or z is returned, respectively.

Warning:
This method is primarily designed to facilitate the integration ('Open Babelization') of code that uses arrays of doubles rather than the vector class. Due to the error checks the method is of course very slow and should therefore be avoided in production code.

vector3& operator= ( const vector3 v  )  [inline]

Assignment.

const double* AsArray (  )  const [inline]

Returns:
the vector as a const double *

vector3& operator+= ( const vector3 v  )  [inline]

Vector addition (add v to *this).

Returns:
*this + v

vector3& operator-= ( const vector3 v  )  [inline]

Vector subtraction (subtract v from *this).

Returns:
*this - v

vector3& operator+= ( const double *  f  )  [inline]

Scalar addition (add f to *this).

Returns:
*this + f

vector3& operator-= ( const double *  f  )  [inline]

Scalar subtraction (subtract f from *this).

Returns:
*this - f

vector3& operator *= ( const double &  c  )  [inline]

Scalar multiplication (multiply *this by c).

Returns:
*this * c

vector3& operator/= ( const double &  c  )  [inline]

Scalar division (divide *this by c).

Returns:
*this divided by c

vector3 & operator *= ( const matrix3x3  ) 

Multiplication of matrix and vector

Returns:
the result (i.e., the updated vector)
Todo:
Currently unimplemented

void randomUnitVector ( OBRandom obRandP = NULL  ) 

Create a random unit vector.

Replaces *this with a random unit vector, which is (supposed to be) uniformly distributed over the unit sphere. Uses the random number generator obRand, or uses the system number generator with a time seed if obRand == NULL.

Parameters:
obRandP random number generator to use, or NULL, if the system random number generator (with time seed) should be used

vector3 & normalize (  ) 

Scales a vector to give it length one.

Returns:
the result (i.e., the normalized vector)

bool CanBeNormalized (  )  const

Returns:
Whether a vector can be normalized

This method returns true if *this can be safely normalized. Vectors that can't be safely normalized are:

double length_2 (  )  const [inline]

Returns:
The length of the vector squared

double length (  )  const [inline]

Returns:
The vector length

const double& x (  )  const [inline]

Access function to get the x-coordinate of the vector.

const double& y (  )  const [inline]

Access function to get the y-coordinate of the vector.

const double& z (  )  const [inline]

Access function to get the z-coordinate of the vector.

double& x (  )  [inline]

Access function to set the x-coordinate of the vector.

double& y (  )  [inline]

Access function to set the y-coordinate of the vector.

double& z (  )  [inline]

Access function to set the z-coordinate of the vector.

int operator== ( const vector3  )  const

Comparison Methods Equivalence of vectors.

Deprecated:
This method uses unreliable floating point == comparisons Use vector3::IsApprox() instead.
Returns:
true if every component is equal

int operator!= ( const vector3 other  )  const [inline]

Deprecated:
This method uses unreliable floating point == comparisons Use vector3::IsApprox() instead.
Returns:
true if at least one component of the two vectors is !=

bool IsApprox ( const vector3 other,
const double &  precision 
) const

Safe comparison for floating-point vector3.

Returns:
true if the vector *this is approximately equal to the vector other, to the precision precision. More specifically, this method works exactly like the OpenBabel::IsApprox() function, replacing the absolute value for doubles by the norm for vectors.
Parameters:
other The vector for comparison
precision This parameter plays the same role as in OpenBabel::IsApprox().

double distSq ( const vector3 vv  )  const [inline]

Returns:
square of the distance between *this and vv

equivalent to length_2(*this-vv)

bool createOrthoVector ( vector3 v  )  const

Construct a unit vector orthogonal to *this.

Creates a vector of length one, orthogonal to *this.

Returns:
Whether the method was successful


The documentation for this class was generated from the following files: