00001 #ifndef _vector_hh_
00002 #define _vector_hh_
00003
00004 #include "point.hh"
00005 #include <iostream>
00006 #include <string>
00007
00008 namespace anoid {
00009 namespace simple {
00010
00015 class Vector: public Point {
00016 private:
00017 void init(const char *s);
00018 public:
00025 Vector(double getx = 0, double gety = 0, double getz = 0);
00026
00027 Vector(std::string &s);
00028 Vector(char *s);
00029
00034 double getNorm() const;
00035
00040 void setNorm(double newnorm);
00041
00046 void scale(const Vector& v);
00047
00054 friend Vector operator+(const Vector& a, const Vector& b);
00055
00062 friend Vector operator+=(Vector& a, const Vector& b);
00063
00069 Vector operator=(const Vector& a);
00070
00077 friend Vector operator-(const Vector& a, const Vector& b);
00078
00085 friend Vector operator*(const double c, const Vector& a);
00086
00093 friend Vector operator*(const Vector& a, const double c);
00102 friend Vector operator*(const double *d, const Vector& a);
00111 friend Vector operator*(const Vector& a, const double *d);
00112
00119 friend double operator*(const Vector& a, const Vector& b);
00120
00127 friend Vector operator%(const Vector& a, const Vector& b);
00128
00135 friend std::ostream& operator<<(std::ostream& s, const Vector& a);
00136 };
00137
00139 const Vector O(0,0,0);
00140
00142 const Vector I(1,1,1);
00143
00144 const Vector i(1,0,0);
00145 const Vector j(0,1,0);
00146 const Vector k(0,0,1);
00147
00148 };
00149 };
00150
00159 double *matMult(double *A, const double* B);
00160
00169 double *matAdd(double *A, const double* B);
00170
00177 double *transpose(double *A);
00178
00179 double *copyMatrix(double *A, double *B);
00180
00188 double *tilde(double *A, const anoid::simple::Vector v);
00189
00190 #endif