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

Algorithmes et structures de données Discussion :

probleme pour afficher des ronds à l'endroit cliqué sur une grille


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut probleme pour afficher des ronds à l'endroit cliqué sur une grille
    Bonjour, j'ai de gros probleme pour afficher des ronds sur une grille à l'endroit où l'utilisateur clique exactement.

    Donc je fais en langage C avec opengl pour le graphisme, je travaille sur cette surface : http://img685.imageshack.us/img685/5029/boarda.png

    C'est une grille de 24*24 donc je travaille sur une matrice.

    j'ai une fonction gerant la souris qui dit en gros que si on clique sur avec le bouton gauche sur la surface, on appelle une fonction "put_plot" avec en argument les coordonnées x et y de la souris.
    Mais malheureusement, ma fonction pour traduire les coordonnées x ,y de la souris en indice de tableau semble être fausse, car ça ne marche vraiment pas toujours, je me demande où est ce que j'ai fais une erreur.

    Code C : 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
     
     
    // fonction qui place un plot dans le tableau
    void put_plot(int x,int y)
    {
      int i,j,w,h;
      x=x-41; // x - la bordure à gauche de l'ecran
      w=Ysize/24;
      h=Xsize/24;
      i=(y/h);
      j=(x/w);
     
      plateau.tab[i][j].t_plot.plot=1;
      plateau.tab[i][j].t_plot.x=x;
      plateau.tab[i][j].t_plot.y=y;
      plateau.tab[i][j].free=1;
     
    }
     
    // fonction qui dessine les plots à l'ecran correspondant aux cases du tableau possédant un plot
     
    void draw_plots(void)
    {
     
      int i,j,x,y;
     
      for(i=0,y=48;i<plateau.size;y+=23,i++) 
         {
          for(j=0,x=55;j<plateau.size;x+=23,j++)
    	{
    	  if((plateau.tab[i][j].t_plot.plot==1) 
    	     draw_circle(6,7,x,y);
    	}
     
         }
    }
     
    // fonction qui dessine un cercle
    void draw_circle(float radius,int slices,int x,int y)
    {
      while(radius>0)
        {
          glPushMatrix();
          glTranslatef(x,Ysize-y,0);
          glColor3d(255,0,0);
          float step=TWOPI/slices;
          float angle;
          glBegin(GL_LINE_LOOP);
          for(angle=0.0f;angle<TWOPI;angle+=step)
    	glVertex2f(cos(angle)*radius,sin(angle)*radius);
          glEnd();
          glPopMatrix();
          radius--;
        }
    }


    Ysize et Xsize etant la taille de ma fenêtre donc 600 et 600
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Bonsoir,

    les lignes "w=Ysize/24" et "h=Xsize/24" font des divisions entières (les 2 operandes étant des "int"). Tu as peut-être une perte de précision a ce niveau la.

    Essaye
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int i,j,w,h;
    x=x-41; // x - la bordure à gauche de l'ecran
    i=((y*24)/Xsize);
    j=((x*24)/Ysize);
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    malheureusement ça revient au même je suis vraiment bloqué sur ce probleme d'affichage : / Et je n'arrive vraiment pas à comprendre d'où vient mon probleme, je suis fatigué, je vais essayer d'y voir plus clair demain

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/01/2012, 13h42
  2. Débuter avec openGL, problem pour afficher des primitives
    Par kosa_nostra dans le forum OpenGL
    Réponses: 1
    Dernier message: 06/11/2011, 20h40
  3. [XL-2007] Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/09/2009, 17h12
  4. un probleme pour afficher des images AS3
    Par Flashouilleur dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 19/01/2009, 18h28
  5. Probleme pour afficher des printf dans le main
    Par Battosaiii dans le forum C
    Réponses: 4
    Dernier message: 13/03/2006, 10h58

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