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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    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.

+ 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