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 :

Tracé de cercle & HashSet


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant en maths sup
    Inscrit en
    Novembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en maths sup

    Informations forums :
    Inscription : Novembre 2011
    Messages : 31
    Points : 15
    Points
    15
    Par défaut Tracé de cercle & HashSet
    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:

    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;
      }
    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?

    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.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Etudiant en maths sup
    Inscrit en
    Novembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en maths sup

    Informations forums :
    Inscription : Novembre 2011
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Je ne sais pas si j'ai été très clair dans mes questions, mais si quelqu'un pouvait au moins poster pour me dire qu'il n'a pas compris ce que je demandais ce serait sympa, merci !

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Bonjour,

    Citation Envoyé par Knightdead Voir le message
    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.
    Nope.

    Pour lire des trucs dans le même ordre qu'ils ont été insérés, il faut utiliser des List. Dans le cas présent je suggère ArrayList.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Homme Profil pro
    Etudiant en maths sup
    Inscrit en
    Novembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en maths sup

    Informations forums :
    Inscription : Novembre 2011
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réponse !

    J'ai bien avancé mais maintenant j'ai une autre question, y a-t-il un moyen d'ajouter un tableau à une ArrayList sans l'initialiser avant ?
    C'est à dire de réduire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	  ArrayList<int[]> testl = new ArrayList<int[]>();
    	  int[] don = {1,2};
    	  testl.add(don);
    en 2 lignes de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	  ArrayList<int[]> testl = new ArrayList<int[]>();
    	  testl.add({1,2});
    Ca fait environ 20 minutes que je cherche sans résultats!

    Et je ne suis pas sûr d'avoir compris ce qu'est l'autoboxing mais y a-t-il une façon avec et sans l'autoboxing ?

    Merci d'avance!

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Citation Envoyé par Knightdead Voir le message
    [...] y a-t-il un moyen d'ajouter un tableau à une ArrayList sans l'initialiser avant ?
    Seulement testl.add(new int[]{1,2});, ce qui n'est pas super lisible. Je suggère de s'en passer.

    Citation Envoyé par Knightdead Voir le message
    Et je ne suis pas sûr d'avoir compris ce qu'est l'autoboxing mais y a-t-il une façon avec et sans l'autoboxing ?
    L'autoboxing n'a rien à voir avec ça. L'autoboxing joue quand on jongle par exemple avec des int et des Integer ou des objets. Là ce n'est que des int, donc pas une question d'autoboxing.
    (À la limite tu pourrais remplacer les int[] par des List<Integer>, auquel cas tu remplacerais donc les int par des Integer et ça ferait intervenir l'autoboxing, mais je suppose que ce n'est pas l'idée.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Homme Profil pro
    Etudiant en maths sup
    Inscrit en
    Novembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en maths sup

    Informations forums :
    Inscription : Novembre 2011
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    D'accord, merci beaucoup pour ta réponse!

    Je demandais juste pour faire des tests rapidement, en ajoutant quelques int[] dans une liste et tester une fonction sur cette liste, je ne pense pas l'utiliser en temps normal de tout de façon.

    Ca y est mon rond tourne parfaitement en trajectoire circulaire, merci de ton aide!

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2015, 14h55
  2. Tracé Arc de cercle
    Par bartmanb dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/11/2009, 14h32
  3. Tracé d'images suivant un cercle
    Par Cyrilz dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 11/09/2009, 12h48
  4. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 17h55
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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