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);
    }