#ifndef VECTOR_H #define VECTOR_H // // ============================================================ // // Vector.h // // ============================================================ // // // Copyright (C) 1992,1993,1994,1995,1996 // // Professor Kenneth I. Joy // Computer Science Department // University of California // Davis, CA 95616 // // Permission is granted to use at your own risk and // distribute this software in source and binary forms // provided the above copyright notice and this paragraph // are preserved on all copies. This software is provided // "as is" with no express or implied warranty. // // // ============================================================ // class Vector { private : double _vx, _vy, _vz ; public : // Constructors Vector () ; Vector ( const double, const double = 0.0, const double = 0.0 ) ; // Copy Constructor Vector ( const Vector& ) ; // Destructor virtual ~Vector () ; // Assignment Vector& operator= ( const Vector& ) ; // Output friend ostream& operator<< ( ostream&, const Vector& ) ; // Comparison friend int operator== ( const Vector&, const Vector& ) ; friend int operator!= ( const Vector&, const Vector& ) ; // Sum, Difference, Scalar Product friend Vector operator+ ( const Vector&, const Vector& ) ; friend Vector operator- ( const Vector&, const Vector& ) ; friend Vector operator- ( const Vector& ) ; friend Vector operator* ( const double&, const Vector& ) ; friend Vector operator* ( const Vector&, const double& ) ; friend Vector operator/ ( const Vector&, const double& ) ; // Immediate Sum, Difference, Scalar Product Vector& operator+= ( const Vector& ) ; Vector& operator-= ( const Vector& ) ; Vector& operator*= ( const double& ) ; Vector& operator/= ( const double& ) ; // Member Functions // Dot Product friend double dot ( const Vector&, const Vector& ) ; // Cross Product friend Vector cross ( const Vector&, const Vector& ) ; // Normalization, Make it a unit Vector void normalize () ; // Vector Length double length () const ; // Access Functions to get // x-coordinate, y-coordinate or // z-coordinate of the vector double x () const { return _vx ; } ; double y () const { return _vy ; } ; double z () const { return _vz ; } ; } ; // The global constant Vectors const Vector VZero ( 0.0, 0.0, 0.0 ) ; const Vector VX ( 1.0, 0.0, 0.0 ) ; const Vector VY ( 0.0, 1.0, 0.0 ) ; const Vector VZ ( 0.0, 0.0, 1.0 ) ; #endif