/***************************************************************************************
***** CLASS VECTOR HEADER *****
****************************************************************************************
** Author: Peter Stuart
** Email: chester@selway.umt.edu
** Date: 3/7/98
** Description: This class implements a four dimensional vector. Operations include
** scalar product (dot product), vector product (cross product), magnitude, direction,
** projection on another vector, angle between two vectors, and vector arithmetic.
**
** NOTE: The matrices, vectors, and points use homogeneous coordinates
**
***************************************************************************************/
#include
#include
#ifndef __GGVECTOR__
#define __GGVECTOR__
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE !FALSE
#endif
class Vector {
private:
/* Private variables:
_x: x component
_y: y component
_z: z component
_w: w component (should be one for homogeous coordinates)
*/
double _x;
double _y;
double _z;
double _w;
public:
// Constructors, Copy Constructor, and Destructor
Vector(const double xin = 0.0, const double yin = 0.0,
const double zin = 0.0, const double win = 1.0);
Vector(const double p1x, const double p1y, const double p1z,
const double p2x, const double p2y, const double p2z,
const double pw = 1.0);
Vector(const Vector&);
virtual ~Vector();
// basic vector operations
Vector cross(const Vector&) const;
double dot(const Vector&) const;
double magnitude() const;
Vector direction();
Vector projection(const Vector&);
double angle(const Vector&); // angle between vectors in radians
// Assignment operator, arithmetic operators, relational operators, ouput stream
Vector& operator = (const Vector&);
friend Vector operator + (const Vector&, const Vector&); // vector addition
friend Vector operator - (const Vector&, const Vector&); // vector subtraction
friend Vector operator - (const Vector&);
friend Vector operator * (const Vector&, const double); // scalar multiplication
friend Vector operator * (const double, const Vector&); // scalar multiplication
friend Vector operator * (const Vector&, const Vector&); // vector cross product
friend Vector operator / (const Vector&, const double); // scalar division
Vector& operator += (const Vector&);
Vector& operator -= (const Vector&);
Vector& operator *= (const double);
Vector& operator /= (const double);
friend int operator == (const Vector&, const Vector&);
friend int operator != (const Vector&, const Vector&);
friend ostream& operator << (ostream&, const Vector&);
// variable access
double x (void) const { return _x; };
double y (void) const { return _y; };
double z (void) const { return _z; };
double w (void) const { return _w; };
void x (const double xin) { _x = xin; };
void y (const double yin) { _y = yin; };
void z (const double zin) { _z = zin; };
void w (const double win) { _w = win; };
};
// common vector declarations
const Vector zeroVector(0.0, 0.0, 0.0);
const Vector xVector(1.0, 0.0, 0.0);
const Vector yVector(0.0, 1.0, 0.0);
const Vector zVector(0.0, 0.0, 1.0);
const Vector xyzVector(1.0, 1.0, 1.0);
#endif
               (
geocities.com/collegepark)