vetor.h

Ir para a documentação deste ficheiro.
00001 
00005 #ifndef _VETOR__H
00006 #define _VETOR__H
00007 
00008 #include <math.h>
00009 
00017 template <class TIPO>
00018 class Vetor
00019 {
00020 public:
00021     TIPO X, Y;
00022 
00023     /* Construtores */
00024     Vetor();
00025     Vetor(const float, const float);
00026 
00027 
00028     /* Operacoes comuns*/
00029 
00030     Vetor operator +(const Vetor);
00031     Vetor operator -(const Vetor);
00032     Vetor operator *(const Vetor);
00033     Vetor operator /(const Vetor);
00034 
00035     Vetor operator +=(const Vetor);
00036     Vetor operator -=(const Vetor);
00037     Vetor operator *=(const Vetor);
00038     Vetor operator /=(const Vetor);
00039 
00040     Vetor operator +(const TIPO);
00041     Vetor operator -(const TIPO);
00042     Vetor operator *(const TIPO);
00043     Vetor operator /(const TIPO);
00044 
00045     Vetor operator +=(const TIPO);
00046     Vetor operator -=(const TIPO);
00047     Vetor operator *=(const TIPO);
00048     Vetor operator /=(const TIPO);
00049     Vetor operator =(const TIPO);
00050 
00051     Vetor operator -();
00052 
00053     /* Operacoes de comparacao */
00054 
00055     bool operator ==(const Vetor);
00056     bool operator !=(const Vetor);
00057 
00058     /* Opracoes avancadas */
00059 
00060     Vetor reduzir();
00061     float modulo();
00062     float distancia(Vetor);
00063     bool esquerda(Vetor, Vetor);
00064 };
00065 
00066 /*
00067     Classe Vetor : Implementacao
00068 
00069     Encapsula a estrutura de dados e operacoes aplicaveis em um vetor bidimensional.
00070 
00071     rodrigosetti@gmail.com
00072 */
00073 
00074 /* Construtores */
00075 
00076 template <class TIPO>
00077 Vetor<TIPO>::Vetor()
00078 {
00079     X = 0;
00080     Y = 0;
00081 }
00082 
00083 template <class TIPO>
00084 Vetor<TIPO>::Vetor(float x, float y)
00085 {
00086     X = x;
00087     Y = y;
00088 }
00089 
00090 /* Operacoes comuns*/
00091 
00092 #define OPERATOR_FUNC(op)                               \
00093     template <class TIPO>                               \
00094     Vetor<TIPO> inline Vetor<TIPO>::operator op(Vetor A)\
00095     {                                                   \
00096         return Vetor<TIPO>(X op A.X, Y op A.Y);         \
00097     }
00098 
00099 OPERATOR_FUNC(+)
00100 OPERATOR_FUNC(-)
00101 OPERATOR_FUNC(*)
00102 OPERATOR_FUNC(/)
00103 OPERATOR_FUNC(+=)
00104 OPERATOR_FUNC(-=)
00105 OPERATOR_FUNC(*=)
00106 OPERATOR_FUNC(/=)
00107 
00108 #undef OPERATOR_FUNC
00109 #define OPERATOR_FUNC(op)                               \
00110     template <class TIPO>                               \
00111     Vetor<TIPO> inline Vetor<TIPO>::operator op(TIPO c) \
00112     {                                                   \
00113         return Vetor<TIPO>(X op c, Y op c);             \
00114     }
00115 
00116 OPERATOR_FUNC(+)
00117 OPERATOR_FUNC(-)
00118 OPERATOR_FUNC(*)
00119 OPERATOR_FUNC(/)
00120 OPERATOR_FUNC(+=)
00121 OPERATOR_FUNC(-=)
00122 OPERATOR_FUNC(*=)
00123 OPERATOR_FUNC(/=)
00124 OPERATOR_FUNC(=)
00125 
00126 template <class TIPO>
00127 Vetor<TIPO> Vetor<TIPO>::operator -()
00128 {
00129     return Vetor<TIPO>(-X,-Y);
00130 }
00131 
00132 /* Operacoes de comparacao */
00133 
00134 template <class TIPO>
00135 bool inline Vetor<TIPO>::operator ==(Vetor A)
00136 {
00137     return (X == A.X && Y == A.Y);
00138 }
00139 
00140 template <class TIPO>
00141 bool inline Vetor<TIPO>::operator !=(Vetor A)
00142 {
00143     return (X != A.X || Y != A.Y);
00144 }
00145 
00146 /* Operacoes avancadas */
00147 
00148 template <class TIPO>
00149 Vetor<TIPO> inline Vetor<TIPO>::reduzir()
00150 {
00151     return Vetor<TIPO>(X / sqrt((X*X)+(Y*Y)), Y / sqrt((X*X)+(Y*Y)));
00152 }
00153 
00154 template <class TIPO>
00155 float inline Vetor<TIPO>::modulo()
00156 {
00157     return sqrt((X*X)+(Y*Y));
00158 }
00159 
00160 template <class TIPO>
00161 float inline Vetor<TIPO>::distancia(Vetor A)
00162 {
00163     return sqrt(((X - A.X)*(X - A.X)) + ((Y - A.Y)*(Y - A.Y)));
00164 }
00165 
00166 
00167 #endif /* #ifndef _VETOR__H */

Gerado em Mon May 4 14:52:59 2009 para Simvida por  doxygen 1.5.8