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

Physique Discussion :

Calcul de résolution de choc entre des polygones (moteur 2D)


Sujet :

Physique

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Calcul de résolution de choc entre des polygones (moteur 2D)
    Bonjour!

    Je me suis lancé sur la réalisation d'un moteur physique en AS3 (langage de flash). L'avantage du flash, c'est que d'une part, flashPlayer fera très bien l'affaire pour le moteur graphique, et d'une autre part, je peut facilement tracer la forme de mes objets, ainsi que définir les coordonnées globales des sommets, que je peut connaitre a tout moment malgré la transition des objets. En plus, l'animation des personnages ou autre élément de décors, sera un vrai bonheur à réaliser.

    Bref, je bute sur la résolution des calcules de collisions, bêtement parce que je ne trouve pas les bonnes formules. A force de recherche, j'ai fini par trouver ce très bon tutoriel.

    J'ai crue enfin trouver ce que je cherchai au chapitre "Théorie de l'impulsion", (l'encre pointant pile dessus est donnée avec le lien).
    Mais en faite, je ne sais pas comment me dépatouiller avec toutes ces formules, d'ou ma présence ici.

    Au final, on obtient deux résultats, appelés impulsion normal, Px, et impulsion tangentiel, Py. C'est bien jolie mais je ne sais pas comment en déduire les nouvelles valeurs de la vitesse de translation et angulaire de mes objets.

    En suite, dans plusieurs formule, il utilise X1, Y1, X2, Y2, W, et je suis pas sur de savoir a quoi elles correspondent: le nom des variables représentant les vitesses initials sont données: Xo1, Yo1...etc. Mais ce n'es pas non plus les vitesse final, vue que c'est ce qu'on cherche. C'est donc les positions, mais je trouve ça très étrange.

    En suite, je ne connait pas certain signe mathématique, comme le point au dessus de certaines variables, que j'ai d'abord pris pour une cochonnerie sur l'image, mais qui me met le doute maintenant, ou encore le calcul de "s" dans la classification du mouvement (le truck avec le crochet).

    Voila, un coup de main??
    Merci d'avance, déjà de m'avoir lue jusqu'ici.

    Ps: la détection des collisions et le repositionnement des objets marche sans souci, je connait mon point d'impact et quel est le sommet/segment collisioner.

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Citation Envoyé par Splyf Voir le message

    le point au dessus de certaines variables,
    Signifie la dévirée simple. la dérivée seconde est indiquée avec 2 points

    Citation Envoyé par Splyf Voir le message
    le truck avec le crochet
    C'est une définition de fonction :
    s vaux So/|So| sauf si So=0, auquel cas s=1

    En gros c'est s=f(So)=So/|So|
    si So=0, s=f(So)=1

    Pour le reste, je trouve ça bien complexe pour une simple collision. j'aurais juste fait avec la loi de reflexion des angles et la vitesse à l'impact...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci Ange_blond! J'ai bien fait de demander pour le petit point, j'aurai carrément oublié une étape de calcule.

    Pour la méthode simple, c'était mon intention de départ. Mais j'avais déjà appliquer ce genre de méthode, pour ce site (passé sur les bouton du menu fait bougé les balles via une animation, puis les rebond et translation son calculer une foi que la sourie ne survole plus le menu, l'animation étant fini. Cliquer sur le menu "la baroufada" pour mieux observer leurs comportements). Enfin sans calcule de réflexion d'angle, vue que les mures sont strictement vertical et le sol strictement horizontal .

    Mais avec cette méthode, il n'y a pas vraiment moyen de calculer la rotation des objets, ce qui n'est pas gênant pour une balle, c'est rond donc qu'elle sois tourné de 35° ou pas, le résultat de l'impact est le même (enfin presque, la rotation provoque un phénomène de frottement, mais bon ^^) .
    Mais pour un polygone, c'est plus la même! imagine un rectangle qui tombe simplement a cause de sont propre poix, et dont aucun segment n'est parallèle au sole. Il va rebondir sur un angle sans tourné, jusqu'à ce que les quantitées de mouvement deviennent nulle, et il restera comme par magie en équilibre sur cette angle quand il sera immobile...pas crédible. Il me faut donc belle et bien calculer la rotation, pour des cas plus général. Vue que c'est un projet perso, je n'ai pas de limite de temps et de plus la réalisation m'amuse, donc voila, ça serai bête d'avoir bossé je ne sais combien d'heure sur un détecteur de collision prévue pour les polygone et utiliser que des sphères

    Ton explication sur les notations mathématiques m'aide déjà beaucoup, reste a comprendre ce qu'est Px et Py (les valeurs obtenues) pour en déduire les vitesse final, de translation ET de rotation.
    Par contre si tu connait un moyen simple pour faire les calcules de rotation, je suis preneur.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Je suis moi aussi en train de faire un petit moteur physique, mais en C. J'en ai fini avec les trajectoires et je commence la rotation des objets. J'ai pas réellement commencé cette étape, mais les points importants a retenir sont :

    -La trajectoire de l'objet est définie par la trajectoire du centre de masse.
    -La rotation de l'objet est du au moment des forces qui s'y appliquent.

    Je ne connais pas ton niveau en physique mais le moment des forces n'a rien a voir avec un temps, c'est simplement le produit de l'intensité de la force par la distance séparant le point d'application du centre de rotation (généralement le centre de masse, sauf s'il y a d'autres contrainte sur ton objet). Ce que je me dis toujours quand j'ai un problème c'est : il y a toujours une constante quelque part. Dans le cas d'une rotation c'est le moment cinétique. En fait quand on y regarde de plus près une rotation n'est pas différente d'une translation :

    TRANSLATION :

    -Masse
    -Position
    -Vitesse
    -Accélération
    -Principe d'inertie (une masse continue sa course en ligne droite si elle ne rencontre pas de force qui s'y oppose)

    ROTATION

    -Moment d'inertie (équivalent a la masse)
    -Angle (équivalent à la position)
    -Vitesse angulaire
    -Accélération angulaire
    -Théorème du moment cinétique (équivalent au principe d'inertie, tout corps en rotation, continue de tourner autour de son centre de rotation tant qu'aucun couple s'y oppose)


    Je ne suis qu'au début de mon projet, je n'ai donc pas commencé à coder la partie qui traite des rotations, mais dès que j'aurais quelque chose je pourrais te donner du concret.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Non, le moment d'inertie est relatif à un axe.

    Si tu veux pouvoir tourner dans tous les sens sans recalculer le moment d'inertie, il faut utiliser ce qu'on appelle la matrice d'inertie, et faire du calcul matriciel.

    Quand a ton calcul du moment, il n'est pas bon non plus. C'est un produit vectoriel.

    Je crois que tu devrait potasser un peu tes bases de physiques si tu ne veux pas te retrouver bloqué dans ton projet

    EDIT: Je viens de voir que c'était en 2D. L'axe de rotation est donc fixe et il n'y a pas besoin de matrice d'inertie. Par contre, il y a toujours besoin du produit vectoriel pour calculer le moment

Discussions similaires

  1. Calcul des distances entre des points
    Par orland dans le forum R
    Réponses: 1
    Dernier message: 08/10/2012, 13h49
  2. Calcul du plu court chemin entre 2 sommets d'un graphe valué
    Par atlasm dans le forum Algorithmes et structures de données
    Réponses: 25
    Dernier message: 07/08/2005, 17h06
  3. Empêcher le retour á la ligne entre des balises <Hx> e
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  4. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 15h22
  5. [Image]Remplir des polygones
    Par magic.goby dans le forum 2D
    Réponses: 8
    Dernier message: 22/04/2004, 16h56

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