Partage
  • Partager sur Facebook
  • Partager sur Twitter

Canvas tkinter

    5 septembre 2021 à 13:58:36

    Bonjour, je voudrais savoir si vous connaissez un moyen de savoir si deux lignes d'un canevas tkinter se touchent ? Attention, la méthode find_overlapping ne me semble pas convenir pour déterminer cela et c'est pourquoi je ne vois pas trop comment faire ...

    Cordialement,

    Lapin Lapinou.

    • Partager sur Facebook
    • Partager sur Twitter
      5 septembre 2021 à 15:02:05

      Est-ce que la méthode présentée sur stackoverflow conviendrait ?
      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        5 septembre 2021 à 17:05:28

        Bonjour,

        Et pourtant find_overlapping marche bien pour ça:

        si x et y sont les coordonnées d'un point de la 1ere ligne

        ligne_voisine = canvas.find_overlapping(x-1, y-1, x+1, y+1)

        • Partager sur Facebook
        • Partager sur Twitter
          5 septembre 2021 à 17:43:41

          Phil_1857 a écrit:

          Et pourtant find_overlapping marche bien pour ça:

          find_overlapping prend un rectangle en paramètre dont la ligne sera une des diagonales. Après on peut réduire le rectangle mais il va falloir itérer un certain nombre de fois pour balayer les points de la 1ère ligne.

          Résoudre le système d'équation me semble être la seule solution.

          • Partager sur Facebook
          • Partager sur Twitter
            5 septembre 2021 à 19:14:19

            Bien sur, ca cherche dans un rectangle centré sur xy

            Dans mon exemple, x et y sont un point connu de la 1ere ligne

            et donc si une autre ligne est proche de ce point, ça la trouve

            Apres, il faudrait que Lapinou nous donne le contexte exact ...

            -
            Edité par Phil_1857 5 septembre 2021 à 19:22:49

            • Partager sur Facebook
            • Partager sur Twitter
              5 septembre 2021 à 20:38:44

              Phil_1857 a écrit:

              et donc si une autre ligne est proche de ce point, ça la trouve

              Le contexte a été donné: on veut savoir si deux lignes se touchent.

              Ce qui revient à chercher l'intersection de 2 lignes (voire de 2 segments de lignes).

              Si on prend un des points de la première ligne et qu'overlapping ne trouve pas la seconde, il faudra recommencer avec le point suivant.

              • Partager sur Facebook
              • Partager sur Twitter
                6 septembre 2021 à 9:41:39

                Bonjour,

                Ah ok, effectivement, moi, je m'étais servi de find_overlapping pour savoir si un élément du canvas touchait une extrémité de la 1ere ligne (ou pas)

                Dans ce cas, il faut, comme tu le dis, chercher l'intersection de 2 segments (car 2 lignes infinies se croisent à moins d'être parallèles)

                Le lien proposé par Fred montre une fonction qui le fait

                Dans le temps, j'avais créé une fonction qui y ressemble, qui non seulement renvoyait les coordonnées du point d'intersection, mais aussi un statut

                du genre PARALLELES, LIGNE_LIGNE (le point est en dehors des segments), SEGMENT_SEGMENT (le point est sur les 2 segments),

                LIGNE_SEGMENT (le point est en dehors du 1er segment et sur le 2eme), etc ...

                Il y avait aussi un argument booléen nommé STRICT si l'on voulait tester que les segments se croisent vraiment et pas seulement que l'extrémité de l'un touche l'autre

                -
                Edité par Phil_1857 6 septembre 2021 à 9:48:34

                • Partager sur Facebook
                • Partager sur Twitter
                  29 septembre 2021 à 22:16:11

                  fred1599 a écrit:

                  Est-ce que la méthode présentée sur stackoverflow conviendrait ?


                  C'est possible, en calculant les coordonnées d'intersection des droites sur lesquelles sont portées les lignes et en vérifiant si le point d'intersection appartient à l'une des lignes. L'idéal aurait été une méthode implémentée dans tkinter mais merci !

                  Cordialement,

                  Lapin Lapinou.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Canvas tkinter

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown