diff options
author | Jakob Odersky <jodersky@gmail.com> | 2011-03-08 19:50:22 +0000 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2011-03-08 19:50:22 +0000 |
commit | 9d1ee82cc15bff4912414af0efab56ccfa889f5e (patch) | |
tree | 64e1693eb13e2304f9b912862d47cdeb9fc28b1d /src | |
parent | 957bbcc99298823621621d0546bdfa22301db9c0 (diff) | |
download | vhc-9d1ee82cc15bff4912414af0efab56ccfa889f5e.tar.gz vhc-9d1ee82cc15bff4912414af0efab56ccfa889f5e.tar.bz2 vhc-9d1ee82cc15bff4912414af0efab56ccfa889f5e.zip |
[FR] Traduit les commentaires en francais. Desormais tout commentaire sera ecrit en francais.
Diffstat (limited to 'src')
-rw-r--r-- | src/vhc/Vector3D.h | 73 | ||||
-rw-r--r-- | src/vhctest/Vector3DTest.cc | 9 |
2 files changed, 52 insertions, 30 deletions
diff --git a/src/vhc/Vector3D.h b/src/vhc/Vector3D.h index b8116b1..e5e2ffe 100644 --- a/src/vhc/Vector3D.h +++ b/src/vhc/Vector3D.h @@ -15,89 +15,102 @@ namespace vhc { -/** A three-dimensional vector. Instances of this class are completely immutable, i.e. the - * values (x, y, z), once initialised, cannot be changed anymore. - * This highly facilitates reasoning about code using vectors. +/** Un vecteur de dimension trois. Les instances de cette classes sont completement + * invariables, c'est-a-dire un vecteur une fois initialise, ses composantes ne + * peuvent plus etres modifies. + * Le fait qu'un vecteur ne possede pas d'etat, facilite le raisonement et parait + * surtout naturelle. + * Ainsi, chaque operation sur un vecteur retourne une nouvelle instance. La + * performance perdue ainsi est minimale pour une classe ne contenant que trois + * champs. */ class Vector3D { friend std::ostream& operator<< (std::ostream& output, const Vector3D& v); private: + /** Composante x. */ double x; + + /** Composante y. */ double y; + + /** Composante z. */ double z; public: - /** Creates a new instance of <code>Vector3D</code>. - * @param x x value of this vector - * @param y y value of this vector - * @param z z value of this vector + /** Cree une nouvelle instance de <code>Vector3D</code>. + * @param x 1e composante + * @param y 2e composante + * @param z 3e composante */ - Vector3D(double x, double y, double z) {this->x = x; this->y = y; this->z = z;}; + Vector3D(double _x, double _y, double _z) : x(_x), y(_y), z(_z) {}; - /** Returns the x value of this vector. */ + /** Retourne la composante x de ce vecteur. */ double getX() const {return x;}; - /** Returns the y value of this vector. */ + /** Retourne la composante y de ce vecteur. */ double getY() const {return y;}; - /** Returns the z value of this vector. */ + /** Retourne la composante z de ce vecteur. */ double getZ() const {return z;}; - /** Tests if this vector and vector <code>v</code> are equal, i.e. have the same coordinates. */ + /** Verifie si ce vecteur et le vecteur <code>v</code> sont eqaux, i.e. qu'ils ont les memes composantes. */ bool operator== (const Vector3D& v) const {return x == v.x && y == v.y && z == v.z;}; - /** Tests if this vector and vector <code>v</code> are different, i.e. have different coordinates. */ + /** Verifie si ce vecteur et le vecteur <code>v</code> sont differents, i.e. qu'ils ont des composantes differentes. */ bool operator!= (const Vector3D& v) const {return !((*this) == (v));}; - /** Vector addition. Returns a new vector resulting of adding this vector to vector <code>v</code>. */ + /** Addition de vecteurs. Retourne un nouveau vecteur resultant 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);}; - /** Scalar multipication. Returns a new vector resulting of multiplying this vector by <code>n</code>. */ + /** Multiplication scalaire. Retourne un nouveau vecteur resultant de la multiplication de ce vecteur par <code>n</code>. */ Vector3D operator* (double n) const {return Vector3D(x * n, y * n, z * n);}; - /** Returns the opposite of this vector. */ + /** Retourne l'oppose de ce vecteur. */ Vector3D operator-() const {return (*this) * (-1.0);}; - /** Vector subtraction. Returns a new vector resulting of adding this vector to the opposite of vector <code>v</code>. */ + /** Soustraction de vecteurs. Retourne un nouveau vecteur resultant de la soustraction de ce vecteur avec <code>v</code>. */ Vector3D operator- (const Vector3D& v) const {return (*this) + -v;}; - /** Scalar division. Returns a new vector resulting of multiplying this vector by the inverse of <code>n</code>. */ + /** Division scalaire. Retourne un nouveau vecteur resultant de la division de ce vecteur par <code>n</code>. */ Vector3D operator/ (double n) const {return (*this) * (1.0 / n) ;}; - /** Dot product. Returns the dot product of this vector and vector <code>v</code>. */ + /** 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;}; - /** Cross product. Returns the right-handed cross product of this vector and vector <code>v</code>. */ + /** Produit vectoriel. Retourne le produit vectoriel directe (main droite) de ce vecteur avec le vecteur <code>v</code>. + * Nous avons decide de ne pas utiliser l'operateur `^' pour representer le produit vectoriel car sa precedence est plus + * basse que toutes autres operations 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);}; - /** Length of this vector. */ - double getLength() const {return sqrt(dot(*this));}; - - /** Unit vector parallel to this vector. */ - Vector3D getUnit() const { + /** Vecteur unitaire de ce vecteur. */ + Vector3D operator~() const { if (getLength() != 0.0) return (*this) / getLength(); else throw std::domain_error("Unit vector."); }; - /** Returns a string representation of this vector. */ + /** Retourne la norme du vecteur. */ + double getNorm() const {return sqrt(dot(*this));}; + + /** Retourne une representation en chaine de ce vecteur. */ std::string toString() const { std::stringstream s; s << "Vector3D(" << x << ", " << y << ", " << z << ")"; return s.str(); }; - /** Null vector. (0,0,0) */ + /** Vecteur nulle. (0,0,0) */ static const Vector3D Null; - /** X-axis unit vector. (1, 0, 0) */ + /** Vecteur unitaire, d'axe x. (1, 0, 0) */ static const Vector3D i; - /** Y-axis unit vector. (0, 1, 0) */ + /** Vecteur unitaire, d'axe y. (0, 1, 0) */ static const Vector3D j; - /** Z-axis unit vector. (0, 0, 1) */ + /** Vecteur unitaire, d'axe z. (0, 0, 1) */ static const Vector3D k; }; diff --git a/src/vhctest/Vector3DTest.cc b/src/vhctest/Vector3DTest.cc index b681721..2afca4b 100644 --- a/src/vhctest/Vector3DTest.cc +++ b/src/vhctest/Vector3DTest.cc @@ -25,6 +25,15 @@ using namespace vhc; bool printTest(); int main() { + + Vector3D u = Vector3D(1,2,3); + Vector3D v = u; + cout << "1) u:" << u << endl; + cout << "1) v:" << v << endl; + u = Vector3D(1,2,5); + cout << "2) u:" << u << endl; + cout << "2) v:" << v << endl; + cout << "Vector3D: running tests..." << endl; cout << flush; |