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
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 ?
(Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
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 : 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 public 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 : 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 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.
(Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
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.
(Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Partager