slt
je cherche comment créer un macro pour tracer un nombre aléatoire de cercles de mêmes rayon! (voir fichier attaché)
slt
je cherche comment créer un macro pour tracer un nombre aléatoire de cercles de mêmes rayon! (voir fichier attaché)
Tu utilises Math.random() pour générer les coordonnées x et y du cercle.
Merci de penser au tagquand 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
bonjour,
des cercles qui ne se chevauchent bien je veux bien la solution car je cherche la même chose.
merci
Bonjour,
Voici une proposition simple qui teste si les carrés entourant les cercles se chevauchent. Le test est ainsi assez rapide.
On pourrait néanmoins faire mieux en utilisant Area. En effet la méthode intersects() de Area permet de tester la vraie forme et non le carré qui l'entoure.
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; 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)); } } }
Partager