L’application de la gravité
Appliquer les lois de la logique a été une des premières innovations lié à l’informatique. Des langages comme le prolog ont ainsi été inventé afin de maitriser la logique des assertions comme :
Aristote est un homme.
Tous les hommes sont mortels.
Résultat fourni par l’ordinateur : Aristote est mortel.
La physique n’est pas en reste et les gamers jouent depuis nombre d’années dans des environnements virtuels 3D dans lesquels la pesanteurs et la gestions des collisions est au rendez vous.
Une application en flash
Etant donné la facilité d’implémentation des intéraction utilisateurs, ainsi que la génération graphique, j’ai intégré cette lois simple x(t)=1/2*gt² dans un environnement flash :
Le code est simple et ne réprésente qu’une centaine de lignes.
Quelques explications
Le déplacement est gérer par des vecteurs vitesse vx et vy. La fonction de base utilisé pour le déplacement est :
function calcPosition() { position_x = -v0_x*t*Math.sin(angle)+pos0_x; position_y = -1/2*g*t*t-v0_y*t*Math.sin(angle)+pos0_y; }
La vitesse est réorienté à chaque collision suivant la fonction suivante :
function rebond() { t = 0; var pos0:Array; pos0_x = this._x; pos0_y = this._y; var v0x = (positionAnt_x-position_x)/tick; var v0y = (positionAnt_y-position_y)/tick; v0_x = Math.abs(v0x); v0_y = Math.abs(v0y); calculateAngle(v0x*inv_x, v0y*inv_y); collision = 'sans'; }
Qui en fait se résume à une mise à jour de la valeur d’angle et des vecteurs v0x et v0y.
Le déplacement est mise à jour a chaque image suivant les principes énooncés précédemment (mouvement paramétré et détection de collision). Comme l’exemple le montre le mouvement est fluide et correspond assez bien à une balle rebondissante.
Pour aller plus loin
Un exemple plus abouti a été réalisé par generalrelativity.org.
Une étude complète sur la détection de collision : Détection de collision sur flashxpress