2

Je travaille sur la simulation de corps rigides depuis un moment et je ne sais toujours pas comment résoudre ce problème. (J'utilise la détection de collision discrète et j'utilise le LCP pour résoudre l'impulsion de chaque point de contact.)correction de la pénétration de la rigidité du corps rigide

Imaginez un bol fixe (un hémisphère centré sur C) et une particule sur le bord du bol. La particule roule sur la surface à l'intérieur du bol. Et à un pas de temps, il devrait y avoir un point de contact A, et le solveur LCP donnera l'impulsion de résultat qui rend la vitesse de la particule perpendiculaire au vecteur CA. Mais après avoir mis à jour un pas de temps, la particule se déplace un peu le long de cette vitesse et sort effectivement du bol, et les choses empirent après plusieurs pas de temps. Quand j'ai utilisé un cube à la place de la particule, le cube peut pénétrer et couler dans le bol.

Y a-t-il un moyen d'éviter cela? La méthode des impulsions n'est pas parfaite et il peut encore y avoir pénétration après la réponse de collision. Je dois d'une certaine façon corriger la pénétration, mais simplement déplacer l'objet le long de la surface normale au point de contact n'est pas une bonne idée, car il peut produire de nouvelles pénétrations.


Edit:

Il est pas le problème de bol étant trop mince ou pas de temps trop grand. La raison en est que l'intégrale d'Euler produit un polygone au lieu d'un cercle. Et nous ne pouvons pas simplement modifier les positions de ces 2 objets, car s'il y a un troisième objet de l'autre côté, les objets 2 et 3 peuvent avoir une nouvelle pénétration. Je pense qu'un moyen consiste à ajouter une force élastique basée sur la profondeur de pénétration, mais ce n'est pas assez net.

Merci c'est une bonne idée de regarder à travers le code source de Bullet, de travailler dessus.

+0

vous pouvez vérifier comment cela est résolu dans les packages de dynamique moléculaire, par exemple AMBRE ou GROMACS. – Andrey

+0

Je veux vous donner un +1 juste pour le titre: "pénétration de la dynamique du corps rigide" –

+0

Est-ce que réduire le pas de temps réduit le naufrage? – Zouch

Répondre

0

Calculez une étape, obtenez la pénétration de toutes les particules. Calculer la probabilité sphérique des occurrences sur les points pénétrés, refléter les probabilités d'occurence des surfaces, supprimer les probabilités pénétrées, soustraire les probabilités des autres particules de sa carte de probabilité locale, placer la particule sur le point de probabilité le plus élevé.

Exemple:

o ---> | 

      |  o  penetrated to here 

      | %5 %50 %90 

%90 %50 %5 | 

o   | 

probabilités à gauche de celui-ci et à droite de celui-ci est le même (environ 80%), de sorte qu'il est maintenant stationnaire, il est donc collision non élastique.

permet maintenant supposer qu'il ya une seconde particule

o ---> o | 

     o |  o  penetrated here 

    -100% | %5 %50 %90 

%90 %0 %-45| 

    o  o | 

si particules a rebondi à partir d'autres particules qui a rebondi également en arrière du mur, mais a donné son élan nouveau à première particule. Ensuite, la probabilité vers le côté gauche est plus grande, de sorte que sa vitesse finale est "à gauche". Pour ce faire, en série pour toutes les particules pénétrées (qui devrait être un peu seulement?)

Son ajout de probabilités N particules N * M soustraites de toutes les autres particules cartes de probabilité qui est N * opérations N * m où M est K * L * M d'un K par L par M espace cube de taille