et
, fonctions quelconques


si l'on connait les angles polaires en fonction du temps.
)



, le vecteur-vitesse

|
Posté par alexandre_h
Je suis arrivé à l'équation suivante que j'espère correcte :
( (P1 + tV1) - (P2 + tV2) )² < (2R)² |
|
Je suppose que le résultat de cette équation doit être le résultat d'une équation du second degré avec des racines correspondantes au 2 instants t pour lesquels les projectiles entrent et sortent de collision, avec l'impossibilité de la calculer dans le cas ou les vecteurs vitesses sont égaux. |


|
Posté par alexandre_h
Je cherche à calculer la plage de temps pendant laquelle 2 projectiles circulaires de rayon R
|
|
Posté par mathelot
ah, j'ai compris: tu as écrit "solides circulaires" pour "solides sphériques".
![]() |
|
Posté par alexandre_h
L'équation que tu donnes reviens à ce que j'ai trouvé, mais je n'arrive pas à en déduire correctement les solutions t1 et t2 !
|

public double dot(Point2D.Double P1,Point2D.Double P2) { return P1.x*P2.x + P1.y*P2.y; } public Point2D.Double v(Point2D.Double P1,Point2D.Double P2) { return new Point2D.Double(P2.x-P1.x, P2.y-P1.y); } double R = 10.0; Point2D.Double Vnull = new Point2D.Double(0.0,0.0); Point2D.Double P1 = new Point2D.Double(100,100); Point2D.Double P2 = new Point2D.Double(200,170); Point2D.Double V1 = new Point2D.Double(10,10); Point2D.Double V2 = new Point2D.Double(-12,-10); paintPart(g,P1,V1,R); paintPart(g,P2,V2,R); Point2D.Double V2V1 = v(V2,V1); Point2D.Double P2P1 = v(P2,P1); double a = dot(V2V1,V2V1); double b = 2.0*dot(V2V1,P2P1); double c = dot(P2P1,P2P1) - 4.0*R*R; double delta = b*b - 4.0*a*c; if( delta>0.0 ) { double sD = Math.sqrt(delta); double t1 = (-b-sD)/(2.0*a); double t2 = (-b+sD)/(2.0*a); System.out.println("Col at "+t1+","+t2); g.setColor(Color.RED); double xC1 = P1.x + t1*V1.x; double yC1 = P1.y + t1*V1.y; double xC2 = P2.x + t1*V2.x; double yC2 = P2.y + t1*V2.y; double xCol = (xC1 + xC2)/2.0; double yCol = (yC1 + yC2)/2.0; g.drawLine((int)(xCol-2.0),(int)(yCol-2.0),(int)(xCol+2.0),(int)(yCol+2.0)); g.drawLine((int)(xCol-2.0),(int)(yCol+2.0),(int)(xCol+2.0),(int)(yCol-2.0)); paintPart(g,new Point2D.Double(xC1,yC1),Vnull,R); paintPart(g,new Point2D.Double(xC2,yC2),Vnull,R); } else { System.out.println("No col"); }
|
Posté par alexandre_h
Sinon la solution la plus proche sera toujours (-b-sqrt(delta))/2a non ?
|
|
Posté par alexandre_h
Bonjour à tous,
Je profite de mon premier message pour me présenter rapidement, je m'appel Alexandre et je suis étudiant en informatique. Je travail en fait sur un projet de réalité virtuelle et je cherche à faire quelque chose que je pensais simple mais qui commence sérieusement à me taper sur le système Je cherche à calculer la plage de temps pendant laquelle 2 projectiles circulaires de rayon R lancés à des vitesses instantanées V1 et V2 depuis des points P1 et P2 sont en collision. Je suis arrivé à l'équation suivante que j'espère correcte : ( (P1 + tV1) - (P2 + tV2) )² < (2R)² Je suppose que le résultat de cette équation doit être le résultat d'une équation du second degré avec des racines correspondantes au 2 instants t pour lesquels les projectiles entrent et sortent de collision, avec l'impossibilité de la calculer dans le cas ou les vecteurs vitesses sont égaux. Mais j'imagine que je fais des opérations sur les vecteurs qui ne sont pas autorisées. L'un de vous aurait il le temps et les connaissances pour m'aider à résoudre ce problème ? Merci à vous, Alex |
|
Posté par Dominique Lefebvre
Bonjour,
Sur le plan strictement physique, j'ai l'impression que tu considères que la collision est parfaitement élastique, et donc qu'il n'y a aucune déformation des solides. Sous cette hypothèse, je me demande comment tu trouves un temps non nul de contact entre les deux solides en collision? Dans le cas d'une collision parfaitement élastique (ce qui n'existe pas dans la pratique), la durée du choc tend vers 0. Si tu veux coller à la réalité et calculer le temps de contact pendant le choc, tu dois évaluer la déformation des solides. |
-