summaryrefslogblamecommitdiff
path: root/src/main/Particle.h
blob: 12287409bb26390aa839c1c4f76c777b0df5040e (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                           
                  
                 
                     
                      
                      
                      


               

                                    
                                      
                                   
                                                    

        
 
                                               
                                 
 
                                                
                                 
 
                                                         
                              
 
                                             
                    
 
                                             
                      
 
                                                    
                     
 
                         
 
       
 
 



                                                          
                                                                       
 





                                                                                                                     
                                                                                                                 
 
                                                           
                                     
 
                                                          
                                              
 


                                           
                                                                     
                                  
 
                                                                    
                                         
 
                                                          
                                           
 
                                                                                         
                                                                                     
                                                              
 
                                                         
                               
 


                                
                                                         
                                 
 


                                 
                                                           
                                     
 
                                                        
                                            
 
                                                         
                                 
 
                                                                
                                
 
                                                                          


                                             
 
                                                                           
                                    

                                                                          
                                          
 




                        
/*
 * Particle.h
 *
 *  Created on: Mar 9, 2011
 *      Author: jakob
 */

#ifndef PARTICLE_H_
#define PARTICLE_H_

#include <sstream>
#include <math.h>
#include "Vector3D.h"
#include "Printable.h"
#include "Cloneable.h"
#include "constants.h"

namespace vhc {

class Element; //forward declaration

/** Classe représentant une particule
 *  TODO ajouter constructeur qdm*/
class Particle: public Printable, public Cloneable {

private:

	/** Position de cette particule. [m] */
	MutableVector3D position;

	/** Vitesse de cette particule. [m/s] */
	MutableVector3D velocity;

	/** Force résultante sur cette particule. [N] */
	MutableVector3D force;

	/** Masse de cette particule. [kg] */
	double mass;

	/** Charge de cette particule. [C] */
	double charge;

	/** Facteur gamma de cette particule. [1] */
	double gamma;

	Element* element;

public:


	/** Cree une nouvelle particule, de vitesse nulle.
	 *  @param position position
	 *  @param mass masse <b>[kg]</b>
	 *  @param charge charge [C] */
	Particle(const Vector3D& position, double mass, double charge);

	/** Cree une nouvelle particule avec les parametres donnees.
	 *  @param position position
	 *  @param mass masse <b>[kg]</b>
	 *  @param charge charge [C]
	 *  @param energy energie <b>[J]</b>
	 *  @param direction direction de mouvement de la particule (la longueur du vecteur n'a aucune importance) */
	Particle(const Vector3D& position, double mass, double charge, double energy, const Vector3D& direction);

	/** Retourne la position de cette particule. [m] */
	Vector3D getPosition() const;

	/** Affecte la position de cette particule. [m] */
	void setPosition(const Vector3D& pos);

	/** Translate cette particule. */
	void translate(const Vector3D& dx);

	/** Retourne la force résultante sur cette particule. [N] */
	Vector3D getForce() const;

	/** Affecte la force résultante sur cette particule. [N] */
	void setForce(const Vector3D& f);

	/** Applique une force sur cette particule. [N] */
	void applyForce(const Vector3D& f);

	/** Applique un champ magnetique sur cette particule durant un lapse de temps dt.
	 *  Cette application change la force resultante de la particule. [T], [s] */
	void applyMagneticForce(const Vector3D& b, double dt);

	/** Retourne la masse de cette particule. [kg] */
	double getMass() const;

	/** Affecte la masse. */
	void setMass(double m);

	/** Retourne la charge de cette particule. [C] */
	double getCharge() const;

	/** Affecte la charge */
	void setCharge(double q);

	/** Retourne la vitesse de cette particule. [m/s]*/
	Vector3D getVelocity() const;

	/** Affecte vitesse de cette particule. [m/s] */
	void setVelocity(const Vector3D& v);

	/** Retourne l'energie de cette particlue. [J] */
	double getEnergy() const;

	/** Retourne le facteur gamma de cette particule. [1] */
	double getGamma() const;

	/** Retourne une représentation en chaîne de cette particule. */
	virtual std::string toString() const;

	virtual Particle* clone() const;

	/** Retourne l'element dans lequel cette particule est contenue. */
	Element* getElement() const;

	/** Affecte l'element dans lequel cette particule est contenue. */
	void setElement(Element* element);

};

}

#endif /* PARTICLE_H_ */