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 :

Explication de l'algorithme de Bresenham


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Explication de l'algorithme de Bresenham
    Bonjour à tous !
    Pour un projet d'écoles je dois etre capable de tracer une droite dans n'importe quel sens et n'importe ou dans la fenetre. Du coup apres quelques recherche je suis tombé sur bresenham qui à l'air d'etre un algo top pour faire des tracer en tout genre ! Sauf seul probleme ... je ne le comprends pas mais pas du tout j'ai reussi à plus ou moins faire quelque chose mais cela ne marche pas correctement du coup je pense que ma comprehension de l'algo n'est pas bonne ...
    Du coup si quelqu'un serait motivé pour m'expliquer toute la partie mathematique de l'algo ce serait avec plaisir !
    Merci à vous !

    Pour les curieux voila mon code, faux bien sur... qui ne gere pas deux octants ...

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    int e;
    int dx;
    int dy;
      //CAS DES LIGNES DROITES
    	if(x1 == x2)
    	{
    		if(y2 > y1)
    			swap(&y1, &y2);
    		while(y1 >= y2)
    		{
    			draw(x1, y1, color);
    			y1 --;
    		}
    	}
    	if(y1 == y2)
    	{
    		if(x2 > x1)
    			swap(&x1, &x2);
    		while(x1 >= x2)
    		{
    			draw( x1, y1, color);
    			x1 --;
    		}
    	}
    	//FIN
    	//CAS OU X2 > X1 ET Y2 > Y1
    	if ((x2 > x1 && y2 > y1) ||(x2 < x1 && y2 < y1) )
    	{
    		if (x1 > x2 && y1 > y2) // CAS OU X2 < X1 et Y2 < Y1
    		{
    			swap(&x1, &x2);
    			swap(&y1, &y2);
    		}
    		e = x2 - x1; 
    		dx = e * 2; // 10
    		dy = (y2 - y1) * 2;
    		while (x1 <= x2)
    		{
    			draw(x1, y1, color);
    		//	printf("X = %d || Y = %d\n",x1, y1);
    			x1++;
    			e = e - dy;
    			if (e <= 0)
    			{
    				y1++;
    				e += dx;
    			}
    		}
    	}
    	//FIN DE CAS
    	else if ((x2 < x1 && y2 > y1) || (x2 > x1 && y2 < y1))//CAS OU X2 < X1 ET Y2 > Y1
    	{
    		if (x2 > x1 && y2 < y1) //CAS OU X2 > X1 ET Y2 < Y1
    		{
    			swap(&x1, &x2);
    			swap(&y1, &y2);
    		}
    		e = x1 - x2;
    		dx = e * 2;
    		dy = (y2 - y1) * 2;
    		while (x2 <= x1)
    		{
    			draw(x2, y2, color);
    		//	printf("X = %d || Y = %d\n",x2, y2);
    			x2++;
    			if ((e = e - dy) <= 0)
    			{
    				y2--;
    				e = e + dx;
    			}
    		}	
    	}

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Prenons une droite montante, et avec x1 <x2 , et y1 < y2.
    Dans l'algorithme expliqué ici https://fr.wikipedia.org/wiki/Algori...t_de_Bresenham , il y a 2 cas : la pente est plus petite que 1 ou plus grande que 1.
    Déjà, vois-tu pourquoi on a besoin de ces 2 cas ? Et dans ton code, je ne vois pas cette distinction.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 428
    Points : 170
    Points
    170
    Par défaut
    salut essaye ce lien :

Discussions similaires

  1. besoin d'explication d'une algorithme
    Par Koty20 dans le forum C++
    Réponses: 6
    Dernier message: 05/04/2010, 16h21
  2. Des explications pour cet algorithme (compter les éléments d'une pile)
    Par adel01 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 21/12/2009, 00h16
  3. [2D] Algorithme de Bresenham
    Par Trillian dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 09/03/2006, 15h48
  4. L'algorithme de bresenham
    Par ccensam dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 06/11/2005, 23h57
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 23h18

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