Tracer des fonctions et des graphiques avec CSS, Canvas et JavaScript : une exploration approfondie

Avec la balise HTML , vous créez une zone rectangulaire pouvant être remplie de graphiques ou d’animations via JavaScript. Pour cela, un contexte 2D est créé. HTML est un élément qui met à disposition une zone de dessin dans laquelle vous pouvez créer des graphiques ou des animations avec JavaScript. La taille de cette zone est définie par des attributs de hauteur et de largeur. Le contenu de cette « toile » ne fait pas partie à proprement parler de la structure d’une page Web, ce qui empêche l’application de styles CSS ou l’intégration d’autres éléments HTML. Si le tag HTML n’est pas supporté par un navigateur, le contenu de repli (fallback) est affiché à la place. L’élément HTML ne fournit pas d’outils de conception en lui-même, mais crée le cadre dans lequel vous pouvez dessiner des graphiques avec JavaScript.

Vous nommez l’élément avec l’attribut id et lui attribuez les dimensions souhaitées avec width et height. En utilisant la syntaxe ci-dessus, vous pouvez facilement créer une zone de dessin à tout moment. Dans notre exemple, cette zone aura une largeur de 500 pixels et une hauteur de 250 pixels. Cependant, cette méthode ne vous donnera rien de plus qu’une simple surface vierge. Seul JavaScript vous permet de remplir l’élément généré avec des formes, des images, des textes ou des dégradés, et d’animer ces objets si nécessaire. Pour utiliser cet élément, vous devez recourir à la méthode getElementById(); cela ne fonctionne que si vous avez attribué un ID unique à la surface . Si vous souhaitez peindre, dessiner ou interagir d’une autre manière dans la zone définie, vous devez créer un contexte 2D. Maintenant, tous les prérequis sont faits pour utiliser HTML !

Avec la fonction fillRect(), nous souhaitons dessiner un simple rectangle dans la zone définie. Celui-ci doit être de couleur bleu pétrole (teal) et mesurer 200 pixels de large et 150 pixels de haut. Nous le plaçons à 10 pixels du bord gauche et à 50 pixels du bord supérieur. Alors que dans notre exemple précédent, nous avons simplement tracé un rectangle, l’élément permet également de réaliser des formes beaucoup plus complexes. Il est possible de créer et intégrer des arcs de cercle, des zones de texte, des transparences, des dégradés de couleurs et des graphiques aux formats GIF, JPEG et PNG. Vous pouvez les recadrer, les redimensionner et les positionner à votre guise. Les dimensions maximales d’un élément HTML varient selon le navigateur et l’environnement. Par exemple, sur iOS, la limite est généralement de 4096 x 4096 pixels, tandis que d’autres systèmes peuvent autoriser des dimensions supérieures à 10 000 x 10 000 pixels. Toutefois, la surface n’est pas automatiquement réactive en fonction du ratio hauteur/largeur. Vous devez gérer les dimensions et l’échelle via CSS ou JavaScript pour garantir une bonne adaptation aux différents appareils.

Nous avons déjà abordé la création d’un contexte 2D. Avec un tel contexte obtenu via getContext("2d"), vous pouvez dessiner sur la surface à tout moment. Nous allons utiliser quelques-unes des méthodes décrites précédemment pour cet exemple. Pour cela, nous créons d’abord un rectangle de 500 x 250 pixels via la balise HTML . Nous établissons ensuite un contexte 2D. Enfin, nous y insérons un titre et une autre phrase qui reçoit un dégradé de couleurs. Le rendu de dessins 3D n’est pas abordé ici, mais des techniques existent pour simuler le rendu d’objets 3D en 2D en utilisant les calculs de modifications de perspectives. Le dessin s’effectue en dessinant un rectangle ou en définissant le chemin qu’effectue le « crayon ».

La méthode .rect(x, y, largeur, hauteur) place le crayon sur le point (x, y) et dessine un rectangle dont l’angle supérieur gauche est spécifié par ces coordonnées et les dimensions spécifiées. La méthode bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) ajoute une courbe de Bézier cubique depuis la position courante du stylo jusqu’au point spécifié, en utilisant les points de contrôle. La surface délimitée par un rectangle ou un chemin fermé peut être coloriée par les méthodes .fillRectangle() et .fill(), selon la couleur spécifiée par la méthode .fillStyle().

Imaginez que vous souhaitez réaliser le dessin de plusieurs voitures sur un parking. Le dessin des différentes voitures va donc dépendre de la position de la voiture dans le dessin. Pour éviter d’impacter le reste du dessin, il faut replacer l’origine des axes à sa position/orientation/échelle initiale. Heureusement, une autre technique existe. Pour faciliter la mise en place de notre parking, nous pouvons considérer celui-ci comme une grille de 3x4 dont chaque case a une taille définie. Les voitures sont placées dans les cases (0,0), (0,1), (0,2), (1,3) et (2,3).

  • 1. Mise en place de la structure HTML de l’application
  • 2. Création du formulaire pour entrer une fonction mathématique
  • 3. Zone pour afficher le graphique
  • 4. Ajout de fonctionnalités : Calcul d’images et d’antécédents
  • 5. Mise en place d’un tableau de valeurs
  • 6. Initialisation du contexte graphique avec Chart.js
  • 7. Traitement de la soumission du formulaire
  • 8. Récupération et compilation de la fonction mathématique
  • 9. Génération des valeurs pour le graphique et le tableau
  • 10. Tracé de la courbe de la fonction mathématique
  • 11. Fonction pour calculer l’image d’un nombre

Pour suivre ce tutoriel, vous avez besoin de connaître JavaScript. Chart.js et Math.js peuvent être accessibles via des liens CDN. L’attribut id="graphCanvas" permet de retrouver ce canvas en JavaScript pour y dessiner notre courbe avec Chart.js. Prêt ? Chart est une variable qui contiendra notre graphique (au départ, il n’existe pas encore). Important : initialisez ces variables pour les rendre accessibles dans tout le script.

KineticJS offre une autre approche pour piloter l’API Canvas et faciliter les animations. Mise en route et structure de base décrivent la scène et les formes, avec des exemples allant du rectangle bleu à des formes plus complexes comme les cercles et les polygones. La librairie permet également de gérer les événements souris et tactiles, les glisser-déposer et les animations sans écrire tout le code manuellement pour chaque élément graphique. Le modèle KineticJS introduit des classes hiérarchisées et des objets scène (Stage), formes (Rect, Circle, Polygon, Text, etc.), et des méthodes avancées pour les dégradés, les transformations et les interactions.

Pour aller plus loin, il existe de nombreuses bibliothèques complémentaires et plugins qui facilitent le chargement d’images, les effets de dégradé et les interactions avancées. L’installation suit des étapes simples: télécharger la librairie et l’intégrer avec une balise