Bonjour,
Je débute en Java et j'aurais aimé que vous répondiez à plusieurs de mes questions.
J'ai voulu pour m'entraîner en Java faire un programme, avec tout simplement un rond, qui tourne sur une trajectoire circulaire.
La partie graphique est très simple, mais je manque vraiment de connaissance pour la partie algorithmique.
Tout d'abord j'ai une fonction initCircle qui initialise les coordonnées d'un cercle en fonction d'un rayon dans un HashSet, j'ai utilisé l'algorithme de tracé de cercle d'Andres.
Seulement celui-ci fonctionne pour un octant de cercle, j'ai donc utilisé la symétrie pour faire un cercle entier, mais voilà le problème:
Si vous êtes attentifs vous remarquerez qu'en fait, j'ajoute bien les octants dans le bon ordre, mais certains vont être parcourus à l'envers, voyez vous une façon plus simple d'initialiser les coordonnées d'un cercle où dois-je faire une fonction pour inverser mes HashSets?
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 private HashSet<int[]> initCircle(int r){ HashSet<int[]> pixels = new HashSet<int[]>(), pixels2 = new HashSet<int[]>(), pixels3 = new HashSet<int[]>(), pixels4 = new HashSet<int[]>(), pixels5 = new HashSet<int[]>(), pixels6 = new HashSet<int[]>(), pixels7 = new HashSet<int[]>(), pixels8 = new HashSet<int[]>(); int x = 0; int y = r; int d = r - 1; while(y >= x) { pixels.add( new int[]{x, y}); pixels2.add( new int[]{y, -x}); pixels3.add( new int[]{y, x}); pixels4.add( new int[]{x, -y}); pixels5.add( new int[]{-x, -y}); pixels6.add( new int[]{-y, x}); pixels7.add( new int[]{-y, -x}); pixels8.add( new int[]{-x, y}); if (d >= 2*x) { d -= 2*x - 1; x ++; } else if (d < 2 * (r-y)) { d += 2*y - 1; y --; } else { d += 2*(y - x - 1); y --; x ++; } pixels.addAll(pixels2); pixels.addAll(pixels3); pixels.addAll(pixels4); pixels.addAll(pixels5); pixels.addAll(pixels6); pixels.addAll(pixels7); pixels.addAll(pixels8); } return pixels; }
Sinon y a-t-il une façon plus simple d'ajouter plusieurs HashSet à la suite que pixels.addAll(pixels1); etc.. ? D'ailleurs est-ce que celle-ci fonctionne ?
Merci d'avance !
Edit: J'ai une question de plus, est-ce que les valeurs s'ajoutent à la suite dans un HashSet ? Pour que je puisse ensuite les lire à la suite.
Partager