Package physique

Class MoteurPhysique

java.lang.Object
physique.MoteurPhysique

public class MoteurPhysique extends Object
Cette classe regroupe les calculs physiques nécessaires au mouvement des divers objets dans la scène. Utilise entre autres la méthode d'intégration numérique d'Euler semi-implicite.

Les méthodes de collision sont déléguées à CollisionPhysique. Les méthodes de force sont déléguées à ForcePhysique.

  • Constructor Details

    • MoteurPhysique

      public MoteurPhysique()
  • Method Details

    • calculAcceleration

      public static Vecteur2D calculAcceleration(Vecteur2D sommeDesForces, double masse) throws Exception
      Calcule et retourne l'accélération en utilisant F = ma
      Parameters:
      sommeDesForces - Somme des forces appliquées
      masse - Masse de l'objet
      Returns:
      L'accélération F/m
      Throws:
      Exception - Erreur si la masse est pratiquement nulle
    • calculPosition

      public static Vecteur2D calculPosition(double deltaT, Vecteur2D position, Vecteur2D vitesse)
      Calcule et retourne la nouvelle position d'un objet selon la méthode d'Euler semi-implicite
      Parameters:
      deltaT - Pas de la simulation (en secondes)
      position - La position de l'objet
      vitesse - La vitesse de l'objet (après l'application de Euler semi-implicite et après la détection de collision)
      Returns:
      La nouvelle position
    • calculVitesse

      public static Vecteur2D calculVitesse(double deltaT, Vecteur2D sommeDesForces, double masse, Vecteur2D vitesse) throws Exception
      Calcule et retourne la nouvelle vitesse d'un objet en utilisant F = ma et la méthode d'Euler semi-implicite
      Parameters:
      deltaT - Pas de la simulation (en secondes)
      sommeDesForces - Somme des forces appliquées
      masse - Masse de l'objet
      vitesse - La vitesse de l'objet
      Returns:
      La nouvelle vitesse
      Throws:
      Exception - Erreur si la masse est pratiquement nulle
    • calculVitesse

      public static Vecteur2D calculVitesse(double deltaT, Vecteur2D vitesse, Vecteur2D accel)
      Calcule et retourne la nouvelle vitesse d'un objet en appliquant la méthode d'Euler semi-implicite à partir de l'accélération déjà calculée
      Parameters:
      deltaT - Pas de la simulation (en secondes)
      vitesse - La vitesse actuelle de l'objet
      accel - L'accélération de l'objet
      Returns:
      La nouvelle vitesse
    • appliqueForceVersBas

      public static Vecteur2D appliqueForceVersBas(double masse)
      Applique une force constante, vers le bas, sur un vaisseau
      Parameters:
      masse - La masse du vaisseau
      Returns:
      La force appliquée sur le vaisseau
    • appliqueForceVersDroite

      public static Vecteur2D appliqueForceVersDroite(double masse)
      Applique une force constante, vers la droite, sur un vaisseau
      Parameters:
      masse - La masse du vaisseau
      Returns:
      La force appliquée sur le vaisseau
    • appliqueForceVersGauche

      public static Vecteur2D appliqueForceVersGauche(double masse)
      Applique une force constante, vers la gauche, sur un vaisseau
      Parameters:
      masse - La masse du vaisseau
      Returns:
      La force appliquée sur le vaisseau
    • appliqueForceVersHaut

      public static Vecteur2D appliqueForceVersHaut(double masse)
      Applique une force constante, vers le haut, sur un vaisseau
      Parameters:
      masse - La masse du vaisseau
      Returns:
      La force appliquée sur le vaisseau
    • calculForceElectriqueGenereeParPlaque

      public static Vecteur2D calculForceElectriqueGenereeParPlaque(Vaisseau vaisseau, PlaqueChargee plaque)
      Calcule le force électrique d'une plaque sur un vaisseau
      Parameters:
      vaisseau - Objet représentant un vaisseau
      plaque - Objet représentant une plaque chargée
      Returns:
      La force électrique générée par la plaque
    • calculForceFrottement

      public static Vecteur2D calculForceFrottement(Vaisseau vaisseau, Vecteur2D sommeForcesSurVaisseau)
      Calcule et retourne un vecteur exprimant la force de frottement
      Parameters:
      vaisseau - Objet représentant un vaisseau
      sommeForcesSurVaisseau - Somme des forces parallèles
      Returns:
      La force de frottement
    • calculForceGravEnX

      public static Vecteur2D calculForceGravEnX(Vecteur2D forceGrav, double angleDeg)
      Calcule la composante en X de la force gravitationnelle
      Parameters:
      forceGrav - Vecteur de la force gravitationnelle
      angleDeg - Angle de la surface avec l'horizontale
      Returns:
      La force gravitationnelle selon l'axe x
    • calculForceGravEnY

      public static Vecteur2D calculForceGravEnY(double masse)
      Calcule la force gravitationnelle
      Parameters:
      masse - Masse de l'objet
      Returns:
      La force gravitationnelle
    • calculForceNormale

      public static Vecteur2D calculForceNormale(Vaisseau vaisseau, Segment segment)
      Calcule la force normale s'appliquant sur le vaisseau
      Parameters:
      vaisseau - Objet représentant un vaisseau
      segment - Objet représentant un segment
      Returns:
      La force normale
    • detectionCollisionAvecCoinEtCalculeVitesse

      public static Vecteur2D detectionCollisionAvecCoinEtCalculeVitesse(Vaisseau vaisseau, Point2D.Double coin)
      Détecte une collision entre le vaisseau et un coin
      Parameters:
      vaisseau - Objet représentant le vaisseau
      coin - Le coin d'un bloc
      Returns:
      La nouvelle vitesse du vaisseau
    • detectionCollisionsAvecPlaqueEtCalculeVitesse

      public static Vecteur2D detectionCollisionsAvecPlaqueEtCalculeVitesse(Vaisseau vaisseau, PlaqueChargee plaque)
      Détecte une collision entre le vaisseau et une plaque
      Parameters:
      vaisseau - Objet représentant le vaisseau
      plaque - Objet représentant une plaque chargée
      Returns:
      La nouvelle vitesse du vaisseau
    • detectionCollisionsAvecSegmentEtCalculeVitesse

      public static Vecteur2D detectionCollisionsAvecSegmentEtCalculeVitesse(Vaisseau vaisseau, Segment segment)
      Détecte une collision entre le vaisseau et un segment
      Parameters:
      vaisseau - Objet représentant le vaisseau
      segment - Objet représentant un segment
      Returns:
      La nouvelle vitesse du vaisseau
    • detectionCollisionsBorduresEtCalculVitesse

      public static Vecteur2D detectionCollisionsBorduresEtCalculVitesse(Vaisseau vaisseau, double largeurComposant, double hauteurComposant)
      Détecte une collision avec les bordures de la zone d'animation
      Parameters:
      vaisseau - L'objet représentant un vaisseau
      largeurComposant - La largeur de la zone d'animation
      hauteurComposant - La hauteur de la zone d'animation
      Returns:
      La nouvelle vitesse du vaisseau
    • detecteCollisionsAvecObjetsSpeciaux

      public static boolean detecteCollisionsAvecObjetsSpeciaux(Vaisseau vaisseau, Tuile objetSpecial)
      Vérifie si le vaisseau entre en collision avec un objet spécial
      Parameters:
      vaisseau - Un objet représentant le vaisseau
      objetSpecial - Une tuile représentant un objet spécial
      Returns:
      vrai si le vaisseau est en collision
    • getAccelGrav

      public static double getAccelGrav()
      Retourne l'accélération gravitationnelle
      Returns:
      L'accélération gravitationnelle
    • getAccelGravInitiale

      public static double getAccelGravInitiale()
      Retourne l'accélération gravitationnelle initiale
      Returns:
      L'accélération gravitationnelle initiale
    • getCoeffFrotCine

      public static double getCoeffFrotCine()
      Retourne le coefficient de frottement cinétique
      Returns:
      Le coefficient de frottement cinétique
    • getCoeffFrotCineInitial

      public static double getCoeffFrotCineInitial()
      Retourne le coefficient de frottement cinétique initial
      Returns:
      Le coefficient de frottement cinétique initial
    • getCoeffFrotStat

      public static double getCoeffFrotStat()
      Retourne le coefficient de frottement statique
      Returns:
      Le coefficient de frottement statique
    • getCoeffFrotStatInitial

      public static double getCoeffFrotStatInitial()
      Retourne le coefficient de frottement statique initial
      Returns:
      Le coefficient de frottement statique initial
    • reinitialiser

      public static void reinitialiser()
      Réinitialise les coefficients de frottement et l'accélération gravitationnelle
    • setAccelGrav

      public static void setAccelGrav(double accelGrav)
      Modifie l'accélération gravitationnelle
      Parameters:
      accelGrav - La nouvelle accélération gravitationnelle
    • setCoeffFrotCine

      public static void setCoeffFrotCine(double coeffFrotCine)
      Modifie le coefficient de frottement cinétique
      Parameters:
      coeffFrotCine - Le nouveau coefficient de frottement cinétique
    • setCoeffFrotStat

      public static void setCoeffFrotStat(double coeffFrotStat)
      Modifie le coefficient de frottement statique
      Parameters:
      coeffFrotStat - Le nouveau coefficient de frottement statique