Bonjour!!
Je suis en train de développer un moteur physique en as3 (langage de programmation de flash). J'ai dû pour cela me penché sur l'étude de la physique mécanique.
Mais voila, alors que toute la partit concernant la détection des collision ce déroule a merveille et au pixel près, je cale sur les opération a effectuer au moment de l'impact.
Je vais expliquer brièvement comment je procède.
-Nous avons 30 image par seconde, les calcules qui détermine la vitesse des objets (et donc leur déplacement) sont fait à chaque image. (tout les 33,3333...ms pour être précis).
-chaque objet a une masse, et une élasticité.
-chaque objet a une liste de force qui lui sont appliqué à chaque image.
-à chaque image, j'additionne les forces de chaque objets, j'en pondère l'accélération, puis la vitesse, qui me permet de les déplacé.
accélération = Force/masse, Vitesse1 = vitesse0+accélération.
C'est a l'impact que j'ai des problèmes, la ou l'énergie cinétique intervient.
Prenons un exemple pour que cela sois plus parlant (dans mon système, les unité de mesure n'ont pas d'importance, car les distance sont en pixel, et on considérera que tout les valeur sont a l'échelle):
-Prenons un objet A, de masse ma = 100 et un objet B de masse mb = 200. Ses deux objet on été propulsé par deux forces (des frapes par exemple), et ce retrouve a l'image T1 avec les vitesse suivante: Va = 51 et Vb = -30.5.
-on déplace nos objet et on ce retrouve a T2 (ou image 2).
A ce moment là, on détecte qu'il y a collision. Le bute est de savoir quelle sont les forces qui s'exerce sur les deux objet, pour déterminer les déplacement aux images d'après, en particulié a T3.
Je sais deux chose:
-l'énergie cinétique de A vaut 1/2*m*V² -> Ea=100/2 *51^2 = 130050 et Eb = 93025.
-La Troisième loi de Newton ou principe des actions réciproques (wikipedia):
Déjà, première question: les énergie cinétique peuvent elle être convertie en Force?A et B étant deux corps en interaction, la force Fa/b (exercée par A sur B) et la force Fb/a(exercée par B sur A) qui décrivent l'interaction sont directement opposées : Fa/b = -Fb/a
je pense a ceci:
A applique une énergie de 130050 sur B, ce qui pour B, revient a une vitesse de Vb = (Ea/mb/2 )^ 1/2 = 18 (environs). Si l'on considère que l'on est entre T0 et T1, la vitesse vaut l'accélération, et donc la force vaut Ac*m = V*m et donc Fa/b = 18*200 = 3600.
Et à l'inverse, la force exercé sur a Fb/a vaut 2100. (-2100 vue que le sens de la vitesse est négatif).
Vient la 3ème loi de newton. Je suppose qu'elle traduit le fait que deux objet ne ce passe pas a travers. Mais je ne sais pas vraiment comment l'appliquer. On voie bien dans les calcule précédents que les force ne sont pas égale.
de plus j'ai eu ce raisonnement: A à une force de 3600. B de -2100. B applique sa force sur A, et vise versa. La force final de A (sur A) est finalement de 1500. (3600 + -2100). Celle de B (sur B) également (-2100 + 3600 = 1500).
B va dont ralentir, ok, mais A va accélérer!!
Comme ça n'a aucune logique, je me suis dit que la 3ème loi de newton veut dire que si un objet A applique une force sur B Fa/b, il reçois une force opposé équivalente.
donc A reçoi une force de -3600, pour une force final de 1500 + -3600 = -2100.
voyons l'influence que ça a sur la vitesse: Va = 51 + -2100/100=30.
et pour B: 1500+2100 = 3600, donc Vb= -30.5 + 3600/200 = 5.5.
C'est beaucoup plus cohérent, A ranlentie, B change de sens. Mais la A est passé de l'autre coté de B, ce qui n'est pas possible (B recule de 5px et A va dans le même sens de 30px). De plus, appliqué des force strictement opposé pose un autre problème:
une balle qui arrive avec un angle de 45° sur un mure, repars avec un angle de -45°. Mais si les forces sont strictement opposé, elle repart avec le même angle.
voila, j'espère avoir été suffisamment clair pour que vous puissiez m'aider, la structure de mon programme fonctionne, je doit juste appliqué les bonne force au bon moment.
Merci d'avance!!
-----