Je pense que le mieux serait d'utiliser une bibliothèque de physique spécialisée.
Cela étant dit. Si je pense à ce problème, je suppose que ce n'est pas si difficile:
La sphère a un point médian et un rayon. Pour chaque point du maillage, procédez comme suit:
- Vérifiez si le point se trouve à l'intérieur de la sphère.
- si elle ne vérifie si elle est plus proche du centre que le point trouvé précédemment (le cas échéant)
- si elle ne ... stocker ce point comme le point de collision
Bien sûr, cette routine sera assez lent. Quelques choses à l'accélérer:
- pour un premier trivial rejeter, voir d'abord si la sphère de délimitation du maillage entre en collision
- ne CALC pas les squareroots lors de la vérification des distances ... utiliser les longueurs au carré à la place. (beaucoup plus rapide)
- au lieu de comparer tous les points du maillage, utilisez un algorithme de répartition spatiale dimensions (quadtree/BSP) pour le maillage de se prononcer rapidement des groupes de points
Ah ... et cette routine ne fonctionne que si la sphère ne voyage pas trop vite (r élatif au maillage). S'il voyageait très vite, et que vous l'échantillonniez X fois par seconde, il est probable que la sphère aurait traversé le maillage sans qu'il y ait collision. Pour surmonter cela, vous devez utiliser des «volumes balayés» qui, fondamentalement, fait de votre sphère un tube. Rendre les mathématiques exponentiellement compliquées.
Si votre mesh est grand par rapport à votre sphère, vous pouvez obtenir 2 points en dehors de la sphère où le bord de connexion croise la sphère. Bien sûr, si vous n'obtiendriez pas cela dans votre contexte, alors vous pourriez juste faire le test du point dans la sphère. – geofftnz