Bonjour,
je veux créer des ovales (10 à 20 ) sur un applet d'une facon aléatoire et aussi qui ne se chevauchent pas avec JAVA si vous pouviez m aider
merci d avance
Version imprimable
Bonjour,
je veux créer des ovales (10 à 20 ) sur un applet d'une facon aléatoire et aussi qui ne se chevauchent pas avec JAVA si vous pouviez m aider
merci d avance
Est-ce l'algorithme qui te pose problème ou l'affichage de la solution de celui ci ?
l'algorithme car mon probleme maintenant c'est que les ovales se chevauchent et j arrive pas a matriser leur espacement??
voila le code
Code:
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
104public class MaFenetre extends JFrame implements ActionListener, ItemListener, FocusListener { static public final String[] nomCouleurs={"gris","noir","blanc","gris clair"}; static public final Color[] couleurs ={Color.gray, Color.black, Color.white, Color.LIGHT_GRAY}; public MaFenetre(){ setTitle ("ICS TESTING"); setSize (512,512); Container contenu = getContentPane(); //panneau des dessins panDes = new PanneauDessin(); contenu.add(panDes); panDes.setBackground(Color.gray); //panneau des commandes panCom = new JPanel(); contenu.add(panCom,"South"); //Choix de couleurs comboCoulFond = new JComboBox(nomCouleurs); panCom.add(comboCoulFond); comboCoulFond.addItemListener(this); //dimensions JLabel dim = new JLabel ("Dimensions");panCom.add(dim); txtLargeur = new JTextField ("50",3); txtLargeur.addActionListener (this); txtLargeur.addFocusListener (this); panCom.add(txtLargeur); txtHauteur = new JTextField ("20",3); panCom.add(txtHauteur); txtHauteur.addActionListener (this); txtHauteur.addFocusListener (this); //nombres JLabel nbs = new JLabel ("Nombres");panCom.add(nbs); cNombres = new JTextField ("5",2); cNombres.addActionListener(this); cNombres.addFocusListener(this); panCom.add(cNombres); //formes cOvale = new JCheckBox ("Ovale", true); panCom.add(cOvale); cOvale.addActionListener(this); cRectangle = new JCheckBox ("Rectangle"); panCom.add(cRectangle); cRectangle.addActionListener(this); } @Override public void focusGained(FocusEvent e) {} private void setLargeur() {String ch = txtLargeur.getText(); System.out.println("largeur " +ch); panDes.setLargeur(Integer.parseInt(ch)); } private void setHauteur() {String ch = txtHauteur.getText(); System.out.println("hauteur " +ch); panDes.setHauteur(Integer.parseInt(ch)); } private void setNombre() {String ch = cNombres.getText(); System.out.println("nombres d'objet " +ch); panDes.setNombre(Integer.parseInt(ch)); } @Override public void focusLost(FocusEvent e) { if (e.getSource() ==txtLargeur) {setLargeur(); System.out.println("perte focus largeur"); panDes.repaint(); } if (e.getSource() == txtHauteur) {setHauteur(); panDes.repaint(); } if (e.getSource() ==cNombres) {setNombre(); System.out.println("commbien voulez vous d'objet??"); panDes.repaint(); } } @Override public void itemStateChanged(ItemEvent e) { String couleur =(String)comboCoulFond.getSelectedItem(); panDes.setCouleur (couleur); } @Override public void actionPerformed(ActionEvent ev) { if(ev.getSource()==txtLargeur) setLargeur(); if(ev.getSource()==txtHauteur) setHauteur(); if(ev.getSource()==cNombres) setNombre(); if(ev.getSource()==cOvale) panDes.setOvale(cOvale.isSelected()); if(ev.getSource()==cRectangle) panDes.setRectangle(cRectangle.isSelected()); panDes.repaint(); } private PanneauDessin panDes; private JPanel panCom; private JComboBox comboCoulFond; private JTextField txtLargeur, txtHauteur, cNombres; private JCheckBox cOvale, cRectangle; }
Code:
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 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class PanneauDessin extends JPanel {public void paintComponent (Graphics g) {super.paintComponent(g); //if (ovale)for (int i = 0; i<10;i++) //for (int i = 0; i<10;i++){g.fillOval( x=(10+ (int) (Math.random()*i)+2*largeur),y=( 10+ (int) (Math.random()*i)+2*hauteur), largeur, hauteur);} //while((10+ (int) (Math.random()*i))<10+ (int) (Math.random()*(i+1))); if (ovale)for (int i = 1; i<=2;i++) {{g.fillOval(x= (int) (Math.random()*512)+i ,y=(int) (Math.random()*512)+i, largeur, hauteur);} // int n = 0; while(largeur+((int) (Math.random())*51*i*10)<largeur +(int) (Math.random())*51*(i+1)*10);} // if(rectangle) g.drawRect(10, 10, largeur, hauteur); if(rectangle) g.drawRect(10, 10, largeur, hauteur);} public void setRectangle (boolean b) {rectangle =b;} public void setOvale (boolean b) {ovale = b;} public void setLargeur(int l ){ largeur = l;} public void setHauteur ( int h ){hauteur = h;} public void setNombre (int n){nombre = n;} public void setCouleur (String c){for (int i =0; i<MaFenetre.nomCouleurs.length; i++) if (c==MaFenetre.nomCouleurs[i]) setBackground (MaFenetre.couleurs[i]);} private boolean rectangle = false , ovale =false; private int largeur =50, hauteur =50; private int nombre = 1; private int x = 10; private int y =10; }
Tiens comment vérifies tu si 2 ovales s'intersecte ? (ou se contiennent).
Mais ton code est beaucoup trop gros et contient trop de details inutiles tel que l'interface graphique qui n'a rien avoir avec l'algorithme en lui même.
Peux tu détailler juste ton algorithme ? même avec un pseudo-code.
j ai pas d'alogorithme car je n arrive pas avoir comment je peux le faire??
tu vois que mes x, y pour chaque ovale est aleatoire donc la question comment je peux faire pour que ces ovales ne se touchent pas
merci
Il faut simplement testé que pour chacun des ovales, aucun des autres ovales ne soient contenus ou n'intersectionne pas avec lui.
Donc naîvement placer des ovales aléatoirement, tout en testant si pas d'intersection jusque la. Et si interesection alors recommencer. Mais il est possible qu'il n'y ait pas de solution donc gerer le nombre d'itération si nécessaire.
je ne vois pas comment faire??
Un exemple très simple qui n'est surement pas très malin :
1) Placer un oval au hasard.
2) Vérifié que cette ovale n'intersectionne pas avec les ovales précédents sinon recommencer ou le placer ailleurs tant qu'il intersectionne.
3) Continuer jusqu'à placement des 20 ovales ou pas de solution.
(Garder éventuellement un nombre d'itération quelque part afin d'éviter d'avoir une boucle infinie si plus de solution ou pas de solutions possibles).
Tu peux éventuellement en imaginer d'autres... sinon voir dans le forum algorithmique éventuellement des gens beaucoup plus doué que moi à ce niveau la te trouveront une chouette solution.
merci beaucoup
Au plaisir.
Bonjour,
Démonstration de ce que propose WAX78 :
Code:
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; y = Math.random()*578; Ellipse2D.Double temp; boolean ok = false; listCercles.add(new Ellipse2D.Double(x,y,2*rayon,2*rayon)); while ( listCercles.size()<nombreDeCercles) { x = rayon + Math.random()*(600-2*rayon) - rayon; y = rayon + Math.random()*(578-2*rayon) - 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)); } } }
Oui (je ne l'ai pas testé) l'idée est la.
Mais ne pas oublier si on utilisais ce code qu'il pourrait boucler indéfiniment selon les cas...
Merci beaucoup
bonjour,
j ai peti souci encore je veux que les ovales ne depasse pas les bordure de la fenetre??
Il suffit simplement de vérifier que le centre du cercle (oval) se trouve bien dans la bordure, en soustrayant/ajoutant de la zone les diamètres de l'oval.
Donc si ta bordure est en 0,0,50,50 (x1, y1, x2, y2) et que ton oval est un cercle de 5 de rayon, alors il suffit de tester si le centre de l'oval est bien contenu dans 5,5,45,45 (x1, y1, x2, y2)
oui j ai essayé ca mais ca marche pas il faut voir s'il y une methose ineterscts avec les bordure de la fenetre???
Et tu peux donc nous poster le "code" qui ne marche pas pour voir ce que tu as fait ?!
je sais pas comment faireCode:
1
2 if (!temp.intersects(listCercles.get(j).getBounds2D()) && !temp.intersects(Rectangle2D())) { ok = true;
le code en rouge c pour que mes cercle ne s intersectionne pas avec le rectangle ????Code:
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
42public class ... { ...... private Rectangle rectangle; public static void main(String[] args) { ...... } public CercleRandom() { rectangle = new Rectangle (0,0,580,580); boolean ok = false; listCercles.add(new Ellipse2D.Double(x,y,2*rayon,2*rayon)); while ( listCercles.size()<nombreDeCercles) { x = rayon + Math.random()*(600-2*rayon) - rayon; y = rayon + Math.random()*(578-2*rayon) - 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()) || !temp.intersects(rectangle.getBounds2D())) { ok = true; } else {//System.out.println("cool1"); ok = false; break; } } if (ok) listCercles.add(temp); } } public void paintComponent(Graphics g) { } }
Tu as oubliés de retirer du rectangle le rayon de l'oval testé.
car mon code ne donne pas de resultat ca tourne sans rien
pour ta suggestion comment on le fait
merci
Pour ne pas me répéter encore un fois : http://www.developpez.net/forums/d13...s/#post7255539
j utilise getbounds qui récupère les limites du rectangle donc j ai pas besoin du centre pour ca
pas d autres solutions
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:
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
55import 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)); } } }
merci :ccool:
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
ca marche pas les cercles depassent la fenetre ???
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...
Maintenant a toi d'essayer de comprendre pourquoi tu penses que ca ne marche pasCode:
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)); } } }
oui je suis d accrod avec toi mais qd je remet setSize(600,600) les bord de la fenetre vient sur la zone bleu
Dans ce cas, réduis ta zone OU augmentes la taille de la fenêtre (avec un penchant pour la 2 ème solution).
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.
merci c'est ce que j'ai fait sur linux et windows, mais sur un mac ça dépasse rien du tout.
merci beaucoup
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
Bonjour,
Rien de plus simple :
Code:
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)); } } } }
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)
En utilisant une couleur rgb dont chaque composante est égales aux autres...
0,0,0 = noir
127,127,127 = gris
255,255,255 = blanc.
il y a une methode qui fait cela?
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)
Une méthode qui fait quoi ? Créer une couleur ? Oui le constructeur de la classe color... par exemple.
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
Bonjour,
Je ne suis pas sur d'avoir bien compris la question.....J'ai compris que tu voulais faire un dégradé????
Code:
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)); } } } }