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

2D Java Discussion :

Détecter l'intérieur d'un arc


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Par défaut Détecter l'intérieur d'un arc
    Bonjour,

    je dispose d'un JComponent de 17*17 pixels où j'ai redéfinie la méthode paintComponent() pour dessiner un arc de cercle à l'intérieur de ce composant.

    J'arrive bien à dessiner mes deux types d'arc de cercle (en changeant le couleur) mais je n'arrive pas à détecter la zone à l'intérieur de mes deux arcs de cercles pour dessiner en blanc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    protected void paintComponent(Graphics g) {
         Graphics2D g2 = (Graphics2D g)
     
         // Activation de l'anti-aliasing
         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     
         // Dessin de l'arc de cercle extérieur de 1 pixel
         g2.setColor(Color.BLACK);
         g2.setStroke(new BasicStroke(1));
         g2.drawArc(0, -getHeight() - 1, getWidth()*2, getHeight()*2, 180, 90);
     
         // Dessin du deuxième arc de cercle de 4 pixels
         g2.setStroke(new BasicStroke(5));
         g2.setColor(new Color(102, 51, 0));
         Arc2D arc = new Arc2D.Float(2, -getHeight() - 1, getWidth()*2 - 2, getHeight()*2 - 2, 180, 90, Arc2D.OPEN);
         g2.draw(arc);
     
         // Application de la couleur blanche dans la zone formée par les
         // deux arcs de cercles...
         g2.setColor(Color.WHITE);
         // .... ???
         // .... ??? Comment peut-on faire ?
     
    }
    J'ai bien essayé de récupérer l'objet Shape du deuxième arc, de construire un polygone puis une aire pour appliquer ma couleur blanche à l'intérieur des deux arcs mais lorsque je récupère l'objet Shape du deuxième arc, il me prend pas en compte la taille de mon trait (g2.setStroke()...).

    Comment faire ?
    Avez-vous une idée ?

    Merci beaucoup,
    F.

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 051
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import java.awt.*;
    import javax.swing.*;
     
    public class A {
    	public static void main(String[] args) {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.add(new P());
    		f.setSize(200, 200);
    		f.setVisible(true);
    	}
    }
     
    class P extends JPanel {
    	@Override
    	protected void paintComponent(Graphics g) {
    	     Graphics2D g2 = (Graphics2D) g;
    	     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    	     g2.setStroke(new BasicStroke(5));
     
    	     g2.setColor(Color.WHITE);
    	     g2.fillArc(2, -getHeight() - 1, getWidth()*2 - 2, getHeight()*2 - 2, 180, 90);
     
    	     g2.setColor(new Color(102, 51, 0));
    	     g2.drawArc(2, -getHeight() - 1, getWidth()*2 - 2, getHeight()*2 - 2, 180, 90);
    	}
     
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Par défaut
    je ne vois pas la bordure extérieure dans ton code ?
    Je me trompe ?

    Merci,
    F.

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 051
    Par défaut
    Non tu ne te trompe pas.

    C'est que dans le code que tu donne, les deux arcs se confondent ! (De plus le second est dessiné par dessus le premier) J'ai donc supposer que le deuxième arc était une sorte de bordure. Je me suis visiblement trompé. Pourrais expliquer précisément la zone que tu veux récupérer ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Par défaut
    Salut,

    comme tu verras dans la capture d'écran joint à ce post (bord.png),
    il y a une première bordure extérieure foncée de 1 pixel et une bordure intérieure de 4 pixels.

    Je souhaite récupérer la partie bleue se trouvant à l'intérieur des deux arcs.
    Est-ce que tu comprends ce que je veux dire ?

    En tout cas, merci beaucoup.
    F.

    Nom : bord.png
Affichages : 73
Taille : 3,3 Ko

  6. #6
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 051
    Par défaut
    On voit vraiment pas grand chose sur ton screen, l'image est si petite, mais je ne vois comme partie bleu qu'un rectangle...

    Tu dit :
    Je souhaite récupérer la partie bleue se trouvant à l'intérieur des deux arcs.
    Mais tes deux arcs ont la même courbe, l'intersection de ces deux arcs est donc null.

    Mais je crois comprendre ce que tu souhaite, stp confirme ou infirme ma supposistion :

    Les deux arc on une partie qui se supperpose. Tu voudrais récupérer le rectangle dans lequel cette superpostion est inscrite (le rectangle bleu sur ton image) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détecter collision avec un arc de cercle
    Par FrankOVD dans le forum Mathématiques
    Réponses: 7
    Dernier message: 21/06/2012, 13h15
  2. Réponses: 1
    Dernier message: 11/12/2009, 15h34
  3. Détecter la collision, dessiner une flêche et un arc
    Par guitariste dans le forum JavaFX
    Réponses: 3
    Dernier message: 08/04/2009, 11h58
  4. Détecter Windows 2000 Professionnel
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/11/2006, 23h02
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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