J'ai besoin de réviser ma trigonométrie et j'espère que vous pourrez aider ici avec un modèle mathématique simple. Voici mon modèle jusqu'à présent dans l'image ci-jointe. Je suis conscient que l'animation d'image présente d'autres problèmes lorsque la balle se déplace très rapidement, mais pour l'instant, je dois juste calculer ballDx et ballDy. Il est également possible que ballDx = 0 (mouvement vertical uniquement), mais lorsque la balle dévie, ballDx peut obtenir une valeur différente.
46
Réponses:
Remarque: Tout ce qui suit suppose que la surface de la balle est sans frottement (elle ne commencera donc pas à tourner ou à rebondir différemment car elle l’est).
Au moment de la collision, le ballon touchera le coin. Lorsque des objets solides entrent en collision, une force agit le long de la dite surface normale, c'est-à-dire perpendiculairement à la surface au point de collision.
Comme c'est une balle, la surface est perpendiculaire au centre de la balle. Ok, donc nous connaissons la direction de la force, qu’en est-il de sa magnitude? En supposant une collision élastique (et que le rectangle ne puisse pas bouger), la balle doit rebondir à la même vitesse que celle avec laquelle elle est impactée.
Soit (nDx, nDy) la vitesse après la collision, (oDx, oDy) la vitesse avant la collision et (x, y) la position de la balle au point de la collision. Supposons en outre que le coin avec lequel la balle entre en collision est à (0,0).
Exprimant nos idées sous forme de formules, nous avons:
Ce qui équivaut à:
En substituant les deux premières équations de la dernière, on obtient:
Développer en utilisant le thorem binomial
rendements:
Cette équation quadratique pour
c
a deux solutions, dont l'une est 0. Évidemment, ce n'est pas la solution qui nous intéresse, car généralement la direction de la balle changera à la suite de la collision. Pour obtenir l'autre solution, nous divisons les deux côtés par c et obtenons:C'est:
Pour résumer, nous avons:
Edit : En code:
Quelques considérations d’implémentation: Bien que vous puissiez approximer (x, y) la position de la balle après l’étape de simulation, cette approximation modifiera l’angle de déviation et sera donc très visible. Par conséquent, vos étapes de simulation doivent être très fines la balle ne bouge pas de plus de 1/20 de son diamètre par pas). Pour une solution plus précise, vous pouvez calculer l'heure à laquelle la collision se produit et scinder cette étape de simulation à ce moment, c'est-à-dire effectuer une étape partielle jusqu'au point de la collision et une autre étape partielle pour le reste de l'étape.
Edit 2: Calculer le point d'impact
Soit r le rayon, (x0, y0) la position et (dx, dy) la vitesse de la balle au début de l’étape de simulation. Par souci de simplicité, supposons en outre que le coin en question se situe à (0,0).
Nous savons:
Nous voulons
C'est
C'est une équation quadratique en t. Si c'est discriminant
est négatif, il n’a pas de solution, c’est-à-dire que la balle ne frappe jamais le coin sur son parcours actuel. Sinon, ses deux solutions sont données par
Nous sommes intéressés par l'heure à laquelle la collision a commencé, c'est-à-dire l'heure la plus ancienne
t1
.Votre méthode deviendrait:
la source
At the moment of collision, the ball will be touching the corner
mais je ne vois pas de justification à cette approximation (et ce doit être une approximation, car ce n'est pas vrai - la balle se touche à deux endroits, ni l'un ni l'autre n'est le coin).Voici une façon visuelle de regarder un problème.
Le problème d'origine est le cercle et le rectangle (gris dans l'image ci-dessous). Cela équivaut à un rectangle arrondi (en noir).
C'est donc un problème en plusieurs parties. Vous testez votre collision de points contre 4 lignes (extrudées du bord de la boîte par le rayon du cercle d'origine) et 4 cercles (aux coins du rectangle avec le même rayon que le cercle d'origine).
Avec la vitesse approximative dans votre image d'origine, le point atteindra le cercle de coin inférieur droit. Tout ce que vous avez à faire est de déterminer le point sur le cercle de coin que vous souhaitez atteindre, d’en calculer l’angle et d’en faire une réflexion.
Je laisserai la dérivation de cela comme un exercice au lecteur.
la source
Je travaille sur un jeu et je suis aussi coincé ici. Mais je suppose que ça se passe comme ça:
Un autre point de vue Mon problème est que je ne sais pas comment calculer rapidement le nouveau dx, dy (pour moi, l’utilisation des mathématiques traditionnelles nécessite trop de calculs).
la source
La cinématique consiste à choisir le bon, comme c'est le plus pratique pour les calculs, le référentiel.
Ici, nous allons d'abord définir la transformation T qui résout nos axes en composantes parallèles ( x ' ) et perpendiculaires ( y' ) à une ligne entre le centre de la balle et le coin. La transformation inverse T * restaurera notre système de coordonnées d'origine.
Dans ce nouveau cadre de référence, par réflexion (et par la symétrie temporelle et spatiale de la physique), nous avons la transformation de vitesse du contact M (une impulsion de point ) comme celle qui inverse la composante x ' et laisse inchangée la composante y' . En termes de matrice , il s'agit de la matrice diagonale avec -1 et 1 sur la diagonale.
Alors la vitesse après la collision est simplement: V ' = T * . M . T . Vo .
Le moment de l' impact t est alors simplement la solution de ( T . Do ) + ( X . T . Vo ) ( t ) = r où X est l'opérateur de projection de l' axe X et r est le rayon de la balle. Réarrangé, on obtient
t = ( r - ( T . Do )) / (( X . T . Vo ) ( t ))
Cela présente l’avantage d’enterrer toutes les mathématiques complexes dans des bibliothèques graphiques standard rigoureusement écrites, testées et déboguées. Cette solution est également identique pour les situations 2D et 3D - il suffit de changer de bibliothèque graphique. Enfin, il est important de penser aux cadres de référence appropriés avant de s’attaquer à un problème de physique. Il y a toujours la tentation des NIH, mais en réalité, ce n'est qu'une recette pour des bugs lorsque des solutions plus succinctes sont disponibles.
la source