Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2017-05-03 15:26:36 calcul d'orbite circulaire

AcousticQuantum
membre
Date d'inscription: 2014-11-25
Messages: 33

calcul d'orbite circulaire



Bonjour, voici un petit script dans lequel j'ai créé un simple système, type solaire, avec un attracteur au centre (le soleil). Rien de bien compliqué jusqu'ici, mais là où les choses se compliquent, c'est que j'aimerais trouver le moyen de faire en sorte que l'orbite de ma planète soit circulaire, c-à-d que sa rotation autour de son soleil décrive une courbe parfaitement ronde!

J'ai gratté jusqu'au bout mes neurones afin de trouver la solution... Il est évident que c'est la vélocité de départ de ma planète qui lui permettra cela...

Je pense être proche de la solution, mais dans mon résultat final, la planète finit néanmoins toujours par s'éloigner de + en +... Serait-ce à cause de l'imprécision du calculateur qui, à force d'utiliser les résultats des calculs précédents, provoque une espèce d'effet papillon, ou bien est-ce du à une erreur de ma part?

Avis au matheux! tongue

Voici le sketch:

float distPlanet = 200;
float G = 1000;   // constante gravitationnelle

PVector sun;   // position soleil
PVector pos;   // position planète
PVector vel;   // vélocité planète
PVector acc;   // attraction soleil

float velMag;   // longueur du vecteur vélocité ( = sa force )

void setup(){
 
  size(600, 600);
 
  sun = new PVector(width/2, height/2);
 
  pos = new PVector(width/2, height/2 - distPlanet);
  vel = new PVector(distPlanet * cos(asin (1 - ( map(G/(distPlanet*distPlanet), 0, distPlanet, 0, 1) ) )), 0); // 1. on calcul la vélocité nécessaire pour une orbite circulaire
  acc = new PVector();
 
  velMag = vel.mag();
}

void draw(){
 
  //background(0);
  ellipse(sun.x, sun.y, 40, 40);  // dessin soleil
 
  // 2. on calcul la force d'attraction du soleil sur la planète
  acc = sun.get();
  acc.sub(pos);   // orientation du vecteur d'attraction
  float dsquared = acc.magSq();   // d*d
  float strength = G / dsquared;   // force d'attraction => F = G * (m1 * m2)/(d*d)
  acc.setMag(strength);   // longueur du vecteur d'attraction
 
  vel.add(acc);
  pos.add(vel);
 
  ellipse(pos.x, pos.y, 10, 10);  // dessin planète
 
  // 3. à chaque étape, on corrige l'angle de vélocité => perpendiculaire à la force d'attraction
  vel = sun.get();
  vel.sub(pos);   // orientation du vecteur d'attraction
  vel.rotate(-HALF_PI);   // rotation de 90°
  vel.setMag(velMag);   // longueur du vecteur velocité
 
}

Merci big_smile !

Dernière modification par AcousticQuantum (2017-05-03 18:47:11)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024