Il existe de nombreux algorithmes, mais ils sont tous spécifiques aux types d'objets. Le modèle général pour la vitesse linéaire est, vous prenez l'équation pour la distance forme/forme, paramétrez-la dans le temps (compte tenu de la position relative des objets et de la vitesse relative), et résolvez pour une distance de zéro. Par exemple, si vous aviez deux sphères, et la position relative de la seconde par rapport à la première était X0, et la vitesse relative de la seconde par rapport à la première était V, et les sphères avaient des rayons r1 et r2, vous résoudriez D(t) = ||X0 + V*t|| - (r1+r2) = 0
.
Pour un mouvement non linéaire, vous avez essentiellement X (t) en tant que fonction, au lieu de X(t) = X0+V*t
. Selon la complexité de cette fonction, cela peut être facile ou difficile. En supposant que c'est dur (c'est probablement le cas), vous opteriez pour une méthode de résolution itérative comme Newton-Raphson. Heureusement, les formules de distance ont tendance à être facile à prendre des dérivés de.
L'autre option pour le mouvement non linéaire est de le discrétiser en étapes linéaires. D'une certaine manière, c'est une méthode itérative bon marché et n-joyeuse, mais étant donné que la plupart des approches de ce genre de chose supposent une vitesse linéaire, c'est probablement la façon la plus simple de les appliquer.
Bien sûr, je triche en utilisant des sphères ici. Les boîtes et les cylindres sont plutôt plus agaçants pour trouver des distances, surtout s'ils sont en rotation. Je peux recommander la détection de collisions en temps réel d'Ericson comme le livre standard sur le sujet; il a un certain nombre de recettes pour différentes paires de formes, ainsi que des méthodes lourdes pour des formes plus compliquées.
Les classes de collision (structures) sont Open Source dans le cadre Monogame. Je les ai arrachés et les ai ajoutés à mon moteur de jeu. – Krythic
Quel type de fonction de position non linéaire avez-vous? – LmTinyToon
Fonctions paramétriques des polynômes – Jake