9
votes

Prévision de collision Circle-Circle

Je suis conscient de la façon de vérifier si deux cercles se croisent les uns des autres. Cependant, parfois, les cercles se déplacent trop rapidement et finissent par éviter la collision sur la trame suivante.

Ma solution actuelle au problème est de vérifier la collision de cercle de cercle une quantité arbitraire de fois entre la position précédente et sa position actuelle.

Y a-t-il une manière mathématique de trouver le temps qu'il faut pour les deux cercle de collision? Si je pouvais obtenir cette valeur de temps, je pourrais déplacer le cercle vers la position à ce moment-là, puis la collecter à ce point.

EDIT: VELOCITÉ CONSTANT


4 commentaires

C'est un peu vague. Quel est le modèle de mouvement de vos cercles? vitesse constante ??


Vélocité constante, oui. Désolé, je ne suis pas à 100% comment poser cette question. J'ai cherché de nombreux résultats uniquement pour me rappeler que je ne suis pas le meilleur de la physique.


Oui il y a un moyen. Oui, je suis sûr que c'est un calcul simple. Cependant, je n'ai aucune idée de ce que c'est :( Je sais que c'est un calcul assez basique cependant.


Zut. Eh bien, si vous avez des conseils, faites le moi savoir. :)


3 Réponses :


-1
votes

Vous pouvez prédire la collision en utilisant le vecteur et la vitesse de la direction, cela vous donne les étapes suivantes et quand elles feront une collision (s'il y aura).

Vous avez juste besoin de vérifier l'algorithme de croisement de la ligne pour détecter que ...


1 commentaires

Eh bien, j'ai la position, la vitesse et la direction toutes accessibles pour utiliser n'importe quel algorithme dont j'ai besoin. Je peux déjà détecter suffisamment les collisions circulaires. C'est juste que mon projet met à jour tous les 1 / 60e d'une seconde.



13
votes

Je suppose que le mouvement des cercles est linéaire. Disons que la position du centre de Circle A est donnée par l'équation de vecteur ca = oa + t * da

ca = (CAX, CAY) est la position actuelle de
oa = (ouax, oay) est la position de départ de
t est le temps écoulé

da = (DAX, jour) est le déplacement par unité de temps (vitesse).

De même pour Cercle B's Center: CB = OB + T * DB .

alors vous voulez trouver t telle que || ca - cb || = (RA + RB) ra et rb sont les rayi de cercles A et B respectivement.

Staring des deux côtés:
|| CA-CB || ^ 2 = (RA + RB) ^ 2
et en expansion:
(Oax + T * DAX - OBX - T * DBX) ^ 2 + (oay + t * jour - oby - t * dby) ^ 2 = (RA + RB) ^ 2

à partir de celui que vous devriez obtenir un polynôme quadratique que vous pouvez résoudre pour T (si un tel T existe).


3 commentaires

Merci beaucoup! Travaillé comme un charme.


C'est une excellente équation .. mais malheureusement, mon algèbre est rouillée. Comment réorganiserait-on que l'équation à résoudre pour T dans un cycle est tombé en couple?


@Mattkenefick Voir ici .



2
votes

Voici un moyen de résoudre l'équation dans l'excellente réponse d'Andrew Durward.

Pour simplement brancher des valeurs, on peut passer au bas. P>

(a != 0) && (b^2 >= 4ac)


0 commentaires