Je pense que vous essayez peut-être d'insérer une clé carrée dans un trou rond en appliquant SAT de la manière dont vous êtes ici. De toute évidence, il n'est pas conçu pour les collisions concaves-concaves, et bien que je salue vos efforts pour l'adapter à cette fin, il y a des considérations qui rendent cela improbable.
Le réalisme
L'impulsion angulaire et ses effets d'entraînement sont le nom du jeu ici.
L'ordre des points de contact est important pour une résolution de collision réaliste. Dans le monde réel, un de ces points va toujours frapper avant un autre. Et ce n'est qu'en émulant cet ordre de contact et les résultats de chaque "sous-collision" représentée par cela, que vous pouvez vous attendre à obtenir un résultat réaliste dans la simulation. C'est l'une des raisons mêmes pour lesquelles vous divisez votre concave en convexe, en premier lieu - cela permet la détection par morceaux de la partie qui a frappé en premier. Bien sûr, cela peut également être imité selon mon commentaire sous la rubrique "Moins de réalisme".
Vos appareils convexes se combinent pour donner à l'objet à la fois son contour et son centroïde (et bien sûr, dans des simulations plus complexes, chaque appareil peut également affecter la densité différemment). La raison pour laquelle je mentionne ceci est que pour résoudre des collisions de manière réaliste, vous devrez calculer non seulement une impulsion linéaire mais également angulaire, après chaque "sous-collision" de vos points de contact. Ce n'est pas aussi simple que la «séparation» de base que vous appliquez avec SAT.
Cela change alors complètement la nature de votre problème, car comme vous pouvez le voir, il est inutile d'obtenir et d'essayer d' utiliser 2 points de contact ou plus, car ce n'est vraiment que le premier qui compte. Une fois que vous avez résolu le premier en termes d'impulsion linéaire et angulaire, vous devrez recalculer pour d'autres collisions, car les orientations de chaque objet auront changé. De plus, la détection de chaque contact individuel dans l'étape peut alors ou non avoir besoin d'être effectuée au cours de cette même étape - en fonction de la synchronisation entre les contacts lorsque le premier point de contact des objets touche, une impulsion linéaire et angulaire ultérieure est appliquée, deuxième contact point de contact, etc.
Moins de réalisme
Bien sûr, en supposant que vous n'êtes pas du tout intéressé par la résolution de l'impulsion angulaire, alors le mieux que vous puissiez faire avec SAT devient essentiellement exactement ce que vous feriez si vous enveloppiez ces polygones comme convexes en utilisant quelque chose comme Graham's Scan: Écarter par la seule séparation vecteur. En d'autres termes, cela n'a pas de sens d'essayer de résoudre trois vecteurs en tandem, comme vous l'avez démontré. C'est le plus gros du peloton qui compte.
MODIFIER en réponse à votre question
Ce que vous devez faire si vous souhaitez une approche simpliste est la suivante:
Déterminez la bonne direction de déplacement. Cela se fait le plus facilement en décortiquant chaque coque et en déterminant les normales à l'axe de séparation.
Vous devez maintenant déterminer l' amplitude du déplacement . Pourquoi ne pouvons-nous pas simplement utiliser l'ampleur donnée par SAT? Parce que si vous y réfléchissez, les profondeurs d'interpénétration seront potentiellement plus grandes pour les coques convexes que pour leurs coques concaves assorties - pensez à deux E avec leurs dents l'une dans l'autre! Comme vous l'avez fait ci-dessus, recherchez tous les points de contact pour une étape donnée, mais trouvez-les parallèles aux normales d'axe, car c'est la bonne direction de déplacement. Déterminez maintenant lequel de ces vecteurs de chevauchement parallèles est le plus long. Déplacez-vous par celui-ci, jetez le reste et passez à l'étape suivante de la physique.