Je pense que le HelloWorld.cpp de Bullet Physics donne un exemple de chute libre. Pour vérifier si le résultat de Bullet Physics est conforme à la loi physique, dans HelloWorld.cpp, j'ai changé la position initiale de la sphère de "startTransform.setOrigin (btVector3 (2, 10, 0)); " à "startTransform.setOrigin (btVector3 (2, 0, 0));", et j'ai changé l'étape de simulation de "//dynamicsWorld->stepSimulation(1.f/60.f, 10);" à "dynamicWorld-> stepSimulation (0.1f, 0, 0.1f);"Le résultat de l'exemple HelloWorld dans Bullet Physics n'est pas cohérent avec la loi de chute libre?
Je pense, après ces deux changements, la sortie sera les positions de la sphère en mouvement de chute libre espacées de 0,1 seconde. Je produis également la vitesse linéaire de la sphère à chaque étape de la simulation. Le résultat est: vx, vy, yz, px, py, pz
La première ligne est la vitesse linéaire initiale et la position. Nous pouvons trouver que la vitesse est compatible avec la loi de la chute libre (c.-à-d. V = g * t), mais la position (déplacement) n'est pas compatible avec la loi de la chute libre (c.-à-d./2). Donc, je me demande si Bullet Physics est fiable? Ou ai-je quelque chose de mal?
Merci!
Des pas de 0,1 seconde me paraissent très évidents. Lorsque je modélisais des trajectoires de balles de cricket pour des matches internationaux, j'utilisais un pas de temps d'environ 0,001 seconde (pour autant que je m'en souvienne), afin de réduire les erreurs de progression de la position. Je n'ai pas utilisé BulletPhysics, mais je dirais que cela vous donne un certain temps parce qu'il s'agit d'approximer la position plutôt que d'essayer d'effectuer l'intégration. Essayez de réduire le temps quantique et vous devriez voir l'erreur commencer à converger vers la prédiction mathématique. Oh, et ne supposez rien est dans le vide, jamais! – paddy
Merci beaucoup paddy!Je comprends votre point et j'ai essayé une étape de simulation de 0,001 seconde. Cependant, le résultat n'a montré aucune «convergence» vers la prédiction mathématique de la loi de la chute libre. La vitesse est toujours droite, avec une séquence de "-0,01, -0,02, -0,03, ..., -0,10". Pourtant, la séquence de position est "-0.00001, -0.00003, -0.00006, -0.00010, ..., -0.00045, -0.00055", qui est le résultat en utilisant 0.1s multiplié par 10000! – Langping
Cela vous donne-t-il des deltas de position au lieu d'une position absolue? Avez-vous lu la documentation attentivement? – paddy