Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1893 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Integration de Verlet > besoin d'éclaircissements

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Integration de Verlet > besoin d'éclaircissements

n°1704843
graphix
Posté le 19-03-2008 à 17:12:09  profilanswer
 

Bonjour à tous,  
je suis tombé récemment sur l'article de thomas jakobsen decryptant quelques peut l'utilisation de l'integration de verlet pour un moteur physique.
 
Comme j'aimes bien me lancer dans des trucs qui me dépassent, j'essai d'appliquer cette methode, ça me permet en meme temps de me perfectionner en poo.
 
Bref, tout ça marche pas trop mal (les fichiers du moteurs flade y sont évidemment pour bcp), mais j'arrive à un résultat bizarre.
 
J'essai de representer une chute libre avec rebond "dans le vide" cad à priori un mouvement infini, or la à chaque rebond ou presque, mon systeme semble perdre de l'énergie. Je n'arrive pas à trouver l'origine de cette perte. Depuis quelques jours que je me documente j'ai vu que cette methode n'etait pas forcément réaliste, mais qu'elle avais pour avantage d'etre rapide et fiable. Est ce que cette perte d'énergie proviens de ce manque de réalisme ou est ce que je ne m'y prend pas de la bonne façon?
 
Voici la class dont je me sert pour les tests :  
(désolé pour les puristes, c'est évidemment à 99% le code du moteur flade mais ça me permet de comprendre comment ça marche)
 

Code :
  1. import Physics.Vector;
  2. class Physics.Particule {
  3. public var curr;
  4. public var prev;
  5. private var temp;
  6. var coeff = 1;
  7. var gravity;
  8. var initialForce;
  9. public function Particule (posX:Number, posY:Number) {
  10.  // positions :
  11.  curr = new Vector (posX, posY);
  12.  prev = new Vector (posX, posY);
  13.  temp = new Vector (0, 0);
  14.  gravity = new Vector (0, .81);
  15. }
  16. public function Initialise () {
  17.  var f = gravity.plus (initialForce);
  18.  curr = curr.plus (f);
  19. }
  20. public function verlet () {
  21.  temp.x = curr.x;
  22.  temp.y = curr.y;
  23.  curr.x += coeff*(curr.x-prev.x)+gravity.x;
  24.  curr.y += coeff*(curr.y-prev.y)+gravity.y;
  25.  prev.x = temp.x;
  26.  prev.y = temp.y;
  27. }
  28. private function degToRad (a:Number) {
  29.  var aRad = (a/180)*Math.PI;
  30.  return aRad;
  31. }
  32. private function setInitialForce (a:Number, l:Number) {
  33.  var a = degToRad (a);
  34.  var Vx = l*Math.cos (a);
  35.  var Vy = l*Math.sin (a);
  36.  initialForce = new Vector (Vx, Vy);
  37. }
  38. public function bounce () {
  39.  if (curr.y>500) {
  40.   var normal:Vector=new Vector(0,-1)
  41.   var vitesse:Vector=curr.minus(prev)
  42.   var sDotV:Number = normal.dot(vitesse);
  43.   var velProjection:Vector = vitesse.minus(normal.cross(sDotV));
  44.   var perpMomentum:Vector = velProjection.cross(0);
  45.   var normMomentum:Vector = normal.cross(sDotV * 2);
  46.   var totalMomentum:Vector = normMomentum.plus(perpMomentum);
  47.   var newVel:Vector = vitesse.minus(totalMomentum);
  48.   curr.y = 500;
  49.   prev = curr.minus (newVel);
  50.  }
  51. }
  52. }

mood
Publicité
Posté le 19-03-2008 à 17:12:09  profilanswer
 

n°1704919
antika
Posté le 19-03-2008 à 19:24:07  profilanswer
 

Ton code à l'air ok, c'est probablement les arrondis de Flash qui te font perdre de l'enérgie, sachant que là tu es sur des petites valeurs.

n°1705017
graphix
Posté le 19-03-2008 à 23:34:06  profilanswer
 

En effet c'est bien la gravité qui fait déconner le tout, bizarrement des que je met des virgules dans les vecteurs forces, tout deviens instable.
 
Merci d'avoir pris le temps de jeter un oeil !
 
Pour ceux que ca interesse, j'ai ommis de mettre le lien de l'article dont je suis parti : http://teknikus.dk/tj/gdc2001.htm
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Integration de Verlet > besoin d'éclaircissements

 

Sujets relatifs
Besoin d'un programmeur ^^Besoin d'aide svp
[access/vba/bdd] intégration de valeur par case à cocherUne image, decoupé en 9, puzzle => besoin d'aide :)
besoin d'aide pour associer les touches clavier[SQL] Besoin d'aide pour un Update
Besoin d aide sur des tables accessbesoin d'un composant equivalent à Dialer pour Mobile GSM
Besoin d'aide pour lightbox.Oracle - besoin d'aide pour un outer join
Plus de sujets relatifs à : Integration de Verlet > besoin d'éclaircissements


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR