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 :

Je voudrais dessiner des cercles au lieu de carrès.


Sujet :

2D Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 75
    Par défaut Je voudrais dessiner des cercles au lieu de carrès.
    Salut tout le monde
    j'ai un petit soucis dans mon programme, je voudrai dessinet des cercle au lieu des carrè, pouvez vous m'aider SVP

    voici le code source :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    package sma.pkg2017;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.Arrays;
    import javax.imageio.ImageIO;
    import javax.swing.*;
     
    public class Carte extends JPanel {
     
        private int taille;
        private int echelle = 4;
        private int couleur_fourmi[];
        private int couleur_fourmi_nour[];
        private int couleur_nour[];
        private int couleur_obstacle[];
        private int couleur_fourmiliere[];
        private int couleur_pheromone[];
        private BufferedImage image = null;
        private Monde monde = null;
     
        public Carte(Monde monde) {
            this.monde = monde;
            this.taille = monde.taille;
     
            couleur_fourmi = new int[echelle * echelle];
            Arrays.fill(couleur_fourmi, Color.black.getRGB());
            couleur_fourmi_nour = new int[echelle * echelle];
            Arrays.fill(couleur_fourmi_nour, Color.red.getRGB());
            couleur_nour = new int[echelle * echelle];
            Arrays.fill(couleur_nour, Color.cyan.getRGB());
            couleur_obstacle = new int[echelle * echelle];
            Arrays.fill(couleur_obstacle, Color.DARK_GRAY.getRGB());
            couleur_fourmiliere = new int[echelle * echelle * 4];
            Arrays.fill(couleur_fourmiliere, Color.YELLOW.getRGB());
            couleur_pheromone = new int[echelle * echelle];
     
     
            setSize(echelle * taille, echelle * taille);
            image = new BufferedImage(echelle * taille, echelle * taille, BufferedImage.TYPE_INT_ARGB);
     
        }
     
        public void miseAJour() throws IOException {
            dessinCarte();
            dessinPheromones();
            dessinFourmis();
            dessinNourriture();
            dessinObstacle();
            dessinFourmiliere();
            repaint();
        }
     
        private void dessinCarte() throws IOException {
            Graphics sol = image.getGraphics();
            final BufferedImage image = ImageIO.read(new File("C:\\Users\\Admin123\\Desktop\\Naimi Projet\\projetNaimi\\ant.jpg"));
           // sol.drawImage(image, 0, 0, null);
            sol.drawImage(image, 0, 0, echelle * taille, echelle * taille, Color.yellow, this);
           // sol.setColor(Color.WHITE);
            //sol.fillRect(0, 0, echelle * taille, echelle * taille);
            //sol.fillOval(0, 0, echelle * taille, echelle * taille);
        }
     
        private void dessinFourmiliere() {
            if ((monde.fourmiliere.getPosition().getX() - 1 < 0) || (monde.fourmiliere.getPosition().getX() + 1 > taille) || (monde.fourmiliere.getPosition().getY() - 1 < 0) || (monde.fourmiliere.getPosition().getY() + 1 > taille)) {
                image.setRGB(monde.fourmiliere.getPosition().getX() * echelle, monde.fourmiliere.getPosition().getY() * echelle, echelle, echelle, couleur_fourmiliere, 0, echelle);
            } else {
                image.setRGB(monde.fourmiliere.getPosition().getX() * echelle - 2, monde.fourmiliere.getPosition().getY() * echelle - 2, echelle * 2, echelle * 2, couleur_fourmiliere, 0, echelle * 2);
     
            }
        }
     
        private void dessinFourmis() {
            for (Fourmi f : monde.fourmis.values()) {
                if (f.chercheFourmiliere()) {
                    image.setRGB(f.getPosition().getX() * echelle, f.getPosition().getY() * echelle, echelle, echelle, couleur_fourmi_nour, 0, echelle);
                } else {
                    image.setRGB(f.getPosition().getX() * echelle, f.getPosition().getY() * echelle, echelle, echelle, couleur_fourmi, 0, echelle);
                }
            }
        }
     
        private void dessinNourriture() {
            for (Nourriture n : monde.nourritures.values()) {
                image.setRGB(n.getPosition().getX() * echelle, n.getPosition().getY() * echelle, echelle, echelle, couleur_nour, 0, echelle);
            }
        }
     
        private void dessinObstacle() {
            for (Obstacle o : monde.obstacles.values()) {
                image.setRGB(o.getPosition().getX() * echelle, o.getPosition().getY() * echelle, echelle, echelle, couleur_obstacle, 0, echelle);
            }
        }
     
        private void dessinPheromones() {
            for (Pheromone p : monde.pheromones.values()) {
                //C+(255-C)*(1-R) =  255 - 255R +RC = 255 - R(255-C)
                Color phe = new Color((int) (255 - (p.getQuantite() / 100) * (255 - Color.BLUE.getRed())),
                        (int) (255 - (p.getQuantite() / 100) * (255 - Color.gray.getGreen())),
                        (int) (255 - (p.getQuantite() / 100) * (255 - Color.gray.getBlue())));
                Arrays.fill(couleur_pheromone, phe.getRGB());
                image.setRGB(p.getPosition().getX() * echelle, p.getPosition().getY() * echelle, echelle, echelle, couleur_pheromone, 0, echelle);
            }
        }
     
        @Override
        public void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, echelle * taille, echelle * taille, this);
        }
    }

    voici l'interface :
    je veux changer les 4 carré de nourriture par des cercles
    la fonction qui dessine la nouriture c'est : dessinNourriture

    Nom : Capture.PNG
Affichages : 235
Taille : 448,0 Ko

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Au lieu de modifier directement les pixels de l'image, ce qui va t'obliger à réécrire une fonction de dessin de disque (à base de cosinus et sinus), tu devrais utiliser les méthodes de dessin de la classe Graphics2D, dont tu récupéreras une instance par image.createGraphics() (ou par la classe Graphics comme tu fais déjà par getGraphics(). Tu verras que Graphics a une méthode fillOval() qui permet de dessiner un disque.

    Par ailleurs, il faut bien penser à libérer les ressources créées quand tu appelles getGraphics() ou createGraphics, en appelant la méthode dispose() sur l'instance de Graphics/Graphics2D
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 75
    Par défaut
    Monsieur drigo

    me demander de changer la methode n'est pas une reponse
    je voudrai une solution a ma methode et merci..

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ton code dessine un rectangle et tu veux un cercle à la place. Il va bien falloir changer ce code pour dessiner un cercle au lieu d'un rectangle. Je t'ai expliqué comment faire, quelle méthode utiliser pour ça, et comment l'utiliser (sur l'instance de Graphics). C'est ma réponse et c'est la solution à ton problème.

    Voici un exemple de principe :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Paint;
    import java.awt.image.BufferedImage;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    public class DessinerCercle {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		BufferedImage image = creerOuLireImage();
    		dessinerCercle(image, 100, 100, 50, Color.RED);
     
    		frame.add(new JLabel(new ImageIcon(image)));
     
    		frame.setSize(400, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    	private static void dessinerCercle(BufferedImage image, int xcentre, int ycentre, int rayon, Paint paint) {
     
    		Graphics2D graphics2d = image.createGraphics();
     
    		graphics2d.setPaint(paint);
    		graphics2d.fillOval(xcentre-rayon, ycentre-rayon, rayon*2, rayon*2);
     
    		graphics2d.dispose();
     
    	}
     
    	private static BufferedImage creerOuLireImage() {
    		BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
    		return image;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par soufianet Voir le message
    me demander de changer la methode n'est pas une reponse
    Il se trouve que si.

    Cependant, si tu es en train de faire un exercice scolaire qui te demande de ne pas utiliser l'API Java2D de haut niveau et de continuer a taper directement dans les pixels de l'image, alors joel.drigo t'as déjà aussi donné la réponse lors de sa première intervention. Dans ce cas, il te faut aller chercher ton livre de math discutant de l’équation d'un cercle et des formules de géométrie, ou des nombres complexes (au choix, c'est la même chose) et implémenter celles-ci de manière a remplir un disque au lieu de remplir un carre.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bouye Voir le message
    Dans ce cas, il te faut aller chercher ton livre de math discutant de l’équation d'un cercle et des formules de géométrie, ou des nombres complexes (au choix, c'est la même chose) et implémenter celles-ci de manière a remplir un disque au lieu de remplir un carre.
    Et d'éventuellement, d'aller regarder les algorithmes de Pitteway et van Aken, et Bresenham, appliqués aux cercles, et/ou de floodfill.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. [CImg] Problème pour dessiner des cercles
    Par Bloodista dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 24/09/2012, 11h07
  2. Dessiner des cercles en java
    Par nawal.02 dans le forum 2D
    Réponses: 3
    Dernier message: 28/03/2009, 15h51
  3. dessiner des cercles
    Par sky88 dans le forum Débuter
    Réponses: 4
    Dernier message: 27/08/2008, 23h28
  4. dessiner des cercles sur une image avec java
    Par inès83 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/05/2008, 17h34

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