Problème de parachute

Fermé
----- - Modifié le 7 déc. 2019 à 18:05
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 8 déc. 2019 à 16:08
Bonjour,
je cherche un/une volontiers qui pourrait me dire que est ce qui fait que mon programme n'a pas la même sorti que comme par exempla 40 masse et 250 comme hauteur, 80,39000 aussi ?
je vous suis reconnaissant en avance d'avoir jeter un œil!




import java.util.Scanner;

class Teste {
 public static void main(String args []) {
   
   
   
          Scanner clavier = new Scanner(System.in);
   
          double masse = 80.0;
          do {
              System.out.print("masse du parachutiste (>= 40) ? ");
              masse = clavier.nextDouble();
          } while (masse < 40.0);
   
          double h0 = 39000.0;
          do {
              System.out.print("hauteur de depart du parachutiste (>= 250) ? ");
              h0 = clavier.nextDouble();
          } while (h0 < 250.0);
   
          /*******************************************


* Completez le programme a partir d'ici.

***************************************************************/
          final double g=9.81;
          double v0=0;
          double t0=0;
          double t=t0;
          double hauteur=h0;
          double vitesse=v0;
          double accel=g;
          double surface=2.0;
          double s=surface/masse;
          double q;
          boolean max = false;
          boolean depass = false;
          boolean ouv = false;
          
           
          while(hauteur>0)
          {
            s = surface / masse;
               q = Math.exp(-s * (t - t0));
               vitesse = (g / s) * (1 - q) + v0 * q;
               hauteur = h0 - (g / s) * (t - t0) - ((v0 - (g / s)) / s) * (1 - q);
               accel = g - s * vitesse;
               
              if (vitesse > 343 && depass == false) {
                  System.out.println("## Felix depasse la vitesse du son");
                  depass = true;
              }
              if (accel < 0.5 && max == false) {
                  System.out.println("## Felix a atteint sa vitesse maximale");
                  max = true;
              }
              if (hauteur < 2500 && ouv == false && t != 0) {
                  System.out.println("## Felix ouvre son parachute");
                  ouv = true;
              }
              System.out.format("%.0f, %.4f, %.4f, %.5f\n", t, hauteur, vitesse, accel);
              t++;
              }
          
          // je pense que d'après ici y un baug  
          surface = surface / masse;
          h0 = hauteur;
          v0 = vitesse;
          t0 = t - 1;
   
          
          /*******************************************


* Ne rien modifier apres cette ligne.

****************************************************************/
          clavier.close();
      }
  
  
 }

Configuration: Windows / Firefox 70.0

3 réponses

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
8 déc. 2019 à 09:32
Bonjour

Ma technique comm tu dis, s’appelle vérifier l’homogénéité d’une formule.
C’est un contrôle élémentaire en physique.
Je t’ai démontré que ta variable vitesse n’est pas homogène à une mesure de vitesse, tu dis
je dois dire ton technique m'a beaucoup pousser à me mettre plus dans mon programme et changer complétement mes conditions.
Mais tu n’as pas changé la formule de la vitesse, donc pour moi, avant même de trifouiller l’algorithme il faudrait que tu vérifies la source de ces formules.

J’ai eu une formation dans les métiers de l’aéronautique, même si on apprenait des généralités en aérodynamique, il y a quelques formules que je n’ai pas oubliées et je n’en vois pas les membres ici.

D’abord la chute libre, si on néglige les frottements de l’air, est un mouvement rectiligne uniformément accéléré.
Donc
x = 1/2 * g * t^2 + v0 * t + x0 
// ce qui fait : m / s^2 * s^2 + m / s * s + m
// on a bien une distance à la fin

Et v = g * t + v0
//m / s^2 * s + m / s
// on a bien une vitesse 


La portance (Fz) d’une aile ou d’un parachute c’est
Fz = 1/2 * ro * s * v^2 * Cz
//ro est la masse volumique de l’air, elle varie en fonction de l’altitude //s est la surface
//Cz est le coefficient de portance, il dépend de chaque aile et de la position par rapport au vent relatif


Quand le vol est stabilisé ( parachute ouvert et freinage finit) si on considère qu’il n’y a pas de déplacement horizontal alors la somme des moments des forces vaut 0. Donc le Poids et Fz sont opposés et leur normes sont égales.
Fz = M * g


Et si tu veux tenir compte des frottements de l’air pendant la chute libre, il va sûrement falloir se servir de la portance de Félix.

Dans tes formules, je ne voies nulle part de ro ni de Cz.
C’est ce qui m’a interpellé au début et c’est pourquoi j’ai vérifié l’homogénéité
1
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
8 déc. 2019 à 16:08
Ici
https://fr.wikipedia.org/wiki/Physique_du_parachutisme

et là
https://fr.wikipedia.org/wiki/Chute_avec_r%C3%A9sistance_de_l%27air

Ça va bien au delà de ce que je pourrais t'expliquer, mais en tous cas, les formules utilisées ne sont pas celles que tu as écrites
1
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
30 nov. 2019 à 23:27
Bonsoir

A ta place, je commencerai par vérifier les formules que tu as utilisées et comment tu les as retranscrites.

g vaut 9.81 c'est donc de m/s2
masse vaut au moins 40, et 80 par défaut, on va donc supposer que c'est des kg
de là, ilm n'y a qu'un pas pour faire le pari que tu travailles en SI.
Donc V0 est en m/s

Et aussi, vitesse devrait être en m/s.
Or
s = surface / masse;
q = Math.exp(-s * (t - t0));
vitesse = (g / s) * (1 - q) + v0 * q;


s = surface / masse;// s est donc en m2/kg

q = Math.exp(-s * (t - t0));//q est en m2/kg à la puissance seconde, on va noter (m2/kg)^s

vitesse = (g / s) * (1 - q) + v0 * q;
//m/s2 / (m2/kg) * (m2/kg)^s + m/s * (m2/kg)^s
// (m2/kg)^s * { (m/s2 * kg/m2) + m/s}
//(m2/kg)^s * { kg /( m * s2) + m / s }
//(m2/kg)^s * { kg /(m * s2) + (m2 * s) / (m * s2) }
//(m2/kg)^s * { [kg + (m2 * s)]/(m * s2)  }


Alors j'ai pt'et fait une erreur quelque part mais il me semble assez improbable que vitesse soit homogène à des m/s




0
Hello,
je m'excuse pour la réponse tardive et t'en remercie! alors je dois dire ton technique m'a beaucoup pousser à me mettre plus dans mon programme et changer complétement mes conditions. je crois bien aussi tout fection merveilleusement sauf qu'il calcule mal ce qui fait toujours manquer un ligne au sorte de mon programme: merci de jeter un œil de nouveau!

   while (hauteur>0){

       s = surface/ masse;
          q = Math.exp(-s * (t - t0));
       vitesse = (g / s) * (1 - q) + v0 * q;
          hauteur = h0 - (g / s) * (t - t0) - ((v0 - (g / s)) / s) * (1 - q);
          accel = g - s * vitesse;
          
         
          
          
          if (hauteur < 2500&& ouv == false) {
              System.out.println("## Felix ouvre son parachute");
              ouv = true;
                               // je pense mon baug aurait lieu appartir d'ici
              surface=25.0;
              s=surface/masse; 
              h0=hauteur;
              v0=vitesse;
              t0=t-1;
              
              }       /// jousqu'à ici
          
           
          
          if (hauteur>0) {
              System.out.printf("%.0f, %.4f, %.4f, %.5f\n",t, hauteur, vitesse, accel);
              ++t;
              } 
         
          if (vitesse>341 &&false==vit) {
             System.out.println("## Felix depasse la vitesse du son");
              vit= true;
             }
              if (accel < 0.5 && max == false) {
                  System.out.println("## Felix a atteint sa vitesse maximale");
                  max = true;
              }
    
       
        
      }
0