summaryrefslogblamecommitdiff
path: root/src/main/CurvedElement.h
blob: f0aeae6605e6ae4d1e04633f5bd73ffb11f46503 (plain) (tree)
1
2
3
4
5
6
7
8
9
  
                  




                            

                        

                 
                    
                     
                     
                           
 
 

               



                                                                                                                        
                                     


          
                        
                         
 


                                                                

       





                                                                      
                                                                                                                                 
 
 
                                 
                                                                                 
 
                                            
                                                            
 
                                            
                                                            
 
                                    
                                    
 
                                              
                                            
 
                                                                                                           

                                
                                                                  
                                            

                                                                                 
                                             
 



  
                             
/*
 * 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 {

/** Represente un element courbe. En plus de posseder les proprietes generales d'un element,
 *  un element courbe a de plus une courbure et un centre de courbure.
 *  ==> TODO ajouter explication de la courbure
 *  Le centre de courbure est calcule avec la courbure et les positions des faces d'entree et de sortie d'un element. */
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_ */