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

C Discussion :

Afficher une rosace


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut Afficher une rosace
    Bonjour.
    Je dois faire une rosace en C.
    Pour cela j'utilise la minilibx:
    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
    #include "mlx.h"
    #include <stdlib.h>
    #include "my.h"
    #define PI 3.14159
    #include <math.h>
     
    int	gere_key(int keycode, void *param)
    {
      param = 0;
      if (keycode == 65307)
        exit(1);
      return (0);
    }
     
    int	option1()
    {
      void		*mlx_ptr;
      void		*win_ptr;
      int		x;
      int		y;
      int		clr;
      int		nb;
      double	theta;
      int		r;
      int		angle;
     
      nb = 1000;
      mlx_ptr = mlx_init();
      win_ptr = mlx_new_window(mlx_ptr, 500, 500, "option1");
      angle = 0;
      clr = 0xFF0000;
      while (nb--)
        {      
          theta = PI * angle / 180;
          r = cos(3.5 * theta);
          x = 250 + r * cos(theta) * 1000;
          y = 250 + r * sin(theta) * 1000;
          r = r * 1000;
          mlx_pixel_put(mlx_ptr, win_ptr, x, y, clr);
          angle++;
          if (angle == 361)
    	angle = 0;
        }
      mlx_key_hook(win_ptr, gere_key, 0);
      mlx_loop(mlx_ptr);
      return (0);
    }
    theta sert a convertir l'angle en radian.

    Seulement au lieu d'avoir une rosace j'ai juste un point au milieu de ma fenetre et je ne comprend pas pourquoi.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ce genre de calculs doivent être réalisés sur des types à virgule flottante : float ou double.

    en effet :
    si r est entier, cos étant entre -1 et 1, r ne pourra prendre que des valeurs entière : -1, 0 ou 1, mais quasiment tout le temps 0.

    De plus les constantes peuvent aussi être typées, écrire
    n'est pas la même chose qu'écrire
    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
    int	option1()
    {
      void		*mlx_ptr;
      void		*win_ptr;
      double	x;
      double	y;
      int		clr;
      int		nb;
      double	theta;
      double	r;
      double	angle;
     
      nb = 1000;
      mlx_ptr = mlx_init();
      win_ptr = mlx_new_window(mlx_ptr, 500, 500, "option1");
      angle = 0.;
      clr = 0xFF0000;
      while (nb--)
        {      
          theta = PI * angle / 180.;
          r = cos(3.5 * theta);
          x = 250. + r * cos(theta) * 1000.;
          y = 250. + r * sin(theta) * 1000.;
          r = r * 1000.;
          mlx_pixel_put(mlx_ptr, win_ptr, x, y, clr);
          angle += 1.;
          if (angle > 360.)
    	angle = 0.;
        }
      mlx_key_hook(win_ptr, gere_key, 0);
      mlx_loop(mlx_ptr);
      return (0);
    }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut
    Merci bien.

    Ca marche nickel

    (je n'ai pas trouve le bouton regle)

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Et maintenant, un peu de programmation défensive pour consolider le tout:
    • Limitations de portée des variables
    • Variables déclarées const.

    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
    int	option1()
    {
      void		*mlx_ptr;
      void		*win_ptr;
      int		nb;
      int const clr = 0xFF0000;
      double	angle;
     
      nb = 1000;
      mlx_ptr = mlx_init();
      win_ptr = mlx_new_window(mlx_ptr, 500, 500, "option1");
      angle = 0.;
      while (nb--)
        {      
          double const theta = PI * angle / 180.;
          double const r = cos(3.5 * theta);
          double const x = 250. + r * cos(theta) * 1000.;
          double const y = 250. + r * sin(theta) * 1000.;
          /*r = r * 1000.; cette ligne est inutile, puisque r n'est plus lu avant sa prochaine modif*/
          mlx_pixel_put(mlx_ptr, win_ptr, x, y, clr);
          angle += 1.;
          if (angle > 360.)
    	angle = 0.;
        }
      mlx_key_hook(win_ptr, gere_key, 0);
      mlx_loop(mlx_ptr);
      return (0);
    }
    PS: mlx_loop() fait le nettoyage elle-même, ou bien manque-t-il un appel à une fonction genre mlx_clean() à la fin?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par bobbyy Voir le message
    Merci bien.

    Ca marche nickel

    (je n'ai pas trouve le bouton regle)
    C'est le bouton "résolu" en dessous du denier post

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  2. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13
  3. Afficher une valeur du context
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 13
    Dernier message: 28/04/2003, 13h49
  4. Afficher une buffer de pixel avec Direct3D
    Par Black_Daimond dans le forum DirectX
    Réponses: 4
    Dernier message: 27/12/2002, 22h18
  5. Copier et afficher une copie d'ecran
    Par Bobx dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2002, 22h20

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