20 : asrc(asrc_), arcpt(arcpt_), _distance(0.0)
23 _ptR = arcpt.position;
24 _distance = _ptS.distFrom(_ptR);
33 for (
unsigned int i = 0; i < _tabRays.size(); i++)
35 delete _tabRays.at(i);
36 _tabRays.at(i) =
nullptr;
126 return _chemins[0].getAttenuation();
133 int firstReflex = -1;
134 unsigned int indiceDebutEffetEcran = 0;
138 for (i = 0; i < this->
_chemins.size(); i++)
146 sTemp =
_chemins[i].getAttenuation();
147 s =
s.sum(sTemp.
mult(sTemp));
159 attDirect = attDirect.
sum(sTemp.
mult(sTemp));
165 for (i = 0; i <
s.getNbValues(); i++)
169 indiceDebutEffetEcran = i;
175 if (firstReflex != -1)
179 for (i = firstReflex; i <
_chemins.size(); i++)
183 attDirect = attDirect.
sum(sTemp);
187 for (i = 0; i < indiceDebutEffetEcran; i++)
201 unsigned int i = 0, j = 0;
202 int firstReflex = -1;
203 unsigned int indiceDebutEffetEcran = 0;
204 bool ecranFound =
false;
212 std::vector<OSpectreComplex> tabSpectreAtt;
213 std::vector<OSpectreComplex> tabSpectreAttDirect;
214 std::vector<double> tabLongueur;
215 std::vector<double> tabLongueurDirect;
217 for (i = 0; i <
_chemins.size(); i++)
219 tabSpectreAtt.push_back(
_chemins[i].getAttenuation());
220 tabLongueur.push_back(
_chemins[i].getLongueur());
229 for (i = 0; i <
_chemins.size(); i++)
239 sCarreModule = sCarreModule.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
242 for (j = i + 1; j <
_chemins.size(); j++)
250 sTemp = tabSpectreAtt[i].
mult(tabSpectreAtt[j].mult(2.0));
252 correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i], tabLongueur[j]));
253 sProduitCroise = sProduitCroise.
sum(sTemp);
270 tabSpectreAttDirect.push_back(
_cheminsDirect[i].getAttenuation());
277 sCarreModuleDirect = sCarreModuleDirect.
sum(tabSpectreAttDirect[i].mult(tabSpectreAttDirect[i]));
282 sTemp = tabSpectreAttDirect[i].
mult(tabSpectreAttDirect[j].mult(2.0));
283 sTemp = sTemp.
mult(
correctTiers(tabSpectreAttDirect[i], tabSpectreAttDirect[j], atmos,
284 tabLongueurDirect[i], tabLongueurDirect[j]));
285 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
289 OSpectre attDirect = sCarreModuleDirect.
sum(sProduitCroiseDirect);
295 for (j = 0; j <
s.getNbValues(); j++)
299 indiceDebutEffetEcran = j;
305 if (firstReflex != -1)
309 for (i = firstReflex; i <
_chemins.size(); i++)
311 sCarreModule = sCarreModule.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
314 for (j = 0; j <
_chemins.size(); j++)
321 sTemp = tabSpectreAtt[i].
mult(tabSpectreAtt[j].mult(2.0));
322 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i],
324 sProduitCroise = sProduitCroise.
sum(sTemp);
328 s = sCarreModule.
sum(sProduitCroise);
331 for (i = firstReflex; i <
_chemins.size(); i++)
333 sCarreModuleDirect = sCarreModuleDirect.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
338 sTemp = tabSpectreAtt[i].
mult(tabSpectreAttDirect[j].mult(2.0));
339 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAttDirect[j], atmos,
340 tabLongueur[i], tabLongueurDirect[j]));
341 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
344 for (j = i + 1; j <
_chemins.size(); j++)
346 sTemp = tabSpectreAtt[i].
mult(tabSpectreAtt[j].mult(2.0));
347 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i],
349 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
353 attDirect = sCarreModuleDirect.
sum(sProduitCroiseDirect);
357 for (i = 0; i < indiceDebutEffetEcran; i++)
372 const double dp6 = pow(2, (1.0 / 6.0));
373 const double invdp6 = 1.0 / dp6;
374 const double dfSur2f = (dp6 - invdp6) / 2.0;
389 double df = sqrt(1 + dfSur2f * dfSur2f);
390 cosTemp = sTemp.
mult(df);
391 cosTemp = cosTemp.
sum(
s);
392 cosTemp = cosTemp.
subst(sTemp);
393 cosTemp = cosTemp.
cos();
395 sTemp = sTemp.
mult(dfSur2f);
409 for (
size_t i = 0; i <
_chemins.size(); i++)
Class for the definition of atmospheric conditions.
const OSpectre & get_k() const
Get the wave number spectrum.
OSpectreAbstract & sum(const OSpectreAbstract &spectre) const
Arithmetic sum of two spectrums in one-third Octave.
OSpectreAbstract & subst(const OSpectreAbstract &spectre) const
Arithmetic subtraction of two spectrums in one-third Octave.
OSpectreAbstract & sin() const
Compute the sin of this spectrum.
OSpectreAbstract & cos() const
Compute the cos of this spectrum.
OSpectreAbstract & mult(const OSpectreAbstract &spectre) const
Multiplication of two spectrums.
OSpectre getPhase() const
static OSpectre getEmptyLinSpectre(const double &valInit=1.0E-20)
Create a physical quantity spectrum.
double * getTabValReel() override
Representation of one of the most optimal path between source and receptor: S—>R. The class TYChemin ...
This class TYTrajet (journey) links a couple Source-Receptor and a collection of paths,...
tympan::AcousticReceptor & arcpt
Business receptor.
OPoint3D _ptS
Source point definition in the site frame.
OSpectreOctave getPEnergetique(const AtmosphericConditions &atmos)
Compute the acoustic pressure in octave bands on the journey.
OPoint3D _ptR
Receptor point definition in the site frame.
TYTabChemin _chemins
Paths collection.
void addCheminDirect(const TYChemin &chemin)
Add a new path to the array of direct paths.
TYTrajet & operator=(const TYTrajet &other)
Operator =.
OSpectreOctave getPNoOp()
Return the attenuation without computation (computed by an external function)
void addChemin(const TYChemin &chemin)
Add a new path.
OSpectre correctTiers(const OSpectreComplex &si, const OSpectreComplex &sj, const AtmosphericConditions &atmos, const double &ri, const double &rj) const
std::vector< acoustic_path * > _tabRays
Vector of rays equivalent to chemin.
bool operator!=(const TYTrajet &other) const
Operator !=.
tympan::source_idx asrc_idx
TYTabChemin _cheminsDirect
Direct paths collection (without obstacles)
virtual ~TYTrajet()
Destructor.
tympan::receptor_idx arcpt_idx
void reset()
Reset method.
tympan::AcousticSource & asrc
Business source.
std::vector< acoustic_path * > & get_tab_rays()
double _distance
Distance between source and receptor.
bool operator==(const TYTrajet &other) const
Operator ==.
TYTrajet(tympan::AcousticSource &asrc_, tympan::AcousticReceptor &arcpt_)
Constructor.
OSpectre getPInterference(const AtmosphericConditions &atmos)
Compute the quadratic pressure on the journey.
Describes an acoustic receptor.
Describes an acoustic source.
static LPSolverConfiguration get()
Get the configuration.
This file provides class for solver configuration.