title: Algorithme de tracé de cercle d'Andres
text: # Algorithme de tracé de cercle d'Andres
  
  L’algorithme de tracé de cercle d'Andres permet, pour une complexité algorithmique très réduite, de tracer des cercles en image matricielle. Cet algorithme permet de paver entièrement le plan par des cercles concentriques, sans les trous que laisse par exemple l'algorithme de tracé d'arc de cercle de Bresenham.
  
  ## Principe
  
  Andres considère que les cercles discrets de rayon r et de centre $(x_{0},y_{0})$ sont les ensembles des points vérifiant
  
  (E) : $(r-1/2)^{2}\leq (x-x_{0})^{2}+(y-y_{0})^{2}<(r+1/2)^{2}$
  
  On procède par itération sur les points. Plaçons-nous dans un octant, par exemple celui juste au-dessus de l'axe des abscisses, et supposons que le point P de coordonnées (x, y) ait déjà été placé. On cherche alors à déterminer s'il faut choisir le point A (x+1,y), le point B (x, y-1) ou le point C (x+1, y-1).
  
  On montre alors que si P vérifie (E), alors seuls A, B ou C peuvent vérifier (E). De plus, A et B s'excluent mutuellement. Enfin, si ni A ni B ne vérifient (E), alors C vérifie (E).
  
  On pose $d=r^{2}+r-x^{2}-y^{2}-1$ et on montre que l'on doit choisir A si $d\geq 2x$ et B si $d<2(r-y)$.
  
  En effet, avec ce $d$ et pour $(x_{0},y_{0})=(0,0)$ (les autres cercles s'obtiennent par translation), si P vérifie (E) :
  
  * si $2x\leq d$ :
     * $x\geq 1\implies x^{2}\geq x$ d'où $(r-1/2)^{2}\leq x^{2}+y^{2}\leq (x+1)^{2}+y^{2}$
     * et $2x\leq d\implies x^{2}+2x+1+y^{2}\leq r^{2}+r\implies (x+1)^{2}+y^{2}<r^{2}+r+1/4=(r+1/2)^{2}$. Donc A vérifie (E).
  * si $d<2(r-y)$ :
     * $y\geq 1\implies (y-1)^{2}\leq y^{2}\implies x^{2}+(y-1)^{2}\leq x^{2}+y^{2}\leq (r+1/2)^{2}$
     * et $d<2(r-y)\implies r^{2}+r<2r-2y+x^{2}+y^{2}+1\implies r^{2}-r<x^{2}+(y-1)^{2}\implies r^{2}-r+1\leq x^{2}+(y-1)^{2}$ car il s'agit d'expressions entières $(r-1/2)^{2}\leq r^{2}-r+1\leq x^{2}+(y-1)^{2}$. Donc B vérifie (E).
  * sinon alors $2x>d\geq 2(r-y)$ :
     * $2x>d\implies (x+1)^{2}+y^{2}>r^{2}+r\implies (x+1)^{2}+(y-1)^{2}>r^{2}+r-2y+1$ or $x^{2}+y^{2}\leq (r+1/2)^{2}\implies y^{2}\leq (r+1/2)^{2}\implies y\leq r$ (nous sommes sur $\mathbb {N}$) d'où $2x>d\implies (x+1)^{2}+(y-1)^{2}>r^{2}-r+1>(r-1/2)^{2}$
     * et $d\geq 2(r-y)\implies r^{2}+r\geq 2r-2y+x^{2}+y^{2}+1\implies r^{2}-r\geq x^{2}+(y-1)^{2}\implies r^{2}-r+2x+1\geq (x+1)^{2}+(y-1)^{2}$ or $y\geq 1\implies x<r$ car le point de coord. (x=r, y=1) ne vérifie pas (E) donc $2r>2x\implies 2r\geq 2x+1\implies 2r+1/4>2x+1$ donc $r^{2}-r+2r+1/4>r^{2}-r+2x+1\geq (x+1)^{2}+(y-1)^{2}\implies (r+1/2)^{2}>(x+1)^{2}+(y-1)^{2}$. Donc C vérifie (E).
  
  ## Algorithme
  
  Cet algorithme décrit le tracé d'un octant, les sept autres s'obtenant par symétrie.
  
  Algorithme de tracé du cercle complet
  
  ## Pavage du plan par cercle concentriques
  
  En traçant des cercles concentriques, on obtient bien un pavage complet du plan.
  
  Ceci permet notamment de tourner des images avec une moindre déformation.
  
  