Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème Line2D java

    9 mai 2021 à 16:09:30

    bonjour,

    je débute en java et j'en suis à la création d'un petit programme avec Graphics2D. je rencontre un problème lorsque je tente de modifier les points d'une Line2D déjà créée qui reçois en paramètre des point2D. je peux modifier la valeur des points mais les valeur P1 et P2 pour la Line2D ne suis pas.

    ci dessous un petit code qui illustre mon problème :

    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    
    
    public class ProblemLigne{
    	
    	public void printLigne(Line2D.Double line, String nom) {
    		System.out.println(nom+"[ " + line.x1+ ", " + line.y1+ " ]"+"[ " + line.x2+ ", " + line.y2+ " ]" );
    	}
    	public void printPoint(Point2D.Double point, String nom) {
    		System.out.println(nom+"[ " + point.x + ", " + point.y + " ]" );
    	}
      public static void main(String[] args) {
    	  ProblemLigne t = new ProblemLigne();
    	  	Point2D.Double point1 =new Point2D.Double(50,0);
    		Point2D.Double point2 =new Point2D.Double(256,256);
    		
    		Line2D.Double ligneTest=new Line2D.Double(point1,point2);
    		t.printPoint(point1, "point1");
    		
    		t.printLigne(ligneTest, "lignetest");
    		
    		point1.setLocation(20, 150);
    		t.printPoint(point1, "point1 modifié");
    		t.printLigne(ligneTest, "lignetest");
    
    
      }
    }

    le résultat donne :

    point1[ 50.0, 0.0 ]
    lignetest[ 50.0, 0.0 ][ 256.0, 256.0 ]
    point1 modifié[ 20.0, 150.0 ]
    lignetest[ 50.0, 0.0 ][ 256.0, 256.0 ]

    on peut voir que point1 est modifié mais pas la valeur des points de la ligne. je dois mal déclarer quelque chose mais je ne trouve pas. avez vous une idée?

    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2021 à 20:36:31

      Bonjour,

      Tout fonctionne correctement. Ce que tu observes, c'est que la ligne ne stocke pas les points mais juste les coordonnées.

      Et heureusement. Ce que tu essayes de faire, modifier une ligne en modifiant les paramètres utilisés pour l'initialiser, ça s'appelle un "effet de bord". C'est une grosse source de bugs, à éviter au maximum.

      Si tu veux modifier la ligne, il faut le faire sur l'objet ligneTest directement.

      • Partager sur Facebook
      • Partager sur Twitter
        9 mai 2021 à 22:48:22

        merci beaucoup pour ta réponse!

        si je comprends bien la définition de l'effet de bord de Wikipedia, j'ai  plein de mes méthode void qui en font. il faut les éviter a tous prix ?

        Et donc cela veux dire qu'on ne peux pas créer des lignes à partir d'un tableau de point sous peine, à chaque modification de point, d'aller retrouver toute les lignes qui l'utilise pour les mettre à jour ?

        • Partager sur Facebook
        • Partager sur Twitter

        problème Line2D java

        × 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