IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

dessiner des connecteurs


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut dessiner des connecteurs
    Bonjour a tous
    j ai déjà poster ce problème sur ce forum , et on ma donner des piste mais sans résultat ,
    voila mon problème : je veux dessiner des flèches pour connecter des figure dans un application graphique , voila le code que j ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    g.drawLine(x, y, z, t);
    g.drawLine(z-7, t, z, t+7);
    g.drawLine(z+7, t, z, t+7);
    g.drawLine(z-7, t, z+7, t);
    mais ce code ne marche que c est la flèche est vertical .
    on ma proposer deux solutions : soit utiliser un contexte graphique temporaire , ou calculer l angle de l inclinaison de la flèche , je suis plus intéresser par la deuxième solution , mais je n y arrive pas , je sais pas comment utiliser l angle pour dessiner la pointe , je sais c'est plus un problème mathématique que de programmation , mais ca fait longtemps que je bloque sur ce point , alors votre aide sera la bienvenu ,
    et merci a tous

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Peut être que j ai pas bien expliquer le problème
    pour faire simple :
    supposons que je veux dessiner une croix :
    je dessine le premier segment de droite avec g.drawLine(x,y,z,t) (qui peux être vertical ,horizontal ou incliné ...)
    comment faire pour que la 2ème droite soit toujours perpendiculaire a la première (en faite il s agit de dessiner 2 droite perpendiculaires )
    j espère que j était plus claire , en attente de vous réponses
    merci.

  3. #3
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Je suppose que g est un objet Graphics.
    Dans ce cas, il faudrait commencer par donner des noms plus explicites à tes variables. Parce que x, y, z, t suppose un espace à 4 dimensions alors que dans ton cas, c'est x1, x2, y1, y2 soit un simple plan (2 dimensions).

    Ensuite, si tu cherches une droite perpendiculaire à une autre, tu dois te douter qu'il en existe une infinité.
    Pour en trouver une, il te suffit de calculer la pente de la droite d'origine. Soit (x2-x1)/(y2-y1). Pour obtenir une droite perpendiculaire, il te suffit d'ajouter (ou soustraire ca revient au meme) 0.5 à cette pente.

    A toi de gerer le cas y2=y1

    a+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    tout d abord merci a toi hwoarang , enfin une réponse
    (un segement de droite qui coupe un autre au milieu et qui est perpendiculaire, il n y on a qu'une je me suis malle exprimer) .
    et oui g est un objet graphique .
    supposons que j ai g.drawLine( x1 ,y1 ,x2 , y2) avec (x1,y1) et (x2,y2) les deux extrémités de mon segment de droite , je calcule la pente pt
    pt = (x1-x2)/(y1-y2) .
    la ou je ne comprend pas c est comment obtenir les deux point (x3,y3) et (x4,y4) pour dessiner la 2 emme droite g.drawLine(x3,y3,x4,y4) qui coupe la première au milieu donc a (y2-y1)/2.
    si tu pouvais m expliquer ca serai génial
    (je doit etre tres con ....!!!!!)

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par ssk2510 Voir le message
    je me trempe peut être mais une droite ( segment de droite) perpendiculaire a une autre il y on qu' une, non ?
    Non, il y en a une infinité. Prenons l'exemple (tres moche) :

    Ca c'est le segment de base (x1,x2,y1,y2) :
    Ce segment est perpendiculaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       |
       |
       |
    ------------------------------------------
       |
    Et ce segment aussi :
    Citation Envoyé par ssk2510 Voir le message
    supposons que j ai g.drawLine( x1 ,y1 ,x2 , y2) avec (x1,y1) et (x2,y2) les deux extrémités de mon segment de droite , je calcule la pente pt
    pt = (x1-x2)/(y1-y2) .
    la ou je ne comprend pas c est comment obtenir les deux point (x3,y3) et (x4,y4) pour dessiner la 2 emme droite g.drawLine(x3,y3,x4,y4)
    si tu pouvais m expliquer ca serai génial
    Maintenant que tu as pt, comme je l'ai mis dans le message precedent, il faut ajouter ou retirer 0.5 à la pente (ce qui correspond à une rotation de 90 degres donc à la pente d'une droite perpendiculaire).

    Maintenant que tu as cette pente, tu as une infinité de droites perpendiculaires. Chacune ayant une infinité de segments egalement perpendiculaires. Reste plus qu'a en choisir une. Comme j'imagine que tu veux représenter à l'ecran tes segments qui se croisent, on va etre malin et prendre une droite qui croise entre x1;y1 et x2;y2 (au milieu pour que ce soit plus joli).

    Comme tu dois le savoir, pour une droite y = a * x + b.
    Avec a qui correspond à la pente (qu'on a deja trouvé).
    Il faut donc trouver b pour avoir la droite. Comme on l'a dit, on va prendre la droite qui passe par le milieu du segment initial et qui devra repondre à :
    (y1+y2)/2 = a * (x1+x2)/2 + b
    => b = (y1+y2)/2 - a * (x1+x2)/2

    On a trouvé b. Maintenant qu'on a la droite, il ne reste plus qu'a choisir 2 points de celle ci qu'on va pouvoir tracer. La encore, on va essayer d'etre malin et de prendre 2 points qui seront autour du segment initial. Pour cela, on va prendre x3 = x1 et x4 = x2. Ne reste plus qu'a remplacer dans l'equation pour obtenir y3 et y4.

    Et je te laisse trouver la reponse si y1=y2.

    a+

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Je procèderais de la façon suivante



    1. Créer un contexte graphique temporaire au moyen de la méthode createGraphics des Graphics que tu as à disposition
    2. Appliquer une translation aux Graphics vers le point d'origine du connecteur
    3. Appliquer une rotation aux Graphics pour faire en sorte que le premier trait sera vertical.
    4. Tracer le premier trait
    5. Faire une translation des graphics vers le second trait
    6. Faire une rotation de 90° dans la bonne direction
    7. Dessiner la flèche.
    8. Détruire le contexte graphique temporaire au moyen de sa méthode dispose.



    Ceci te permettra de toujours dessiner en vertical à partir du point (0,0).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par ssk2510 Voir le message
    tout d abord merci a toi hwoarang , enfin une réponse
    (un segement de droite qui coupe un autre au milieu et qui est perpendiculaire, il n y on a qu'une je me suis malle exprimer) .
    et oui g est un objet graphique .
    supposons que j ai g.drawLine( x1 ,y1 ,x2 , y2) avec (x1,y1) et (x2,y2) les deux extrémités de mon segment de droite , je calcule la pente pt
    pt = (x1-x2)/(y1-y2) .
    la ou je ne comprend pas c est comment obtenir les deux point (x3,y3) et (x4,y4) pour dessiner la 2 emme droite g.drawLine(x3,y3,x4,y4) qui coupe la première au milieu donc a (y2-y1)/2.
    si tu pouvais m expliquer ca serai génial
    (je doit etre tres con ....!!!!!)
    j ai corriger ma première réponse !!!
    je vais essayer avec tous ca ;

  8. #8
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Pour obtenir une droite perpendiculaire, il te suffit d'ajouter (ou soustraire ca revient au meme) 0.5 à cette pente.
    Ceci est terriblement faux. Pour que deux droites soient perpendiculaires, il suffit que le produit de leurs pentes soit égal à -1. C'est une condition suffisante, mais pas nécessaire car il y a le cas des droites verticales qui n'ont pas de pente (et qui sont perpendiculaires à celles de pente nulle).

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    c tellement compliquer , moi j abandonne , mon bute est dessiner des flèches pour relier mes figures , a la manière d agroUML , avec la pointe qui suit l inclinaison , mais comment ils ont fait eux ...

  10. #10
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Oui, c'est un cas particulier. Je me suis trompé en generalisant.

    Si la pente de la premiere droite est (x2-x1)/(y2-y1) alors la pente de la 2e est (y2-y1)/(x1-x2).

    Désolé pour la confusion. Par contre, le cheminement pour trouver le reste est correct (sauf erreur )

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    les gens arrive a faire des super jeux en 3 D est moi je suis bloquer sur deux droites perpendiculaires , c est ca c pas grave alors ...

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Oui, c'est un cas particulier. Je me suis trompé en generalisant.

    Si la pente de la premiere droite est (x2-x1)/(y2-y1) alors la pente de la 2e est (y2-y1)/(x1-x2).

    Désolé pour la confusion. Par contre, le cheminement pour trouver le reste est correct (sauf erreur )
    donc en rajoute pas 0.5 ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par sinok Voir le message
    Je procèderais de la façon suivante



    1. Créer un contexte graphique temporaire au moyen de la méthode createGraphics des Graphics que tu as à disposition
    2. Appliquer une translation aux Graphics vers le point d'origine du connecteur
    3. Appliquer une rotation aux Graphics pour faire en sorte que le premier trait sera vertical.
    4. Tracer le premier trait
    5. Faire une translation des graphics vers le second trait
    6. Faire une rotation de 90° dans la bonne direction
    7. Dessiner la flèche.
    8. Détruire le contexte graphique temporaire au moyen de sa méthode dispose.



    Ceci te permettra de toujours dessiner en vertical à partir du point (0,0).
    merci a toi , ca va m éviter de faire tous ces calcules :
    alors c est j ai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void paintComponent(Graphics g){
       		super.paintComponent(g);
     
     
       			g.drawLine(x1, y1, x2, y2);
     
       			g2=g.create(x2, y2, 50, 50);
    }
    pourrai tu me donner les methodes a utilser pour la rotation de 90 ,car je viens de parcourir toutes les méthodes de la class Graphics sans succès(oui je suis null en anglais )
    ou doit je utiliser Graphics2dD au lieu de Graphics ?

  14. #14
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il te faut caster tes Graphics en Graphics2D pour ça.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. [Débutant] dessiner des carrés
    Par Dark-Lab dans le forum 2D
    Réponses: 13
    Dernier message: 27/08/2004, 10h50
  3. Réponses: 4
    Dernier message: 04/08/2004, 13h26
  4. [Dessin]dessiner des graphes
    Par mial dans le forum 2D
    Réponses: 4
    Dernier message: 27/04/2004, 19h51
  5. dessiner des graphiques
    Par mial dans le forum 2D
    Réponses: 6
    Dernier message: 26/04/2004, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo