summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2011-03-24 19:29:58 +0000
committerJakob Odersky <jodersky@gmail.com>2011-03-24 19:29:58 +0000
commitfc731cad0868c7f0d7d794b188c5ccf7cedba0af (patch)
tree4f9bc578eb12e9d38b48ad7bbbc60127d4c2e873
parent160e04489b3dcf5dd3bc1b64c4ca03dc5da96c49 (diff)
downloadvhc-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.lyx17
-rw-r--r--src/gui/Main.cc21
-rw-r--r--src/main/CompositeElement.h35
-rw-r--r--src/main/CurvedElement.cc9
-rw-r--r--src/main/Makefile3
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