summaryrefslogtreecommitdiff
path: root/src/main/CurvedElement.h
blob: f7cc902d26b3b7d56a1b05077cd21672a4192197 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 * CurvedElement.h
 *
 *  Created on: Mar 22, 2011
 *      Author: jakob
 */

#ifndef CURVEDELEMENT_H_
#define CURVEDELEMENT_H_

#include <math.h>
#include "Element.h"
#include "Particle.h"
#include "Vector3D.h"
#include "ElementVisitor.h"


namespace vhc {

/** Classe de base pour elements courbes. En plus de posseder les proprietes generales d'un element,
 *  un element courbe une courbure et un centre de courbure.
 *  La courbure est donnee par l'inverse du rayon de courbure dont le signe indique le sens de courbure par
 *  rapport à l’orientation donnée par l’opposé de l’axe vertical (Vector3D::k);
 *
 *  Le centre de courbure est calcule avec la courbure et les positions des faces d'entree et de sortie d'un element.
 *
 *  <b>ATTENTION:</b> un element courbe ne peut faire plus d'un demi tour! */
class CurvedElement: public Element {

protected:

	/** Courbure. */
	double curvature;

	/** Centre de courbure de cet element. (coord. abs. ) */
	Vector3D curvatureCenter;

public:

	/** Constructeur d'elements courbes.
	 *  @param entry position de la face d'entree
	 *  @param exit position de face de sortie
	 *  @param sectionRadius rayon de section de la chambre a vide
	 *  @param curvature courbure de cet element
	 *  @param next pointeur sur l'element suivant */
	CurvedElement(const Vector3D& entry, const Vector3D& exit, double sectionRadius, double curvature, Element* next = NULL);


	virtual ~CurvedElement();
	//virtual CurvedElement* clone() const {return new CurvedElement(*this);}

	//TODO !!! erreurs dans l'algorithme
	virtual bool hasHit(const Particle& particle) const;

	//TODO !!! erreurs dans l'algorithme
	virtual bool isPast(const Particle& particle) const;

	/** Retourne la courbure. */
	double getCurvature() const;

	/** Retourne le centre de courbure. */
	Vector3D getCurvatureCenter() const;

	/** Retourne l'angle entre la position d'entree, le centre de courbure et la position de sortie. */
	double getAngle() const;

	/** Retourne le type ("Cuved Element") de cet élément.*/
	virtual std::string getType() const;

	/** Retourne cet élément courbe sous forme de chaîne de caractères.*/
	virtual std::string toString() const;

};

}

#endif /* CURVEDELEMENT_H_ */