IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

[Débutant] gestion des rebonds


Sujet :

Mathématiques

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Points : 89
    Points
    89
    Par défaut [Débutant] gestion des rebonds
    Bonjour,

    J'imagine que la question qui va suivre a déjà été abordé mais je n'ai rien trouvé jusqu'à maintenant

    Donc: je me prend la tête depuis un bon moment pour essayer de faire un truc tout bête en flash bien que le problème soit plutôt d'ordre mathématique:

    J'essaye de faire un semblant de casse-brique et ce en utilisant la trigonométrie pour la gestion des rebonds:
    Dans certains cas, j'inverse la valeur de l'angle ou/et celle de la vitesse.
    Seulement lorsque j'arrive sur le coté gauche, suivant d'où vient la balle, soit elle traverse, soit elle part correctement. j'aimerais bien comprendre 'la logique" de la chose, comment savoir la bonne chose à appliquer?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    angle= 220;
    vitesse = 10;
    si l'axe y de ma balle arrive en haut alors on inverse l'angle: angle=-220
    si l'axe x de ma balle arrive à droite alors on inverse l'angle et la vitesse angle=-220 vitesse = -10
    si l'axe x de ma balle arrive à gauche alors j'ai tout essayer et rien ne fonctionne, tout dépend d'où arrive la balle (si la vitesse est/où l'angle sont déjà inversés)
    J'espère que ce message a sa place dans ce forum.
    Merci!

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gia,

    Méthode de résolution classique : fais-toi un petit dessin, trace les différentes trajectoires, et réfléchi.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Pour ce genre de problème il est préférable de gérer les vitesses suivants leurs composantes horizontale et verticale (vx, vy)
    vx correspond au nombre de pixels parcourus horizontalement par unité de temps de gauche à droite
    vy correspond au nombre de pixels parcourus verticalement par unité de temps (de bas en haut par exemple).
    Dans ce cas les problèmes de collision se règlent facilement.
    choc sur un bord horizontal vy --> -vy
    choc sur un bord vertical vx --> -vx
    Le seul point délicat à régler c'est de savoir contre quel bord va avoir lieu le choc, c'est un petit pb de géométrie plane faisant entrer en jeu le centre de la bille, le centre de la brique et quelques autres paramètres (largeur et longueur de la brique et rayon de la bille).
    J'ai fait ça en C il y a longtemps ce n'est pas trop difficile.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut pas trop difficile mais quand meme
    Tu travailles de facon iterative.
    tu fais
    xn+1=xn+vx*dt
    yn+1=yn+vy*dt

    Ta frontiere est constituee de n ségments ...

    Si tu ajoutes le cercle de rayon r autour de ta bille, c'est deja moins facile enfin pas si sur.
    A t=0, la distance mini a un bord est >r

    a) avance moins vite que le rayon de ta bille de facon a ne pas traverser une frontiere sans le savoir
    (V*dt<r)
    b) calcule la distance minimum depuis chaque segment ... fais un dessin , ton segment [A,B] croise t il ta bille dont le centre est C ?.
    Pour cela calcule le produit vectoriel entre AB et AC , tu pourras trouver H le point orthogonal entre les segment AB et AC.
    H est le milieu de l'intersection entre ton cercle et le segment.
    c) Si la distance CH est < r et que H est sur le segement AB tu as traversé, dimunue ton temps de facon à ce que CH soit voisin de r (je dirais legerement superieur, pour les coins) ... a ce moment inverse ta vitesse. Ton objet vient de rebondir.
    d) Pense a faire cela pour tous les segments en trouvant le t mini car tu peux traverser plusieurs segments apres dt, en gros apres réduction de ton temps, verifie que tu ne traverse qu'une seule frontiere, c'est celle sur laquelle tu rebondis !!
    e) Reprend ensuite un temps normal.

    Prie pour ne jamais tomber dans un coin exactement.

Discussions similaires

  1. [Débutant] Gestion des erreurs
    Par ghohm dans le forum Struts 1
    Réponses: 5
    Dernier message: 07/06/2007, 12h17
  2. [Débutant] Gestion des erreurs
    Par ghohm dans le forum Struts 1
    Réponses: 5
    Dernier message: 01/06/2007, 11h13
  3. [débutant] gestion des exceptions dans web.xml
    Par jgaslain dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 06/02/2007, 09h46
  4. [Débutant]Gestion des évènements souris
    Par bubu251 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/10/2006, 11h49
  5. Débutant: Gestion des références
    Par todobene dans le forum Langage
    Réponses: 2
    Dernier message: 07/06/2006, 07h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo