Pour tracer un cercle, on utilise une généralisation de l'agorithme de Bresenhan, qui est l'algorithme optimal pour tracer un segment de droite discret
Par symétrie, il suffit de tracer 1/8 de cercle : par exemple la portion dans le 2e octant, c'est-à-dire à gauche de l'axe (x=0) et au-dessus de l'axe (x=y).
Cette portion de cercle a sa dérivée comprise entre 0 et 1.
Ce qui veut dire que deux points d'abscisse distante de p auront leurs ordonnées distantes de moins de p. (ce qui est vrai pour p = taille d'un pixel)
L'idée de l'algorithme est alors de calculer l'ordonnée associée à chaque abscisse discrète, et on sait que le point calculé à l'abscisse suivante sera connexe (en 8-connexité, c'est-à-dire horizontale, verticale ou diagonale)
Pour calculer l'ordonnée, il suffit d'utiliser pythagore. Mais cette formule donne un nombre réel, et pas forcément un entier.
Deux solutions :
- prendre l'entier le plus proche.
Le problème est que l'on va avoir un effet d'escalier.
- anti-aliasing : on «allume» en fait 2 pixels, celui à l'arrondi inférieur et celui à l'arrondi supérieur.
On leur affecte un niveau de gris proportionnel à la proximité du point «réel»
Voilà, j'espère que c'est clair

Pour plus d'infos, fais une recherche sur google de Bresenhan tu devrais trouver tout ce que tu veux
PS : oublié de préciser, mais c'est pas forcément évident...
les coordonnées de l'intersection du cercle de rayon R avec la 1ère bissectrice sont (R/√2, R/√2)
Il faut donc parcourir en abscisse les entiers entre 0 et R/√2.
PPS : pendant que j'y suis... cet algorithme a une complexité linéaire en le rayon du cercle (O(R)), contrairement aux algorithmes proposés ci-dessus qui nécéssitent de tester tous les pixels du carré englobant le cercle, et ont donc une complexité quadratique (O(R
2))