CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PYTHON] Probléme de collisions

Coeugniet
Coeugniet
Niveau 9
09 décembre 2016 à 13:34:31

Salut,
je vais faire court :) , j'ai dans mon programme une fonction qui detecte si deux polygones convexes se superposent, elle return True si oui False sinon,
j'ai remarquer qu'il y avait des soucis, pour être sur d'ou venait le probléme j'ai afficher deux polygones dont j'était sur qu'il se superposaient et j'ai print le résultat, je vous ai fait un petit screen du résultat, vous allez comprendre :)
https://image.noelshack.com/fichiers/2016/49/1481286584-collisions.png

si vous n'arrivez pas à lire :
https://code.empreintesduweb.com/11203.html

Des idées d'où vient le soucis ?

guyver2
guyver2
Niveau 10
09 décembre 2016 à 16:12:18

C'est pas exactement comme ca qu'il faut s'y prendre pour tester l'intersection precises de deux polynomes.
J'ai pas lu le code meme des fonctions mais rien que le nom des fonctions et les commentaires expliquent un peu ce que tu essayes de faire. En gros tu cherches si au moins un des points d'un polynome 1 se trouvent dans le polynome 2.
Rien que cette hypothese est fausse (voir image ci dessous)
https://image.noelshack.com/fichiers/2016/49/1481295271-inter.png

La bonne maniere de faire c'est de chercher les intersections entre chaque paire de segments de tes deux polynomes.

Il existe plein de ressources sur le web pour faire ca. Notament celle ci, avec une implem en python avec numpy :
http://stackoverflow.com/questions/3252194/numpy-and-line-intersections
Si tu t'en sers, penses juste a bien verifier que les lignes ne sont pas paralleles.
Comme dit un des commentaires :
Also, remember to check to see if denom is zero, otherwise you'll get a division by zero error. (This happens if the lines are parallel.)

Coeugniet
Coeugniet
Niveau 9
09 décembre 2016 à 16:58:48

Le 09 décembre 2016 à 16:12:18 guyver2 a écrit :
C'est pas exactement comme ca qu'il faut s'y prendre pour tester l'intersection precises de deux polynomes.
J'ai pas lu le code meme des fonctions mais rien que le nom des fonctions et les commentaires expliquent un peu ce que tu essayes de faire. En gros tu cherches si au moins un des points d'un polynome 1 se trouvent dans le polynome 2.
Rien que cette hypothese est fausse (voir image ci dessous)
https://image.noelshack.com/fichiers/2016/49/1481295271-inter.png

La bonne maniere de faire c'est de chercher les intersections entre chaque paire de segments de tes deux polynomes.

Il existe plein de ressources sur le web pour faire ca. Notament celle ci, avec une implem en python avec numpy :
http://stackoverflow.com/questions/3252194/numpy-and-line-intersections
Si tu t'en sers, penses juste a bien verifier que les lignes ne sont pas paralleles.
Comme dit un des commentaires :
Also, remember to check to see if denom is zero, otherwise you'll get a division by zero error. (This happens if the lines are parallel.)

Sans integration de bibliotheque c'est pas faisable de detecter la collision entre deux polygones ?
je l'ai pas préciser mais j'ai pas le droit, c'est un programme pour un projet universitaire :s
par contre le cas que tu m'a dessiner je l'avais déjà prévu et il n’appraitera jamais de par la vitesse de mon personnage inférieur à toute les autres largeur/hauteur des hitbox du programme, la hitbox de mon personnage est faite tel que un sommet rentre obligatoirement a l'interieur des autres hitbox du jeu avant de les transpercer

FreddyCouscous
FreddyCouscous
Niveau 10
09 décembre 2016 à 17:06:36

J'ai regardé 10s parce que j'ai pas le temps, mais tu appelles deux fois la même fonction avec les mêmes arguments.

    for p in poly_1:
        if interieur(p, poly_1):
            return True
    for p in poly_2:
        if interieur(p, poly_1):
            return True
    return False
Message édité le 09 décembre 2016 à 17:07:28 par FreddyCouscous
guyver2
guyver2
Niveau 10
09 décembre 2016 à 17:09:06

donc je ne peut pas l'utiliser car mes plateformes, mon personnages on des côter paralléle,

C'est pas un soucis, c'est juste un cas particulier a tester.

Si tes objets et persos sont des boites rectangulaire, ou au moins assimilables a des boites rectangulaires, alors le calcul d'intersection devient trivial, sans avoir a penser tous les cas possibles de polynomes.

https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
https://martin-thoma.com/how-to-check-if-two-line-segments-intersect/

Coeugniet
Coeugniet
Niveau 9
09 décembre 2016 à 17:20:12

Le 09 décembre 2016 à 17:06:36 FreddyCouscous a écrit :
J'ai regardé 10s parce que j'ai pas le temps, mais tu appelles deux fois la même fonction avec les mêmes arguments.

    for p in poly_1:
        if interieur(p, poly_1):
            return True
    for p in poly_2:
        if interieur(p, poly_1):
            return True
    return False

Je me deteste...

    for p in poly_1:
        if interieur(p, poly_2):
            return True
    for p in poly_2:
        if interieur(p, poly_1):
            return True
    return False

IT WORKS !
merci et putin ce que je suis con x)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment