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

avec Java Discussion :

Création d'ovales aléatoires


Sujet :

avec Java

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    car mon code ne donne pas de resultat ca tourne sans rien
    pour ta suggestion comment on le fait
    merci

  2. #22
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Pour ne pas me répéter encore un fois : http://www.developpez.net/forums/d13...s/#post7255539

  3. #23
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    j utilise getbounds qui récupère les limites du rectangle donc j ai pas besoin du centre pour ca


    pas d autres solutions

  4. #24
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,
    je pensais avoir géré les chevauchements avec les bords mais j'avais fait une petite erreur.
    Comme tu peux le voir, il suffit d'enlever le diamètre aux valeurs possibles de x et de y qui représentent dans mon exemple le coins supérieur gauche des cercles.


    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
    import javax.swing.*;
    import java.util.*;
    import java.awt.geom.*;
    import java.awt.*;
    
    public class CercleRandom extends JPanel {
    
    
    	ArrayList<Ellipse2D.Double> listCercles = new ArrayList<Ellipse2D.Double>();
    	int nombreDeCercles = 100;
    
    	public static void main(String[] args) {
    		JFrame f = new JFrame();
    		CercleRandom c = new CercleRandom();
    		f.setSize(600,600);
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.add(c,BorderLayout.CENTER);
    		f.setVisible(true);
    	}
    	
    	public CercleRandom() {
    		double x,y;
    		double rayon = 20;
    		x = Math.random()*(600-2*rayon);
    		y = Math.random()*(578-2*rayon);
    		Ellipse2D.Double temp;
    		boolean ok = false;
    		listCercles.add(new Ellipse2D.Double(x,y,2*rayon,2*rayon));
    		while ( listCercles.size()<nombreDeCercles) {
    			x = Math.random()*(600-2*rayon);
    			y = Math.random()*(578-2*rayon);
    			temp = new Ellipse2D.Double(x,y,2*rayon,2*rayon);
    			for (int j=0; j< listCercles.size();j++) {
    				if (!temp.intersects(listCercles.get(j).getBounds2D())) {
    					ok = true;
    				}
    				else {
    					ok = false;
    					break;	
    				}
    			}
    			if (ok)
    				listCercles.add(temp);
    			
    		}
    	}
    	
    	public void paintComponent(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g.create();
    		for (int i=0; i < nombreDeCercles;i++) {
    			g2.fill(listCercles.get(i));
    		}
    	}
    }

  5. #25
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    merci
    ca marche pas encore suite a plusieurs run les cercles sortent de la fenetre
    en faite ca marche sur des mac non windows je sais pas pourquoi?
    merci

  6. #26
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    ca marche pas les cercles depassent la fenetre ???

  7. #27
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Windows ou mac c'est kifkif avec un code si simple le problème n'est pas la.

    Il n'est d'ailleurs nulle part, le code il fonctionne exactement comme il doit.

    Pour t'en rendre conte par toi même regarde si les cercles dépassent de la zone bleu qui fait 600x578...

    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
     
    import javax.swing.*;
    import java.util.*;
    import java.awt.geom.*;
    import java.awt.*;
     
    public class CercleRandom extends JPanel {
     
     
    	ArrayList<Ellipse2D.Double> listCercles = new ArrayList<Ellipse2D.Double>();
    	int nombreDeCercles = 100;
     
    	public static void main(String[] args) throws Exception {
    		JFrame f = new JFrame();
    		CercleRandom c = new CercleRandom();
    		f.setSize(1024,1024);
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.add(c,BorderLayout.CENTER);
    		f.setVisible(true);
    	}
     
    	public CercleRandom() throws Exception {
    		double x,y;
    		double rayon = 20;
    		x = Math.random()*(600-6*rayon)+2*rayon;
    		y = Math.random()*(578-6*rayon)+2*rayon;
    		Ellipse2D.Double temp;
    		boolean ok = false;
    		listCercles.add(new Ellipse2D.Double(x,y,2*rayon,2*rayon));
    		int attempt = 0;
    		while ( listCercles.size()<nombreDeCercles) {
    			x = Math.random()*(600-6*rayon)+2*rayon;
    			y = Math.random()*(578-6*rayon)+2*rayon;
    			temp = new Ellipse2D.Double(x,y,2*rayon,2*rayon);
    			for (int j=0; j< listCercles.size();j++) {
    				if (!temp.intersects(listCercles.get(j).getBounds2D())) {
    					ok = true;
    				}
    				else {
    					ok = false;
    					break;	
    				}
    			}
    			if (ok)
    				listCercles.add(temp);
     
    			// Si jamais la boucle ne finit pas car impossible de mettre encore des ovales alors on evite une boucle infinie
    			if (attempt++>=1000) throw new Exception("too much attempt without a solution");
     
    		}
    	}
     
    	public void paintComponent(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g.create();
    		g.setColor(Color.BLUE);
    		g.fillRect(0,0, 600, 578);
    		g.setColor(Color.BLACK);
    		for (int i=0; i < nombreDeCercles;i++) {
    			g2.fill(listCercles.get(i));
    		}
    	}
    }
    Maintenant a toi d'essayer de comprendre pourquoi tu penses que ca ne marche pas

  8. #28
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    oui je suis d accrod avec toi mais qd je remet setSize(600,600) les bord de la fenetre vient sur la zone bleu

  9. #29
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Dans ce cas, réduis ta zone OU augmentes la taille de la fenêtre (avec un penchant pour la 2 ème solution).

  10. #30
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,
    Le problème vient du fait que si tu définies une JFrame de 600x600, ça comprend le bandeau du haut ou il y a le bouton close. C'est pour cela que j'ai défini un JPanel avec une hauteur plus petite afin que sa taille corresponde à l'espace libre du JFrame.

    Tu définies un JPanel de 600x600, et tu calcules 600-2xR alors que ta fenêtre n'affiche que 600x578 avec donc un Max de 578-2x. Donc ton cercle est susceptible de dépasser en bas.

  11. #31
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    merci c'est ce que j'ai fait sur linux et windows, mais sur un mac ça dépasse rien du tout.
    merci beaucoup

  12. #32
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    je veux integrer la methode cerclerandom
    dans une classe où on définit le nombre de cercle et leurs rayons sur une fenetre de dialogue

  13. #33
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Rien de plus simple :

    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
    115
    116
    117
     
    import javax.swing.*;
    import java.util.*;
    import java.awt.geom.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class DemoCercleRandom extends JFrame implements ActionListener{
     
     
    	ArrayList<Ellipse2D.Double> listCercles = new ArrayList<Ellipse2D.Double>();
    	int nombreDeCercles = 20;
    	int rayon= 30;
    	JTextField textNombreDeCercles = new JTextField(5);
    	JTextField textRayonDesCercles = new JTextField(5);
    	JButton bouton = new JButton("Rafraichir");
    	CercleRandom c;
     
     
     
    	public static void main(String[] args) throws Exception {
    		DemoCercleRandom D = new DemoCercleRandom();
    	}
     
     
    	public DemoCercleRandom() {	
     
     
    		//setSize(1024,1024);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel panelNord = new JPanel();
    		panelNord.add(new JLabel("Nombre de cercles"));
    		panelNord.add(textNombreDeCercles);
    		panelNord.add(new JLabel("Rayon des cercles"));
    		panelNord.add(textRayonDesCercles);
    		panelNord.add(bouton);
    		bouton.addActionListener(this);
    		add(panelNord, BorderLayout.NORTH);
    		textNombreDeCercles.setText(""+20);
    		textRayonDesCercles.setText(""+30);
    		try {
    		c = new CercleRandom();
    		add(c,BorderLayout.CENTER);
    		}
    		catch(Exception e) {
    		}
    		pack();
    		setVisible(true);
    	}
     
     
    	public void actionPerformed(ActionEvent e) {
    		nombreDeCercles = Integer.parseInt(textNombreDeCercles.getText());
    		rayon = Integer.parseInt(textRayonDesCercles.getText());
    		listCercles.clear();
    		c.setVisible(false);
    		this.remove(c);
    		//try {
    			c = new CercleRandom();
    			add(c,BorderLayout.CENTER);
    		/*}
    		catch(Exception a) {
    			System.out.println("erreur");
    		}*/
    		c.setVisible(true);
    	}
     
    	class CercleRandom extends JPanel {
     
     
    		public CercleRandom() {
    			double x,y;
    			boolean bool = false;
    			setPreferredSize(new Dimension(600,600));
    			x = Math.random()*(600-2*rayon);
    			y = Math.random()*(600-2*rayon);
    			Ellipse2D.Double temp;
    			boolean ok = false;
    			listCercles.add(new Ellipse2D.Double(x,y,2*rayon,2*rayon));
    			int attempt = 0;
    			while ( listCercles.size()<nombreDeCercles && !bool) {
    				x = Math.random()*(600-2*rayon);
    				y = Math.random()*(600-2*rayon);
    				temp = new Ellipse2D.Double(x,y,2*rayon,2*rayon);
    				for (int j=0; j< listCercles.size();j++) {
    					if (!temp.intersects(listCercles.get(j).getBounds2D())) {
    						ok = true;
    					}
    					else {
    						ok = false;
    						break;	
    					}
    				}
    				if (ok)
    					listCercles.add(temp);
     
    				// Si jamais la boucle ne finit pas car impossible de mettre encore des ovales alors on evite une boucle infinie
    				if (attempt++>=10000) {
    					JOptionPane.showMessageDialog(this,"Trop d'essais sans trouver de solutions, changez les parametres.");
    					bool = true;
    				}
     
    			}
    		}
     
    		public void paintComponent(Graphics g) {
    			Graphics2D g2 = (Graphics2D) g.create();
    			g.setColor(Color.BLUE);
    			g.fillRect(0,0, 600, 600);
    			g.setColor(Color.BLACK);
    			for (int i=0; i < nombreDeCercles;i++) {
    				g2.fill(listCercles.get(i));
    			}
    		}
    	}
     
    }

  14. #34
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    merci
    j'ai une question comment on peut faire pour que ces cercles une intensité (du blanc vers le noirs sur plusieurs niveaux de gris)au lieu d 'une couleur (RGB)

  15. #35
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    En utilisant une couleur rgb dont chaque composante est égales aux autres...

    0,0,0 = noir
    127,127,127 = gris
    255,255,255 = blanc.

  16. #36
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    il y a une methode qui fait cela?

  17. #37
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Une méthode qui fait quoi ? Créer une couleur ? Oui le constructeur de la classe color...

    http://docs.oracle.com/javase/1.4.2/...ml#Color(float, float, float)

  18. #38
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Une méthode qui fait quoi ? Créer une couleur ? Oui le constructeur de la classe color... par exemple.

  19. #39
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 58
    Points : 13
    Points
    13
    Par défaut
    une méthode qui permet de donner a ces cercles une intensité (du blanc vers le noirs) qui sera manipuler comme le nombre des cercles

  20. #40
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,
    Je ne suis pas sur d'avoir bien compris la question.....J'ai compris que tu voulais faire un dégradé????

    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
     
    import javax.swing.*;
    import java.util.*;
    import java.awt.geom.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class DemoCercleRandom extends JFrame implements ActionListener{
     
     
    	ArrayList<Ellipse2D.Float> listCercles = new ArrayList<Ellipse2D.Float>();
    	int nombreDeCercles = 20;
    	int rayon= 30;
    	JTextField textNombreDeCercles = new JTextField(5);
    	JTextField textRayonDesCercles = new JTextField(5);
    	JButton bouton = new JButton("Rafraichir");
    	CercleRandom c;
     
     
     
    	public static void main(String[] args) throws Exception {
    		DemoCercleRandom D = new DemoCercleRandom();
    	}
     
     
    	public DemoCercleRandom() {	
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel panelNord = new JPanel();
    		panelNord.add(new JLabel("Nombre de cercles"));
    		panelNord.add(textNombreDeCercles);
    		panelNord.add(new JLabel("Rayon des cercles"));
    		panelNord.add(textRayonDesCercles);
    		panelNord.add(bouton);
    		bouton.addActionListener(this);
    		add(panelNord, BorderLayout.NORTH);
    		textNombreDeCercles.setText(""+20);
    		textRayonDesCercles.setText(""+30);
    		try {
    		c = new CercleRandom();
    		add(c,BorderLayout.CENTER);
    		}
    		catch(Exception e) {
    		}
    		pack();
    		setVisible(true);
    	}
     
     
    	public void actionPerformed(ActionEvent e) {
    		nombreDeCercles = Integer.parseInt(textNombreDeCercles.getText());
    		rayon = Integer.parseInt(textRayonDesCercles.getText());
    		listCercles.clear();
    		c.setVisible(false);
    		this.remove(c);
    		c = new CercleRandom();
    		add(c,BorderLayout.CENTER);
    		c.setVisible(true);
    	}
     
    	class CercleRandom extends JPanel {
     
     
    		public CercleRandom() {
    			double x,y;
    			boolean bool = false;
    			setPreferredSize(new Dimension(600,600));
    			x = Math.random()*(600-2*rayon);
    			y = Math.random()*(600-2*rayon);
    			Ellipse2D.Float temp;
    			boolean ok = false;
    			listCercles.add(new Ellipse2D.Float((float)x,(float)y,2*rayon,2*rayon));
    			int attempt = 0;
    			while ( listCercles.size()<nombreDeCercles && !bool) {
    				x = Math.random()*(600-2*rayon);
    				y = Math.random()*(600-2*rayon);
    				temp = new Ellipse2D.Float((float)x,(float)y,2*rayon,2*rayon);
    				for (int j=0; j< listCercles.size();j++) {
    					if (!temp.intersects(listCercles.get(j).getBounds2D())) {
    						ok = true;
    					}
    					else {
    						ok = false;
    						break;	
    					}
    				}
    				if (ok)
    					listCercles.add(temp);
    				if (attempt++>=10000) {
    					JOptionPane.showMessageDialog(this,"Trop d'essais sans trouver de solutions, changez les parametres.");
    					bool = true;
    				}
     
    			}
    		}
     
    		public void paintComponent(Graphics g) {
    			Graphics2D g2 = (Graphics2D) g.create();
    			g.setColor(Color.BLUE);
    			g.fillRect(0,0, 600, 600);
    			g.setColor(Color.BLACK);
    			Point2D center = new Point2D.Float(50, 50);
    			float[] dist = {0.0f,1.0f};
    			Color[] colors = {Color.WHITE, Color.BLACK};
    			for (int i=0; i < nombreDeCercles;i++) {
    				RadialGradientPaint p = new RadialGradientPaint(new Point2D.Float((float)(listCercles.get(i).getX()+listCercles.get(i).getWidth()/2),(float)(listCercles.get(i).getY()+listCercles.get(i).getHeight()/2)), (float)(listCercles.get(i).getWidth()/2)    ,dist, colors);
    				g2.setPaint(p);
    				g2.fill(listCercles.get(i));
    			}
    		}
    	}
     
    }

Discussions similaires

  1. [Débutant] Création de rectangle aléatoire
    Par Korithov dans le forum MATLAB
    Réponses: 0
    Dernier message: 28/04/2015, 15h51
  2. Création liste déroulante aléatoire + création de feuille
    Par dvdhag123 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 12/02/2015, 16h18
  3. Création de séquences aléatoires de chiffres avec conditions
    Par sigor16 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/02/2013, 11h35
  4. Création d'animations aléatoires
    Par Simon MARQUIS dans le forum Android
    Réponses: 1
    Dernier message: 06/07/2011, 11h31
  5. Création d'image aléatoire
    Par xoum89 dans le forum Débuter
    Réponses: 3
    Dernier message: 02/03/2011, 13h35

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