summaryrefslogtreecommitdiff
path: root/src/main/Vector3D.h
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2011-04-17 20:05:38 +0000
committerJakob Odersky <jodersky@gmail.com>2011-04-17 20:05:38 +0000
commit964f0f8a7c88c1128c2edbef1fb36a86ed9864cf (patch)
tree38ef5ce1e578e7a40f3b08d30cee8666f0bea2e4 /src/main/Vector3D.h
parent064e27d5e7bf451542cc89ee0a05a06447acdc88 (diff)
downloadvhc-964f0f8a7c88c1128c2edbef1fb36a86ed9864cf.tar.gz
vhc-964f0f8a7c88c1128c2edbef1fb36a86ed9864cf.tar.bz2
vhc-964f0f8a7c88c1128c2edbef1fb36a86ed9864cf.zip
Migration de tous les implementations dans les fichier .h vers les fichiers .cc
Diffstat (limited to 'src/main/Vector3D.h')
-rw-r--r--src/main/Vector3D.h62
1 files changed, 23 insertions, 39 deletions
diff --git a/src/main/Vector3D.h b/src/main/Vector3D.h
index a7764df..c4935e2 100644
--- a/src/main/Vector3D.h
+++ b/src/main/Vector3D.h
@@ -10,7 +10,7 @@
#include <sstream>
#include <math.h>
-#include "exception.h"
+#include "exceptions.h"
#include "Printable.h"
namespace vhc {
@@ -48,87 +48,71 @@ public:
* @param _y 2e composante
* @param _z 3e composante
*/
- Vector3D(double _x, double _y, double _z) : x(_x), y(_y), z(_z), normCache(-1) {};
+ Vector3D(double _x, double _y, double _z);
/** Retourne la composante x de ce vecteur. */
- double getX() const {return x;};
+ double getX() const;
/** Retourne la composante y de ce vecteur. */
- double getY() const {return y;};
+ double getY() const;
/** Retourne la composante z de ce vecteur. */
- double getZ() const {return z;};
+ double getZ() const;
/** Vérifie si ce vecteur et le vecteur <code>v</code> sont égaux, i.e. qu'ils ont les mêmes composantes. */
- bool operator== (const Vector3D& v) const {return x == v.x && y == v.y && z == v.z;};
+ bool operator== (const Vector3D& v) const;
/** Vérifie si ce vecteur et le vecteur <code>v</code> sont différents, i.e. qu'ils ont des composantes différentes. */
- bool operator!= (const Vector3D& v) const {return !((*this) == (v));};
+ bool operator!= (const Vector3D& v) const;
/** Addition de vecteurs. Retourne un nouveau vecteur résultant de l'addition de ce vecteur avec <code>v</code>. */
- Vector3D operator+ (const Vector3D& v) const {return Vector3D(x + v.x, y + v.y, z + v.z);};
+ Vector3D operator+ (const Vector3D& v) const;
/** Multiplication scalaire. Retourne un nouveau vecteur résultant de la multiplication de ce vecteur par <code>n</code>. */
- Vector3D operator* (double n) const {return Vector3D(x * n, y * n, z * n);};
+ Vector3D operator* (double n) const;
/** Retourne l'opposé de ce vecteur. */
- Vector3D operator-() const {return (*this) * (-1.0);};
+ Vector3D operator-() const;
/** Soustraction de vecteurs. Retourne un nouveau vecteur résultant de la soustraction de ce vecteur avec <code>v</code>. */
- Vector3D operator- (const Vector3D& v) const {return (*this) + -v;};
+ Vector3D operator- (const Vector3D& v) const;
/** Division scalaire. Retourne un nouveau vecteur résultant de la division de ce vecteur par <code>n</code>. */
- Vector3D operator/ (double n) const {return (*this) * (1.0 / n) ;};
+ Vector3D operator/ (double n) const;
/** Produit scalaire. Retourne le produit scalaire de ce vecteur avec le vecteur <code>v</code>. */
- double dot(const Vector3D& v) const {return x * v.x + y * v.y + z * v.z;};
+ double dot(const Vector3D& v) const;
/** Produit vectoriel. Retourne le produit vectoriel direct (main droite) de ce vecteur avec le vecteur <code>v</code>.
* Nous avons decidé de ne pas utiliser l'operateur `^' pour représenter le produit vectoriel car sa précédence est plus
* basse que toutes autres opérations binaires sur les vecteurs.
*/
- Vector3D cross(const Vector3D& v) const {return Vector3D(y * v.z - v.y * z, v.x * z - x * v.z, x * v.y - v.x * y);};
+ Vector3D cross(const Vector3D& v) const;
/** Vecteur unitaire de ce vecteur. */
- Vector3D operator~() const {
- if (norm() != 0.0) return (*this) / norm();
- else throw UnsupportedOperationException("Zero vector does not have a unit vector.");
- };
+ Vector3D operator~() const;
+
/** Retourne le vecteur unitaire */
- Vector3D unit() const {return ~(*this);}
+ Vector3D unit() const;
/** Retourne la norme du vecteur. */
- double norm() const {
- if (normCache == -1) normCache = sqrt(dot(*this));
- return normCache;
- }
+ double norm() const;
/** Retourne la norme du vecteur au carre. */
- double normSquare() const {return dot(*this);}
+ double normSquare() const;
/** Retourne une représentation en chaîne de caractères de ce vecteur. */
- virtual std::string toString() const {
- std::stringstream s;
- s << "(" << x << ", " << y << ", " << z << ")";
- return s.str();
- };
+ virtual std::string toString() const;
- double angle(const Vector3D& v) const {return acos(dot(v) / norm() / v.norm());}
+ double angle(const Vector3D& v) const;
/** Produit mixte de 3 vecteurs. Retourne le produit scalaire de ce vecteur
* avec le produit vectoriel de deux vecteurs <code>v</code> et <code>w</code>). */
- double tripleProduct(const Vector3D& v, const Vector3D& w) const { return dot(v.cross(w)); }
+ double tripleProduct(const Vector3D& v, const Vector3D& w) const;
/** Rotation vectorielle. Retourne le vecteur courant, évalué dans la formule en <code>a</code>,
* le vecteur de l'axe, et en <code>t</code>, l'angle de rotation. */
- Vector3D rotate(const Vector3D& axis, double t) const {
- const Vector3D& x = *this;
- const Vector3D& a = ~axis;
-
- //cos(t) x + ( 1-cos(t) ) (x*a) a + sin(t) a ^ x
-
- return x * cos(t) + a * x.dot(a) * (1-cos(t)) + a.cross(x) * sin(t);
- }
+ Vector3D rotate(const Vector3D& axis, double t) const;
/** Vecteur nul. (0,0,0) */
static const Vector3D Null;