/** * @param $spot: spot dont il est question -> pour récuperer les restrictions * @param $tabHoure : array $tabHoure[$nbHoure] for the day * @param $mareeDate : prévision de marre que l'on va analyser * Remplis le $tabHoure avec le temps de navigation possible pour chaque heure=elem du tab */ static function calculNbHoureNav($spot, &$tabHoure, $mareeDate) { $timeRestriction = 0; $timeTab = array(); $listePrevisionMaree = $mareeDate->getListPrevision(); // liste des marées extreme de la journée $mareeRestrictionTab = array(); foreach ($spot->getMareeRestriction() as $mareeRestriction) { $restriction = array(); $restriction['hMin'] = $mareeRestriction->getHauteurMin(); $restriction['hMax'] = $mareeRestriction->getHauteurMax(); $restriction['state'] = $mareeRestriction->getState(); $mareeRestrictionTab[] = $restriction; } $tabDataSinu = self::generateSinousoidal($listePrevisionMaree); $date = $listePrevisionMaree->first()->getMareeDate()->getDatePrev(); // On avance d'heure en heure en comparant y aux restrictions // lorsque intersection avec une restriction -> arrondi (la courbe ne correspond pas tout a fait à la réalité) for ($houre = CreateNbHoureCommand::HEURE_MATIN; $houre <= CreateNbHoureCommand::HEURE_SOIR; $houre++) { // y = a sin(wt + Phi) + b // *** Calcul de la formule de la courbe: y = a sin(wt + Phi) + b *** // t=time en seconde, y=hauteur en metre, w: phase 2 pi / T , T: fréquence $hight = MareeTools::getHight($tabDataSinu, $date, $houre + 0.5); $tabHoure[$houre]['marée'] = MareeTools::getNbHoureNav($hight, $mareeRestrictionTab); } }