Processing collisions - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 33 sur 33

Processing collisions



  1. #31
    invite6c250b59

    Re : Processing collisions


    ------

    Ceci risque effectivement de ne pas marcher:
    Code:
    void TestCollision(){
    
    
    void TestCollision(){

    ...pourquoi ne pas mettre le code précédent, qui était correct selon ce que tu disais?


    PS: C'est bien d'envoyer ton code sous le format demandé. C'est mal de poster à quelques minutes d'intervalles. C'est très bien d'ajouter autant d'information que possible quand tu décris ton problème. C'est très mal de faire porter sur autrui ta responsabilité personnelle envers tes études.

    -----

  2. #32
    invite6486d7bd

    Re : Processing collisions

    Il vous manque une fonction qui teste si un rectangle intersecte avec un autre rectangle (vu que vous allez devoir probablement faire ce test plusieurs fois, il faut impérativement créer une fonction, pour ne pas rallonger le code, le rendre illisible etc, etc (je ne reviens pas dessus)).
    Vous pouvez l'appeler RectangleIntersecteRectangle par exemple.

    Les paramètres à passer à la fonction sont les coordonnées qui définissent les deux rectangles à tester.
    Sachant qu'il suffit de 2 points pour définir 1 rectangle droit (qui n'est pas un trapèze, et c'est votre cas), vous pouvez passer 4 points à cette fonction (il y a d'autres manières de définir un rectangle, mais on va faire simple et supposer qu'on a besoin de deux points : Le point situé gauche/bas. et le point situé droite/haut.

    1 point, c'est 2 valeurs : x et y
    Donc vous devez passer 8 valeurs à cette fonction.

    Cette fonction doit renvoyer true si il y a intersection et false sinon.

    Soit les points du rectangle 1 :
    Point 1 : x1,y1 (Point Gauche/Bas)
    Point 2 : x2,y2 (Point Droite/Haut)
    Soit les points du rectangle 2 :
    Point 1 : x3,y3 (Point Gauche/Bas)
    Point 2 : x4,y4 (Point Droite/Haut)

    Pour faire un test sans se poser des questions métaphysiques, sans optimisation :

    On construit les 2 points manquants du rectangle 1(On a passé à la fonction les 2 points qui définissent le rectangle, mais on a besoin de 4 points).
    Le rectangle 1, c'est celui que vous voulez, "le parachute" ou "le camion", ça ne change rien.

    Pour le rectangle 1 :
    On part des points connus :
    Point 1 : x1,y1 (Point Gauche/Bas)
    Point 2 : x2,y2 (Point Droite/Haut)
    On en déduit les points inconnus :
    Point 3 : x1,y2 (point Gauche/Haut)
    Point 4 : x2,y1 (point Droite/Bas)

    On a donc les 4 points définissant le rectangle 1.
    On va vérifier si ces 4 points se trouvent dans le rectangle 2.
    Si au moins 1 de ces 4 points se trouve dans le rectangle 2, alors le rectangle 1 intersecte avec le rectangle 2.

    Il est inutile de vérifier si les points du rectangle 2 se trouvent dans le rectangle 1, si le rectangle 1 intersecte le rectangle 2, c'est réciproque...

    Il nous faut donc une deuxième fonction (vu qu'on va faire 4 tests, car il y a 4 points à tester, et qu'on ne va pas réécrire le test pour finir avec un source façon saucisson ())
    On peut appeler cette nouvelle fonction PointDansRectangle().

    Il faut passer les paramètres suivant à cette fonction :
    La coordonnée du point à tester : x,y
    Les deux coordonnées des deux points définissant le rectangle pour lequel on va tester si le point se trouve à l'intérieur : x1,y1 et x2,y2
    Cette fonction doit renvoyer true si le point se trouve dans le rectangle et false sinon.
    Le test est très simple :
    Pour que le point x,y se trouve dans le rectangle (ou sur son bord), il faut que x>=x1 et x<=x2 et y>=y1 et y<=y2 (Voir la remarque (1) plus bas)

    A noter que quand je dis ici, x,y, ou x1,y1 ou x2,y2, ce sont des variables définies uniquement dans la fonction, elles ne sont pas les variables de même nom qu'on peut trouver dans le code appelant la fonction (ou définies globalement, selon les langages),
    Plusieurs fonctions peuvent définir des variables de même nom en paramètre.

    Donc maintenant pour terminer avec la fonction RectangleIntersecteRectangle() :

    Sans passer par des tableaux, on teste si le point 1 se trouve dans le rectangle 2, puis si ce n'est pas le cas on teste si le point 2 se trouve dans le rectangle 2, puis si ce n'est pas le cas on teste si le point 3 se trouve dans le rectangle 2, puis si ce n'est pas le cas on teste si le point 4 se trouve dans le rectangle 2.

    Ce qui revient au test suivant :
    Si PointDansRectangle(x1,y1, x3,y3, x4,y4) OU PointDansRectangle(x2,y2, x3,y3, x4,y4) OU PointDansRectangle(x1,y2, x3,y3, x4,y4) OU PointDansRectangle(x2,y1, x3,y3, x4,y4) alors true sinon false

    Remarque (1)
    A noter également, que ces indications ne sont valables telles qu'elles que dans le cas où les coordonnées en bas de l'écran d'affichage sont les plus petites (y=0 serait le bas de l'écran) .
    Si ce n'est pas le cas, il faut inverser le test :
    Pour que le point x,y se trouve dans le rectangle (ou sur son bord), il faut que x>=x1 et x<=x2 et y>=y2 et y<=y1

  3. #33
    invite6486d7bd

    Re : Processing collisions

    Citation Envoyé par LeMulet
    Il est inutile de vérifier si les points du rectangle 2 se trouvent dans le rectangle 1, si le rectangle 1 intersecte le rectangle 2, c'est réciproque...
    Correctif :
    Ca dépend...
    Sinon, si vous voulez un test "béton", testez aussi si les 4 points du rectangle 2 sont dans le rectangle 1.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Programmation sur processing
    Par inviteb96932ce dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 21/02/2018, 17h07
  2. Besoin d'aide Processing ISN
    Par invite9ffd50f3 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 04/05/2017, 19h02
  3. Processing writer
    Par invite2b1b487a dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 11/12/2015, 23h07
  4. Word Processing,
    Par invite2800a7c8 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 09/08/2015, 20h45
  5. Probleme processing
    Par invite73cc98a5 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 16/03/2015, 18h49