From cd21ed5dd14012a61f83c696ab765995a4fad624 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Wed, 16 Mar 2011 15:22:22 +0000 Subject: ajout de printable --- src/main/Makefile | 2 +- src/main/Particle.cc | 4 --- src/main/Particle.h | 70 ++++++++++++++++++++++++++++++++++-------------- src/main/Printable.cc | 20 ++++++++++++++ src/main/Printable.h | 28 +++++++++++++++++++ src/main/Vector3D.cc | 5 ---- src/main/Vector3D.h | 5 ++-- src/test/Makefile | 2 +- src/test/ParticleTest.cc | 20 ++++++++++++++ src/test/Vector3DTest.cc | 1 - 10 files changed, 122 insertions(+), 35 deletions(-) create mode 100644 src/main/Printable.cc create mode 100644 src/main/Printable.h create mode 100644 src/test/ParticleTest.cc diff --git a/src/main/Makefile b/src/main/Makefile index c6dc1e1..8b68115 100644 --- a/src/main/Makefile +++ b/src/main/Makefile @@ -13,7 +13,7 @@ LOCALDIR = main # ==> Ajouter ici les objets a compiler # Si un objet necessite une compilation non-standard (i.e. pas de regle du style Foo.o : Foo.cc Foo.h), rajouter # cette regle. -LOCALOBJS = Vector3D.o Particle.o +LOCALOBJS = Vector3D.o Particle.o Printable.o OBJS=$(addprefix $(BINDIR)/$(LOCALDIR)/,$(LOCALOBJS)) .PHONY = lib diff --git a/src/main/Particle.cc b/src/main/Particle.cc index 2917449..34e4682 100644 --- a/src/main/Particle.cc +++ b/src/main/Particle.cc @@ -10,8 +10,4 @@ namespace vhc { -Particle::~Particle() { - // TODO Auto-generated destructor stub -} - } diff --git a/src/main/Particle.h b/src/main/Particle.h index cc15c93..c59d198 100644 --- a/src/main/Particle.h +++ b/src/main/Particle.h @@ -8,51 +8,81 @@ #ifndef PARTICLE_H_ #define PARTICLE_H_ +#include #include "Vector3D.h" +#include "Printable.h" namespace vhc { -class Particle { +/** Classe representant une particule. + * TODO ajouter facteur gamma, energie, constructeur etc...*/ +class Particle: public Printable { private: + + /** Position de cette particule. */ Vector3D position; + + /** Vitesse de cette particule. */ + Vector3D velocity; + + /** Force resultante sur cette particule. */ Vector3D force; + + /** Masse de cette particlue. */ double mass; + + /** Charge de cette particule. */ double charge; public: - void applyForce(const Vector3D& f) {force = force + f;} + Particle(const Vector3D& position0, double mass, double charge): + position(position0), + velocity(0, 0, 0), + force(0, 0, 0), + mass(mass), + charge(charge) + {}; + + + /** Retourne la position de cette particule. */ Vector3D getPosition() const {return position;} + /** Affecte la position de cette particule. */ void setPosition(const Vector3D& pos) {position = pos;} + /** Retourne la force resultante sur cette particule. */ Vector3D getForce() const {return force;} - double getMass() const {return mass;} - - double getCharge() const {return charge;} - - - /* - Vector3D getPosition() {return position;} + /** Affecte la force resultante sur cette particule. */ + void setForce(const Vector3D& f) {force = f;} - Vector3D getVelocity(); + /** Applique une force sur cette particule. */ + void applyForce(const Vector3D& f) {force = force + f;} - Vector3D getEnergy(); + /** Retourne la masse de cette particule. */ + double getMass() const {return mass;} - Vector3D getGamma(); + /** Retourne la charge de cette particule. */ + double getCharge() const {return charge;} - Vector3D getMomentum(); -*/ - Particle(const Vector3D& position0, double mass, double charge): - position(position0), - force(0, 0, 0), - mass(mass), - charge(charge) {}; + /** Retourne la vitesse de cette particule. */ + Vector3D getVelocity() const {return velocity;} + + /** Retourne une representation en chaine de ce vecteur. */ + std::string toString() const { + std::stringstream s; + s << "Particle:" << "\n"; + s << "\tPosition: " << position << "\n"; + s << "\tVelocity: " << velocity << "\n"; + s << "\tMass: " << mass << "\n"; + s << "\tCharge: " << charge << "\n"; + s << "\tForce: " << force << "\n"; + return s.str(); + } - virtual ~Particle(); }; } diff --git a/src/main/Printable.cc b/src/main/Printable.cc new file mode 100644 index 0000000..5139ad1 --- /dev/null +++ b/src/main/Printable.cc @@ -0,0 +1,20 @@ +/* + * Printable.cc + * + * Created on: Mar 16, 2011 + * Author: jakob + */ + +#include "Printable.h" +#include + +using namespace std; + +namespace vhc { + +std::ostream& operator<< (ostream& output, const Printable& p) { + output << p.toString(); + return output; +} + +} diff --git a/src/main/Printable.h b/src/main/Printable.h new file mode 100644 index 0000000..f7d3f9b --- /dev/null +++ b/src/main/Printable.h @@ -0,0 +1,28 @@ +/* + * Printable.h + * + * Created on: Mar 16, 2011 + * Author: jakob + */ + +#ifndef PRINTABLE_H_ +#define PRINTABLE_H_ + +#include + +namespace vhc { + +class Printable { + +public: + + /** Retourne une representation en chaine de cet objet imprimable. */ + virtual std::string toString() const = 0; + +}; + +std::ostream& operator<< (std::ostream& output, const Printable& p); + +} + +#endif /* PRINTABLE_H_ */ diff --git a/src/main/Vector3D.cc b/src/main/Vector3D.cc index 8acaa86..9cca834 100644 --- a/src/main/Vector3D.cc +++ b/src/main/Vector3D.cc @@ -17,11 +17,6 @@ Vector3D const Vector3D::i = Vector3D(1.0, 0.0, 0.0); Vector3D const Vector3D::j = Vector3D(0.0, 1.0, 0.0); Vector3D const Vector3D::k = Vector3D(0.0, 0.0, 1.0); -std::ostream& operator<< (ostream& output, const Vector3D& v) { - output << v.toString(); - return output; -} - Vector3D operator* (double n, const Vector3D& v) { return v * n; } diff --git a/src/main/Vector3D.h b/src/main/Vector3D.h index 31094da..4e2acb4 100644 --- a/src/main/Vector3D.h +++ b/src/main/Vector3D.h @@ -12,6 +12,7 @@ #include #include #include +#include "Printable.h" namespace vhc { @@ -24,7 +25,7 @@ namespace vhc { * performance perdue ainsi est minimale pour une classe ne contenant que trois * champs. */ -class Vector3D { +class Vector3D: public Printable { private: /** Composante x. */ @@ -116,8 +117,6 @@ public: }; -std::ostream& operator<< (std::ostream& output, const Vector3D& v); - Vector3D operator* (double n, const Vector3D& v); } // namespace diff --git a/src/test/Makefile b/src/test/Makefile index 26eeacd..c784099 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -18,7 +18,7 @@ LOCALDIR = test # ==> Rajouter ici les tests a compiler, i.e. les noms des fichiers tests _sans_ extension # Si un objet X necessite une compilation non-standard (i.e. pas de regle du style X: X.cc X.h), rajouter cet objet # en fin de BINS ne suffit pas. Il faut de plus creer une nouvelle regle. -LOCALBINS = Vector3DTest +LOCALBINS = Vector3DTest ParticleTest BINS=$(addprefix $(BINDIR)/$(LOCALDIR)/,$(LOCALBINS)) # Inclure les headers de main (source principale) diff --git a/src/test/ParticleTest.cc b/src/test/ParticleTest.cc new file mode 100644 index 0000000..484c484 --- /dev/null +++ b/src/test/ParticleTest.cc @@ -0,0 +1,20 @@ +/* + * ParticleTest.cc + * + * Created on: Mar 16, 2011 + * Author: jakob + */ + +#include "Particle.h" +#include +#include +#include "Vector3D.h" + +using namespace vhc; +using namespace std; + +int main() { + Particle p(Vector3D::Null, 0, 0); + cout << p << endl; + return 0; +} diff --git a/src/test/Vector3DTest.cc b/src/test/Vector3DTest.cc index e96f09b..1cc9063 100644 --- a/src/test/Vector3DTest.cc +++ b/src/test/Vector3DTest.cc @@ -5,7 +5,6 @@ * Author: Jakob Odersky */ - #include #include #include -- cgit v1.2.3