////////////////////////////////////////////////////////////////////////
///
/// @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();
}
Exemple #2
0
   ////////////////////////////////////////////////////////////////////////
   ///
   /// @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 );
   }