circle()

Dessine un cercle

 

Exemples d'utilisation

circle(DEMI_LARGEUR, DEMI_HAUTEUR, 119, RED); // Trace le plus grand cercle possible sur un 320x240
circle(DEMI_LARGEUR, DEMI_HAUTEUR, 170, RED); // Trace 4 arcs sur un 320x240 (cercle trop grand)

 

Référence

void circle(int x, int y, int rayon, word couleur);
void circle(int x, int y, int rayon);

Paramètre passé

x,y: coordonnés du centre
rayon: ben... rayon de courbure
couleur: couleur du cercle, voir BLACK, WHITE, ... ou RGBcolor

Valeur retournée

Aucune

 

Voir aussi

- Constantes pour les circles de cercles
-
arc(); Trace des arcs de cercle
- RGBcolor(); Transforme un triplet RGB en un code couleur
- MAX_X, MAX_Y... Valeurs des coordonnés graphiques
- BLACK, WHITE, ... Constantes couleurs
- setLimites(); Limite la zone de dessin
- setDrawInverse(); Choix du mode dessin ou inversion
- point(); Dessine un point
- line(); Trace une ligne
- rect(); Trace les bords d'un cadre
- fillRect(); Trace une boîte pleine
- fill(); Remplit avec la couleur demandée
- text(); Écrit du texte

 

Notes

En mode NORMAL, dessine un cercle avec la couleur spécifiée si présente, ou avec la dernière couleur utilisée par point(), rect(), circle(),... si le paramètre couleur n'est pas passé. La nouvelle couleur est mémorisée pour les prochains tracés graphiques. En mode INVERSE, cette fonction inverse la couleur sans tenir compte de la couleur éventuellement passée en paramètre; la nouvelle couleur du cercle n'est pas mémorisée.

N'est dessiné que la partie qui tient dans l'écran et qui tient dans les limites données par la fonction setLimites()

 

Exemple

PecheuxGraph_ILI9341_8bits.zip\PecheuxGraph_ILI9341_8bits\examples\Documentation\Exemple-212-circle\Exemple-212-circle.ino (dans votre fichier téléchargé):

// Ce programme trace des cercles concentriques.
// Les plus grands cercles dépassent et seul ce qui tient est affiché.

#
  $menu = ":PG";
  include <PecheuxGraph_ILI9341_8bits.h>
void setup() 
{
  setGraphMode(PAYSAGE);
  // Trace 20 cercles de rayon croissant centrés
  for (int cercle=1; cercle<20; cercle++) circle(DEMI_LARGEUR, DEMI_HAUTEUR, cercle*10, GREY);
}

void loop()
{
}

Résultat:

 

Côté technique

Pour dessiner les cercles, c'est l'algorithme de Martin qui est utilisé, car il suffit amplement.

Un cercle de rayon R, a un diamètre de 2R (c'est un entier pair) et utilise une matrice (2R+1,2R+1). La zone occupée est de taille impaire. Il n'est donc pas possible de faire un cercle qui occupe 2N pixels. Le cercle le plus grand que l'on peut dessiner sur un 320x240 est de rayon 119. L'algorithme de Martin permettrait de faire des cercles de rayon 119,5, mais il faudrait, pour pouvoir le définir avoir un centre qui soit avec des coordonnés non entières ( 3,5 ; 3,5 ). Et si on décidait d'implanter ces deux types de cercles, on ne pourrait pas avoir deux cercles concentriques de diamètre 5 et 6. Dans cette bibliothèque ce choix n'est pas fait car on définit un cercle par son centre et son rayon. Sous le Paint de Windows, les cercles sont définis par les coins du rectangle englobant. On peut alors définir des cercles de rayon pair et impair.