Algorithme de collision entre un point et un rectangle.

Algorithme de collision entre un point et un rectangle. - Delphi/Pascal - Programmation

Marsh Posté le 31-12-2003 à 15:53:27    

Salut!Je suis le frere de SmilM
J'ai fais de nombreuses recherches au niveau des algorithme de collsion pour la programmation d'un jeu en delphi.
Je suis chargé du moteur phyisque.
 
J'ai donc fais une application qui test la collision entre deux rectangles (sous forme de shape sous delphi) grace a le technique de Bounding-Box.
Seulement maintenant sur un autre programme, je demande a l'utilisateur de donner des paremetres pour tracer une trajectoire d'un projectile, tout ca avec la gestion du vent, un angle, le poid du projectile, et la vitesse du projectile ect...
Ce sont donc des courbes qui se produisent.
J'affiche des points a intervalles qui ne sont pas régulier, il différe en fait en fonction de la vitesse du projectile (si le projectile est en phase descendente, ca vitesse augmentera au fur et a mesure de la descente).
 
Il est donc possible que le rectangle soit entre deux points de la courbe, tout les points n'étant pas afficher pour donner un effet de vitesse.
Le probleme qui se pose donc dans ce cas, c'est que la fonction bounding box ne repere pas de collision alors qu'elle existe pourtant.
Voilà le screen d'un exemple concret qui vous paraitera peut etre plus clair.
http://abc.phpnet.org/autre/screen.jpg
 
J'aimerais donc savoir si vous voyez une solution algorithmique ou tout du moins mathématiques pour que la collision soit reperer.
 
Merci d'avance.

Reply

Marsh Posté le 31-12-2003 à 15:53:27   

Reply

Marsh Posté le 31-12-2003 à 15:56:22    

Comme ça en vitesse je dirais que tu pourrais calculer les valeurs y pour chaque point qui a un x coïncidant avec le carré bleu, et si un des y est en dans le carré bleu, c'est que la ligne passe sur le carré.
Je ne suis pas sûr que le fait de se baser sur ce qui est affiché à l'écran soit la meilleure solution pour ce genre de choses :/


Message édité par antp le 31-12-2003 à 15:56:51

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 01-01-2004 à 21:13:11    

J'ai déjà beaucoup réfléchi à ce problème, et la meilleure solution que j'ai trouvée, c'est de faire une boucle pour tester "pas à pas" s'il y a collision. Je m'explique: si entre deux points tu as une distance (utilise Hypot pour la calculer) de 20 pixels par exemple, tu divises ce trajet par 20 pour tester pixel par pixel. Si le rectangle est vraiment gros tu peux sans doute découper en moins d'étapes pour gagner du temps.
 
Avantage: tu peux savoir exactement la dernière position avant laquelle il y a collision, et arrêter l'objet à cet endroit exact.
 
Le problème c'est si tu as beaucoup d'objets en jeu, je ne sais pas trop ce que ça peut donner.
 
Edit: en fait, ça revient à utiliser la solution de antp.


Message édité par DooMeeR le 01-01-2004 à 21:14:03
Reply

Marsh Posté le 02-01-2004 à 02:52:47    

en faite si c'est pour un jeux, il ne serait pas plus judicieux d'analyser les vecteurs en X et Y, Z voir t.
 
tu fais donc ton calcule de colision dans le cas ou tu le dépasses tu reviens au point précédent et tu diminues ton incrément afin de trouver la position exacte de colision une fois ton système de point calculé tu l'affiches. Mais tu l'affiches uniquement après avoir calculez toute ta courbe. Voilà ton calcule aura toujours un peu d'avance sur l'affichage mais cela restera très correcte pour tes incréments de temps.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed