36 for(
unsigned int i =0 ; i<
_tabRays.size();i++){
78 if (
_ptS != other.
_ptS) {
return false; }
79 if (
_ptR != other.
_ptR) {
return false; }
81 if (
_sLP != other.
_sLP) {
return false; };
108 return _chemins[0].getAttenuation();
115 int firstReflex = -1;
116 unsigned int indiceDebutEffetEcran = 0;
120 for (i = 0 ; i < this->
_chemins.size() ; i++)
128 sTemp =
_chemins[i].getAttenuation();
141 attDirect = attDirect.
sum(sTemp.
mult(sTemp));
151 indiceDebutEffetEcran = i;
156 if (firstReflex != -1)
160 for (i = firstReflex ; i <
_chemins.size() ; i++)
164 attDirect = attDirect.
sum(sTemp);
168 for (i = 0; i < indiceDebutEffetEcran; i++)
184 int firstReflex = -1;
185 unsigned int indiceDebutEffetEcran = 0;
186 bool ecranFound =
false;
191 std::vector<OSpectreComplex> tabSpectreAtt;
192 std::vector<OSpectreComplex> tabSpectreAttDirect;
193 std::vector<double> tabLongueur;
194 std::vector<double> tabLongueurDirect;
196 for (i = 0 ; i <
_chemins.size(); i++)
198 tabSpectreAtt.push_back(
_chemins[i].getAttenuation());
199 tabLongueur.push_back(
_chemins[i].getLongueur());
208 for (i = 0 ; i <
_chemins.size(); i++)
218 sCarreModule = sCarreModule.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
221 for (j = i + 1; j <
_chemins.size(); j++)
226 sTemp = tabSpectreAtt[i].mult(tabSpectreAtt[j].mult(2.0));
227 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i], tabLongueur[j]));
228 sProduitCroise = sProduitCroise.
sum(sTemp);
245 tabSpectreAttDirect.push_back(
_cheminsDirect[i].getAttenuation());
252 sCarreModuleDirect = sCarreModuleDirect.
sum(tabSpectreAttDirect[i].mult(tabSpectreAttDirect[i]));
257 sTemp = tabSpectreAttDirect[i].mult(tabSpectreAttDirect[j].mult(2.0));
258 sTemp = sTemp.
mult(
correctTiers(tabSpectreAttDirect[i], tabSpectreAttDirect[j], atmos, tabLongueurDirect[i], tabLongueurDirect[j]));
259 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
263 OSpectre attDirect = sCarreModuleDirect.
sum(sProduitCroiseDirect);
273 indiceDebutEffetEcran = j;
278 if (firstReflex != -1)
282 for (i = firstReflex; i <
_chemins.size() ; i++)
284 sCarreModule = sCarreModule.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
287 for (j = 0 ; j <
_chemins.size(); j++)
289 if (j == i) {
continue; }
291 sTemp = tabSpectreAtt[i].mult(tabSpectreAtt[j].mult(2.0));
292 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i], tabLongueur[j]));
293 sProduitCroise = sProduitCroise.
sum(sTemp);
298 s = sCarreModule.
sum(sProduitCroise);
301 for (i = firstReflex; i <
_chemins.size() ; i++)
303 sCarreModuleDirect = sCarreModuleDirect.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
308 sTemp = tabSpectreAtt[i].mult(tabSpectreAttDirect[j].mult(2.0));
309 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAttDirect[j], atmos, tabLongueur[i], tabLongueurDirect[j]));
310 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
313 for (j = i + 1; j <
_chemins.size(); j++)
315 sTemp = tabSpectreAtt[i].mult(tabSpectreAtt[j].mult(2.0));
316 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i], tabLongueur[j]));
317 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
322 attDirect = sCarreModuleDirect.
sum(sProduitCroiseDirect);
326 for (i = 0; i < indiceDebutEffetEcran; i++)
340 const double dp6 = pow(2, (1.0 / 6.0));
341 const double invdp6 = 1.0 / dp6;
342 const double dfSur2f = (dp6 - invdp6) / 2.0;
357 double df = sqrt(1 + dfSur2f * dfSur2f);
358 cosTemp = sTemp.
mult(df);
359 cosTemp = cosTemp.
sum(s);
360 cosTemp = cosTemp.
subst(sTemp);
361 cosTemp = cosTemp.
cos();
363 sTemp = sTemp.
mult(dfSur2f);
376 for (
size_t i=0; i<
_chemins.size(); i++)
virtual OSpectre sin() const
Compute the sin of this spectrum.
TYTabChemin _chemins
Paths collection.
Representation of one of the most optimal path between source and receptor: S—>R. The class TYChemin represents a path between a Source and a receptor (Recepteur class). It's constituted of a collection of steps (TYEtape class).
static OSpectre getEmptyLinSpectre(const double &valInit=1.0E-20)
Create a physical quantity spectrum.
virtual OSpectre subst(const OSpectre &spectre) const
Arithmetic subtraction of two spectrums in one-third Octave.
virtual OSpectre sum(const OSpectre &spectre) const
Arithmetic sum of two spectrums in one-third Octave.
Point position
Destructor.
OSpectre getPInterference(const AtmosphericConditions &atmos)
Compute the quadratic pressure on the journey.
const OSpectre & get_k() const
Get the wave number spectrum.
virtual OSpectre cos() const
Compute the cos of this spectrum.
double distFrom(const OPoint3D &pt) const
Computes the distance from this point to another.
tympan::receptor_idx arcpt_idx
This file provides class for solver configuration.
void addChemin(const TYChemin &chemin)
Add a new path.
OSpectre _sLP
Spectrum at the receptor point of the journey which integrates geometrical divergence and the source ...
OPoint3D _ptR
Receptor point definition in the site frame.
TYTrajet & operator=(const TYTrajet &other)
Operator =.
bool operator==(const TYTrajet &other) const
Operator ==.
OSpectre getPEnergetique(const AtmosphericConditions &atmos)
Compute the acoustic pressure (phase modulation) on the journey.
tympan::AcousticReceptor & arcpt
Business receptor.
TYTabChemin _cheminsDirect
Direct paths collection (without obstacles)
virtual OSpectre div(const OSpectre &spectre) const
Division of two spectrums.
TYTrajet(tympan::AcousticSource &asrc_, tympan::AcousticReceptor &arcpt_)
Constructor.
virtual unsigned int getNbValues() const
Number of values in the spectrum.
void reset()
Reset method.
Point position
Destructor.
This class TYTrajet (journey) links a couple Source-Receptor and a collection of paths, in addition to the direct path.
virtual ~TYTrajet()
Destructor.
double _distance
Distance between source and receptor.
void addCheminDirect(const TYChemin &chemin)
Add a new path to the array of direct paths.
OSpectre correctTiers(const OSpectreComplex &si, const OSpectreComplex &sj, const AtmosphericConditions &atmos, const double &ri, const double &rj) const
OSpectre getPNoOp()
Return the attenuation without computation (computed by an external function)
Describes an acoustic receptor.
std::vector< acoustic_path * > _tabRays
Vector of rays equivalent to chemin.
tympan::source_idx asrc_idx
OPoint3D _ptS
Source point definition in the site frame.
virtual double * getTabValReel()
OSpectre getPhase() const
Describes an acoustic source.
virtual OSpectre mult(const OSpectre &spectre) const
Multiplication of two spectrums.
Class for the definition of atmospheric conditions.
Store acoustic power values for different frequencies.
std::vector< acoustic_path * > & get_tab_rays()
static LPSolverConfiguration get()
Get the configuration.
tympan::AcousticSource & asrc
Business source.
bool operator!=(const TYTrajet &other) const
Operator !=.