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