circle()
Bibliothèque graphique pour shield Uno/Mega
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 arcs 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
// Ce programme trace des cercles concentriques.
// Les plus grands cercles dépassent et seul ce qui tient est affiché.
#include <PxGraph_ST7781_Shield.h> // Voir http://arduino.dansetrad.fr/PxGraph
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 (mais
non concentriques).