//////////////////////////////////////////////////////////////////////// /// /// @fn VisiteurCollision::mettreDansPortail(NoeudPortail& noeud) /// /// Fonction qui place la rondelle sur un portail /// TODO: sortir avec une direction aleatoire /// /// @param[in] noeud : le portail ou l'on veut placer la rondelle /// /// @return Aucune. /// //////////////////////////////////////////////////////////////////////// void VisiteurCollision::mettreDansPortail(NoeudPortail& noeud) { /// Trouver la vitesse de la rondelle Vecteur3 vitesseVect = rondelle_->obtenirVitesse(); double vitesse = vitesseVect.norme(); /// Donner une direction aleatoire a notre rondelle lors de la sortie de celle-ci for( int i = 0; i < 2; i++) vitesseVect[i] = rand()/((double)RAND_MAX); /// Donner la nouvelle vitesse vitesseVect.normaliser(); rondelle_->modifierVitesse(vitesseVect*vitesse); /// Donner la nouvelle position rondelle_->assignerPositionRelative(noeud.obtenirPositionRelative()); /// Desactiver l'attraction du portail en question noeud.desactiverAttraction(); }
//////////////////////////////////////////////////////////////////////// /// /// @fn double Droite3D::distancePoint( const Vecteur3& centre ) /// /// Calcule la distance euclidienne entre la droite et un point. /// /// @param[in] centre : Point à partir duquel la distance doit être calculée. /// /// @return Distance du point à la droite. /// //////////////////////////////////////////////////////////////////////// double Droite3D::distancePoint( const Vecteur3& centre ) { // En 2D const double ad = direction_[1]; const double bd = -1.0 * direction_[0]; const double cd = -1.0 * direction_[1] * pointDroite_[0] + direction_[0] * pointDroite_[1]; double num = fabs( ad * centre[0] + bd * centre[1] + cd ); double den = sqrt( pow ( ad, 2 ) + pow ( bd, 2 ) ); // En 3D const Vecteur3 centreNul(centre[0], centre[1], 0.0); const Vecteur3 vect( pointDroite_, centreNul ); const Vecteur3 mult = produitVectoriel( vect, direction_ ); num = mult.norme(); den = direction_.norme(); return ( num / den ); }