arc()

Dessine un arc de cercle par pas de 45°

 

Exemples d'utilisation

// Arc à partir de la position NORD (en haut) jusqu'à la position NORD_EST (45°)
arc(x, y, rayon, DEPART_NORD+ARRIVEE_NORD_EST, couleur);
arc(x, y, rayon, 0x01, couleur); // Pareil
arc(x, y, rayon, 1, couleur); // Pareil
// Arc complémentaire
arc(x, y, rayon, DEPART_NORD_EST+ARRIVEE_NORD, couleur);
arc(x, y, rayon, 0x10, couleur); // Pareil
arc(x, y, rayon, 16, couleur); // Pareil

 

Référence

void arc(int x, int y, int rayon, byte debut_fin, word couleur);
void arc(int x, int y, int rayon, byte debut_fin);

Paramètre passé

x,y: coordonnés du centre
rayon: ben... rayon de courbure
debut_fin: octet définissant le début et la fin du tracé (voir plus bas)
couleur: couleur de l'arc, voir BLACK, WHITE, ... ou RGBcolor

Valeur retournée

Aucune

 

Voir aussi

- Constantes pour les arcs de cercles
-
circle(); Trace un cercle
- text(); Écrit du texte

 

Notes

En mode NORMAL, dessine un arc de 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 de l'arc 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()

Les tracés d'arcs de cercles se font par huitième de cercle. C'est d'une part pour des raisons d'algorithme et d'autre part parce que les arcs sont nécessaires pour tracer la police de caractère. Les huitièmes de cercles sont suffisant. C'est pour cela que l'angle n'est pas en degré.

Le tracé se comprend comme si il était dessiné à partir du point de départ jusqu'au point d'arrivé dans le sens horaire.

 

Choix du début et de la fin du tracé, avec des noms:

Le paramètre debut_fin définit le début et la fin de l'arc. Le paramètre s'obtient en ajoutant deux constantes, une DEPART_????? et une ARRIVEE_????. Les ???? sont à remplacer par NORD, NORD_EST, EST, SUD_EST, SUD, SUD_OUEST, OUEST ou NORD_OUEST.

 

Choix du début et de la fin du tracé, avec un mot binaire :

Le paramètre debut_fin définit le début et la fin de l'arc. Chacun de ces deux informations est codé sur 3 bits:

Les bits repérés X sont ignorés. arc=0x40 est identique à arc=0x48.

 

Pour tracer un cercle complet, c'est plus simple d'utiliser la fonction circle(). Sinon, si on utilise arc(), il faut que les points de départs et d'arrivée soient les mêmes, par exemple 0x22, 0x66... Il est simple alors de donner 0x00 soit tout simplement 0! Le tracé de cercle utilise cette fonction: circle(x,y,rayon,couleur) fait appel à arc(x,y,rayon,0,couleur).

 

Exemple

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

// Ce programme trace 8 arcs de cercles centrés. Le rayon s'incrémente de 10 à chaque fois. En
// mettant "courbe" pour le paramètre debut_fin, on a debut=NORD, et fin=NORD_EST puis EST...

#include <PecheuxGraph_ILI9341_8bits.h>
void setup() 
{
  setGraphMode(PAYSAGE);
  // Trace 8 arcs de rayon et d'angle croissants commençant en haut
  for (int courbe=1; courbe<9; courbe++) arc(DEMI_LARGEUR, DEMI_HAUTEUR, courbe*10+10, courbe, LIGHT_GREY); 
}

void loop()
{
}

Résultat:

 

Côté technique

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

Pour un seul arc, le point de départ et d'arrivé n'est pas forcément dessiné. Cela permet de ne pas dessiner deux fois les points sur les axes et sur les diagonales si on trace des cercles. Ce n'est pas utile en mode NORMAL, mais en INVERSE, le rendu est nettement amélioré.

 

DEPART_NORD   <<     >>   circle()