J'ai du mal à éviter les collisions non alignées pour ce que je pense être un cas rare. J'ai réglé deux objets pour qu'ils se rapprochent, mais avec un léger décalage, donc l'un des objets se déplace légèrement vers le haut et l'un des objets se déplace légèrement vers le bas.
Dans mon algorithme de direction d'évitement de collision non aligné, je trouve les points sur la ligne avant de l'objet et la ligne avant de l'autre objet où ces deux lignes sont les plus proches. Si ces points les plus proches se trouvent dans une distance d'évitement de collision, et si la distance entre eux est inférieure aux deux rayons des deux sphères limites de l'objet, alors les objets doivent s'éloigner dans la direction appropriée.
Le problème est que dans mon cas, les points les plus proches sur les lignes sont calculés pour être vraiment très éloignés du point de collision réel. En effet, les deux lignes avant de chaque objet s'éloignent l'une de l'autre lorsque les objets passent. Le problème est qu'à cause de cela, aucune direction n'a lieu et les deux objets entrent en collision partiellement.
Quelqu'un a-t-il des suggestions sur la façon de calculer correctement le point de collision? Peut-être en tenant compte de la taille des deux objets?
la source
Réponses:
C'est de loin le meilleur article de détection de collision de balle à balle que j'ai rencontré.
Leçons de la salle de billard: détection rapide et précise des collisions entre cercles ou sphères
la source
Vous ne voulez pas trouver le point le plus proche.
Vous voulez trouver le point sur les lignes où la distance est égale aux rayons combinés des deux sphères.
la source
Si je comprends bien votre question, vous pouvez simplement utiliser un test d'intersection Sphère vs Sphère, comme l'a suggéré AttackingHobo.
Le calcul pour faire un tel test est le suivant (corrigez-moi si je me trompe, ça fait longtemps). En outre, cela considère que vos sphères ont chacune un centre et une variable de rayon.
La formule de vérification ressemble à ceci:
Vous avez une intersection sphère vs sphère. C'est assez simple, voyons à quoi ça ressemble dans le code!
Encore une fois, je pense que c'est la bonne réponse que vous cherchez. Si quelqu'un sait que c'est mal, corrigez-moi, car cela fait un moment que je n'ai pas fait ce calcul.
la source
Ok, j'espère que cela a du sens ... Obtenez les vecteurs des boules et calculez leur point de collision, appelez cela p1. Trouvez l'angle entre les 2 vecteurs, appelez cela a1. À a1 / 2 tracez une ligne, celle-ci sera exactement au milieu en degrés entre les deux vecteurs. Vous avez besoin de l'emplacement sur cette ligne où sin (a1 / 2) = (radius1 + radius2) / 2. Si cette image est visualisée dans ma tête à droite, c'est là que la collision se produit. Désolé si c'est faux ... il est tard.
la source