46 lines
1.6 KiB
C
46 lines
1.6 KiB
C
|
// vect.h -- Vector class with <<, mode state
|
||
|
#ifndef VECTOR_H_
|
||
|
#define VECTOR_H_
|
||
|
#include <iostream>
|
||
|
namespace VECTOR
|
||
|
{
|
||
|
class Vector
|
||
|
{
|
||
|
public:
|
||
|
enum Mode {RECT, POL};
|
||
|
// RECT for rectangular, POL for Polar modes
|
||
|
private:
|
||
|
double x; // horizontal value
|
||
|
double y; // vertical value
|
||
|
double mag; // length of vector
|
||
|
double ang; // direction of vector in degrees
|
||
|
Mode mode; // RECT or POL
|
||
|
// private methods for setting values
|
||
|
void set_mag();
|
||
|
void set_ang();
|
||
|
void set_x();
|
||
|
void set_y();
|
||
|
public:
|
||
|
Vector();
|
||
|
Vector(double n1, double n2, Mode form = RECT);
|
||
|
void reset(double n1, double n2, Mode form = RECT);
|
||
|
~Vector();
|
||
|
double xval() const {return x;} // report x value
|
||
|
double yval() const {return y;} // report y value
|
||
|
double magval() const {return mag;} // report magnitude
|
||
|
double angval() const {return ang;} // report angle
|
||
|
void polar_mode(); // set mode to POL
|
||
|
void rect_mode(); // set mode to RECT
|
||
|
// operator overloading
|
||
|
Vector operator+(const Vector & b) const;
|
||
|
Vector operator-(const Vector & b) const;
|
||
|
Vector operator-() const;
|
||
|
Vector operator*(double n) const;
|
||
|
// friends
|
||
|
friend Vector operator*(double n, const Vector & a);
|
||
|
friend std::ostream & operator<<(std::ostream & os, const Vector & v);
|
||
|
};
|
||
|
|
||
|
} // end namespace VECTOR
|
||
|
#endif
|