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 :

Algorithme de Bresenham pour tracer un cercle (pixel en trop)


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut Algorithme de Bresenham pour tracer un cercle (pixel en trop)
    Bonjour, pourriez-vous me dire concernant l'algorithme de bresenham pourquoi quand on calcule la progression de l'erreur dans le cas 1 on passe de :


    erreur = 4x² + 4y² + 8x − 4y + 5 − R² + 8x + 12 à
    erreur = 4x² + 4y² + 8x − 4y + 5 − R² + 8x + 4

    pourquoi (là ou j'ai surligné) on passe de 12 à 4

    pareille pour le cas 2 ou on passe de :

    erreur = 4x² + 4y² + 8x − 4y + 5 − R² + 8x − 8y + 20
    erreur = 4x² + 4y² + 8x − 4y + 5 − R² + 8x − 8y + 4

    on passe de 20 à 4

    Dans le code ci-dessous on met donc e+=8x+4 et non e+=8x +12
    et dans e+=-8y on ne mais pas de constante je ne comprends pas pourquoi, puisque dans le cas 2 on vois que l'on a 8x-8y+20 ;

    Donc admettons que l'on mette 4 à 8x (8x+4) dans ce cas là il faudrait mettre a -8y : +16 pour retrouver le 20 au départ pour moi si on a 8x+12 alors pour -8y on devrait avoir -8y+8.

    Pourriez-vous m'expliquer ce qui justifie de mettre 8x+4 et -8y dans le code au lieu de 8x+12 et -8y+8

    De plus dans le code que voici je n'ai pas un cercle identique a celui de paint (voir image : Pièce jointe 193874) j'ai quelque pixel qui sont en trop quand j'ai des grands rayon supérieur à 32 des pixels en trop commence à apparaître pourriez-vous me dire de quoi ça vient. En vous remerciant par avance.

    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
     
    void line_bresenham(SDL_Surface* display,color c)
    {
     
      int x=0;
      int r=128, cx=128, cy=128;
      int y =r;
      int e=5-4*r;
     
      while(x<=y)
        {
          *((int*)display->pixels + x+ cx+display->w*(cy+y))=c; /*allume le pixel*/
     
          if(e>0)
    	{
    	  y--;
    	  e+=-8*y;
    	}
     
          x++;
          e+=8*x+4;
     
          SDL_Flip(display);
        }

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    là ou j'ai surligné
    Tu n'as pas surligné mais souligné.

    De quoi parles-tu ? Quels sont les cas 1 et 2 ?

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    salut,

    je pense qu'il parle de l'algo pour les arc de cercle de Bresenham

    la démonstration ce trouve sur cette page ci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Merci pour vos réponses

    Oui je parle bien de l'algorithme de bresenham.

    En utilisant le fait que 4m = 4x² + 4y² + 8x - 4y + 5-4R²,
    on obtient 4(m+1) = 4m + 8x + 12 = 4m + 8x + 4.

    Mais je ne comprends toujours pas pourquoi on passe de 8x+12 à 8x+4 qu'est-ce qui justifie cette transformation ?

    Pourriez-vous me dire aussi pourquoi mon code au dessus d'un rayon de 32 il y a des point en trop (voir l'image de mon premier commentaire).

    Merci par avance.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    salut

    d’après ce que je vois tu n'indique pas les indice de ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    4m<sub>i+1</sub>=4m<sub>i</sub>+8x<sub>i+1</sub>+4
    tu remplace 
    x<sub>i+1</sub> par xi+1
     
    on a donc 
    4m<sub>i+1</sub>=4m<sub>i</sub>+8(x<sub>i</sub>+1)+4
    => 4m<sub>i+1</sub>=4m<sub>i</sub>+8(x<sub>i</sub>)+8+4
    => 4m<sub>i+1</sub>=4m<sub>i</sub>+8x<sub>i</sub>+12
    j’espère que c'est plus simple comme cela

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Merci pour ta réponse rapide je vais étudier ça de près.

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

Discussions similaires

  1. Tracer une parabole avec l'algorithme de Bresenham
    Par hbx360 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 05/11/2015, 10h24
  2. Récupérer les coordonnées du curseur pour tracer une ligne ou un cercle
    Par benyouyou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/08/2015, 16h38
  3. algorithme de bresenham pour la détection de droite
    Par soumayacheikh dans le forum Images
    Réponses: 6
    Dernier message: 23/04/2010, 15h21
  4. Recherche de source pour tracer des codes barres
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/10/2004, 16h05
  5. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12

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