diff options
author | Jakob Odersky <jodersky@gmail.com> | 2011-03-24 19:29:58 +0000 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2011-03-24 19:29:58 +0000 |
commit | fc731cad0868c7f0d7d794b188c5ccf7cedba0af (patch) | |
tree | 4f9bc578eb12e9d38b48ad7bbbc60127d4c2e873 | |
parent | 160e04489b3dcf5dd3bc1b64c4ca03dc5da96c49 (diff) | |
download | vhc-fc731cad0868c7f0d7d794b188c5ccf7cedba0af.tar.gz vhc-fc731cad0868c7f0d7d794b188c5ccf7cedba0af.tar.bz2 vhc-fc731cad0868c7f0d7d794b188c5ccf7cedba0af.zip |
*Change `CompositeElement' en classe abstraite.
*Commentaires divers.
*Creation du repertoire src/gui pour tout code concernant l'interface graphique.
-rw-r--r-- | reponses.lyx | 17 | ||||
-rw-r--r-- | src/gui/Main.cc | 21 | ||||
-rw-r--r-- | src/main/CompositeElement.h | 35 | ||||
-rw-r--r-- | src/main/CurvedElement.cc | 9 | ||||
-rw-r--r-- | src/main/Makefile | 3 |
5 files changed, 63 insertions, 22 deletions
diff --git a/reponses.lyx b/reponses.lyx index dff95eb..9d6c593 100644 --- a/reponses.lyx +++ b/reponses.lyx @@ -656,6 +656,23 @@ Particule . \end_layout +\begin_layout Section* +Question P8.1 +\end_layout + +\begin_layout Standard +La méthode `heurte_bord' (`isOutside' dans notre cas), est une methode virtuelle + pure. +\end_layout + +\begin_layout Section* +Question P8.2 +\end_layout + +\begin_layout Standard +Cela implique que la classe `Element' est abstraite. +\end_layout + \begin_layout Standard \end_layout diff --git a/src/gui/Main.cc b/src/gui/Main.cc new file mode 100644 index 0000000..d07d6fd --- /dev/null +++ b/src/gui/Main.cc @@ -0,0 +1,21 @@ +/* + * Main.cc + * + * Created on: Mar 24, 2011 + * Author: jakob + */ + +#include <QApplication> +#include <QWidget> +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QWidget window; + + window.resize(250, 150); + window.setWindowTitle("Virtual Hadron Collider"); + window.show(); + + return app.exec(); +} diff --git a/src/main/CompositeElement.h b/src/main/CompositeElement.h index b032e62..76ca395 100644 --- a/src/main/CompositeElement.h +++ b/src/main/CompositeElement.h @@ -13,38 +13,30 @@ namespace vhc { +/** Classe abstraite representant un element compose de differents elements. + * Cette classe est immuable publiquement, c'est a dire que les elements constituants de cet element compose + * ne peuvent pas etres reassignes, ajoutes ou supprimes depuis l'exterieur. + * Le but de cette contrainte est de faciliter la gestion de pointeurs, necessaires au polymorphisme. */ class CompositeElement: public Element { + /** Elements composants de cet element compose. */ std::vector < Element* > elements; public: - CompositeElement( - const Vector3D& entry, - const Vector3D& exit, - double sectionRadius, - const std::vector<Element*> & elements0, - Element* next = NULL): - + CompositeElement(const Vector3D& entry, const Vector3D& exit, double sectionRadius, Element* next = NULL): Element(entry, exit, sectionRadius, next), - elements(0) { - - for (int i(0); i < elements0.size(); ++i) { - elements.push_back(elements0[i]->copy()); - }; - } + elements(0) {}; - virtual ~CompositeElement() { - for (int i(0); i < elements.size(); ++i) { - delete elements[i]; - elements[i] = NULL; - }; - } + virtual ~CompositeElement(); - //TODO copy may not be alright (shallow)? - virtual CompositeElement* copy() const {return new CompositeElement(*this);} + /*for (int i(0); i < elements.size(); ++i) { + delete elements[i]; + elements[i] = NULL; + };*/ + /** Determine si une particule a heurte le bord de cet element, donc d'un des elements composants. */ virtual bool isOutside(const Particle& particle) const { for (int i(0); i < elements.size(); ++i) { if (elements[i]->isOutside(particle)) return true; @@ -52,6 +44,7 @@ public: return false; } + /** Determine si une particule a passe cet element, donc passe le dernier element composant. */ virtual bool isPast(const Particle& particle) const { if (elements[elements.size() - 1]->isPast(particle)) return true; else return false; diff --git a/src/main/CurvedElement.cc b/src/main/CurvedElement.cc index 55a84aa..fe8c3e4 100644 --- a/src/main/CurvedElement.cc +++ b/src/main/CurvedElement.cc @@ -5,17 +5,26 @@ * Author: jakob */ +#include <assert.h> #include <math.h> #include "CurvedElement.h" namespace vhc { +using namespace std; + CurvedElement::CurvedElement(const Vector3D& entry, const Vector3D& exit, double sectionRadius, double curvature, Element* next): Element(entry, exit, sectionRadius, next), curvature(curvature), curvatureCenter(Vector3D::Null) { + double k = curvature; + + //pas possible que le rayon de courbure soit plus petit la moitie + //de la distance entre les points d'entree et de sortie + assert(1.0 / k >= (exit - entry).norm() / 2); + Vector3D midpoint = (getEntryPosition() + getExitPosition())/ 2; curvatureCenter = midpoint + sqrt(1.0 - (k * k) / 4 * getDiagonal().normSquare()) * (getDiagonal().unit().cross(Vector3D::k)); } diff --git a/src/main/Makefile b/src/main/Makefile index 7837488..ad550ee 100644 --- a/src/main/Makefile +++ b/src/main/Makefile @@ -13,7 +13,8 @@ LOCALDIR = main # ==> Ajouter ici les objets à compiler # Si un objet nécessite une compilation non-standard (i.e. pas de règle du style Foo.o : Foo.cc Foo.h), rajouter # cette règle. -LOCALOBJS = Vector3D.o Particle.o Printable.o Element.o CurvedElement.o StraightElement.o MagneticElement.o CompositeElement.o +LOCALOBJS = Vector3D.o Particle.o Printable.o Element.o CurvedElement.o StraightElement.o MagneticElement.o \ + CompositeElement.o OBJS=$(addprefix $(BINDIR)/$(LOCALDIR)/,$(LOCALOBJS)) .PHONY = lib |