Guide du débutant pour dessiner des graphiques 2D avec Two.js

Two.js est une API facilitant la création de formes 2D avec du code. Suivez et vous apprendrez à créer et animer des formes à partir de JavaScript.

Two.js est agnostique en matière de rendu. Vous pouvez donc vous fier à la même API pour dessiner avec Canvas, SVG ou WebGL. La bibliothèque a beaucoup de méthodes qui peuvent être utilisées pour contrôler comment différentes formes apparaissent à l'écran ou comment elles sont animées..

Installation

La version non compressée de la bibliothèque a une taille d'environ 128 Ko, tandis que la version compressée est de 50 Ko. Si vous utilisez la dernière version, vous pouvez réduire davantage la taille de la bibliothèque en utilisant une version personnalisée..

Vous pouvez télécharger la version abrégée de la bibliothèque à partir de GitHub ou vous pouvez créer un lien direct vers la version hébergée sur CDN. Une fois que vous avez ajouté la bibliothèque à votre page Web, vous pouvez commencer à dessiner et à animer différentes formes ou objets..

Créer des formes de base

Tout d'abord, vous devez expliquer à Two.js l'élément sur lequel vous souhaitez dessiner et animer vos formes. Vous pouvez transmettre certains paramètres au Deux constructeur pour mettre les choses en place.

Définissez le type de rendu à l'aide de la commande type propriété. Vous pouvez spécifier une valeur comme svg, webgl, Toile, etc. Le type est réglé sur svg par défaut. La largeur et la hauteur de l’espace de dessin peuvent être spécifiées à l’aide des touches largeur et la taille paramètres. Vous pouvez également définir l’espace de dessin sur tout l’écran disponible à l’aide des touches plein écran paramètre. Quand plein écran est mis à true, les valeurs de largeur et la taille sera ignoré.

Enfin, vous pouvez dire à Two.js de démarrer automatiquement une animation à l’aide de la méthode booléenne. démarrage automatique paramètre.

Après avoir transmis tous les paramètres souhaités au constructeur, vous pouvez commencer à dessiner des lignes, des rectangles, des cercles et des ellipses..

Vous pouvez dessiner une ligne en utilisant two.makeLine (x1, y1, x2, y2). Ici, (x1, y1) sont les coordonnées du premier point final, et (x2, y2) sont les coordonnées du deuxième point final. Cette fonction retournera un Two.Line objet, qui peut être stocké dans une variable pour une manipulation ultérieure à un moment ultérieur.

De la même manière, vous pouvez dessiner des rectangles normaux et arrondis en utilisant two.makeRectangle (x, y, largeur, hauteur) et two.makeRoundedRectangle (x, y, largeur, hauteur, rayon) respectivement. Rappelez-vous que X et y déterminer le centre du rectangle, au lieu de ses coordonnées en haut à gauche, comme beaucoup d'autres bibliothèques. le largeur et la taille les paramètres détermineront la taille du rectangle. le rayon paramètre est utilisé pour spécifier la valeur du rayon pour le coin arrondi.

Vous pouvez également afficher des cercles et des ellipses sur une page Web à l'aide de deux.makeCircle (x, y, rayon) et two.makeEllipse (x, y, largeur, hauteur) respectivement. Tout comme les rectangles, le X et y les paramètres spécifient le centre du cercle ou de l'ellipse. Réglage du largeur et la taille à la même valeur dans le cas d'une ellipse le rendra comme un cercle.

Une méthode utile dans Two.js que vous utiliserez fréquemment est two.makeGroup (objets). Vous pouvez soit transmettre une liste d'objets différents, soit un tableau d'objets, de chemins ou de groupes en tant que paramètre de cette méthode. Il retournera aussi un Two.Group objet.

Manipulation d'objets dans un groupe

Une fois que vous avez créé un groupe, vous pouvez manipuler tous ses enfants en même temps à l'aide des propriétés que le groupe vous rend disponibles..

le accident vasculaire cérébral et remplir Les propriétés peuvent être utilisées pour définir la couleur de trait et de remplissage pour tous les enfants d'un groupe. Ils accepteront tous les formulaires valides dans lesquels vous pouvez représenter une couleur en CSS. Cela signifie que vous êtes libre d'utiliser la notation RVB, HSL ou hexa. Vous pouvez aussi simplement utiliser le nom de la couleur, comme Orange, rouge, ou bleu. De même, vous pouvez définir des valeurs pour toutes les autres propriétés telles que largeur de ligne, opacité, mitre, et casquette. Il est possible de supprimer le remplissage et les contours de tous les enfants d’un groupe en utilisant aucun remplissage() et noStroke () les méthodes.

Vous pouvez également appliquer d'autres transformations physiques comme échelle, rotation, et Traduction. Ces transformations seront appliquées à des objets individuels. Ajouter de nouveaux objets à un groupe et les supprimer est facile avec des méthodes comme ajouter() et retirer().

Définition de dégradés et rédaction de texte

Vous pouvez définir des dégradés linéaires et radiaux dans Two.js. Définir un dégradé ne signifie pas qu’il sera rendu automatiquement à l’écran, mais vous pourrez l’utiliser lors de la définition du dégradé. remplir ou accident vasculaire cérébral valeurs d'objets divers.

Vous pouvez définir un dégradé linéaire en utilisant two.makeLinearGradient (x1, y1, x2, y2, s'arrête). Les valeurs x1 et y1 détermine les coordonnées du début du dégradé. De même, les valeurs x2 et y2 détermine les coordonnées de la fin du dégradé. le arrête paramètre est un tableau de Two.Stop les instances. Celles-ci définissent les couleurs de chaque partie du tableau et l'emplacement de chaque couleur dans la suivante. Ils peuvent être définis en utilisant nouveau Two.Stop (offset, couleur, opacité), où décalage détermine le point du dégradé où cette couleur particulière doit être entièrement rendue. le Couleur Ce paramètre détermine la couleur du dégradé à un point donné. Vous pouvez utiliser n'importe quelle représentation de couleur CSS valide comme valeur. Finalement, le opacité Ce paramètre détermine l'opacité de la couleur. L'opacité est facultative et peut avoir n'importe quelle valeur entre 0 et 1.

Vous pouvez définir des gradients radiaux de manière similaire en utilisant two.makeRadialGradient (x, y, rayon, arrêts, fx, fy). Dans ce cas, les valeurs X et y détermine le centre du gradient. le rayon paramètre spécifie jusqu'où le dégradé doit s'étendre. Vous pouvez également transmettre un tableau d’arrêts à cette méthode afin de définir la composition chromatique des dégradés. Les paramètres fx et fy sont facultatifs et peuvent être utilisés pour spécifier la position focale du dégradé.

Découvrez quelques types de dégradés et leur code dans le CodePen ci-dessous.

Rappelez-vous que le X et y la position des gradients correspond à l’origine de la forme qu’ils essaient de remplir. Par exemple, un dégradé radial censé remplir une forme à partir du centre aura toujours X et y mis à zéro.

Two.js vous permet également d’écrire du texte sur la zone de dessin et de le mettre à jour ultérieurement en fonction de vos besoins. Cela nécessite l'utilisation de la méthode two.makeText (message, x, y, styles). Le nom des paramètres peut indiquer que message est le texte que vous voulez écrire. Les paramètres X et y sont les coordonnées du point qui servira de centre pour écrire le texte. le modes paramètre est un objet qui peut être utilisé pour définir les valeurs d'un grand ensemble de propriétés.

Vous pouvez utiliser des styles pour définir les valeurs de propriétés telles que font famille, Taille, et alignement. Vous pouvez également spécifier la valeur de propriétés telles que remplir, accident vasculaire cérébral, opacité, rotation, échelle, et Traduction.

Créer un projet Two.js

Après avoir appris toutes ces méthodes et propriétés, il est temps de les appliquer à un projet. Dans ce tutoriel, je vais vous montrer comment utiliser Two.js pour restituer les dix premiers éléments du tableau périodique avec des électrons en rotation autour du noyau. Le noyau aura également un léger mouvement pour améliorer l'attrait visuel de notre représentation.

Nous commençons par définir quelques variables et fonctions qui seront utilisées plus tard.

var centerX = window.innerWidth / 2; var centerY = window.innerHeight / 2; var elem = document.getElementById ("atomes"); var elementNames = ["", "Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluor", "Neon"]; var styles = alignement: "centre", taille: 36, famille: "Lato"; var nucleusCount = 10; var nucleusArray = Array (); var electronCount = 10; var electronArray = Array (); fonction intRange (min, max) return Math.random () * (max - min) + min; 

Le code ci-dessus stocke les coordonnées du centre de notre fenêtre dans les variables centerX et centreY. Celles-ci seront utilisées plus tard pour placer notre atome au centre. le elementNames tableau contient les noms des dix premiers éléments du tableau périodique. L'index de chaque nom correspond au nombre d'électrons et de protons de cet élément et commence par une chaîne vide. le modes objet contient des propriétés pour le style de l'objet texte.

Nous avons également défini une fonction intRange () pour obtenir une valeur entière aléatoire dans des extrêmes donnés.

var deux = nouveau Deux (fullscreen: true). appendTo (elem); var protonColor = two.makeRadialGradient (0, 0, 15, nouveau Two.Stop (0, "rouge", 1), nouveau Two.Stop (1, "noir", 1)); var neutronColor = two.makeRadialGradient (0, 0, 15, nouveau Two.Stop (0, "bleu", 1), nouveau Two.Stop (1, "noir", 1)); pour (i = 0; i < nucleusCount; i++)  nucleusArray.push(two.makeCircle(intRange(-10, 10), intRange(-10, 10), 8));  nucleusArray.forEach(function(nucleus, index)  if (index % 2 == 0)  nucleus.fill = protonColor;  if (index % 2 == 1)  nucleus.fill = neutronColor;  nucleus.noStroke(); );

Cela crée une instance de Two et définit deux dégradés radiaux. Les gradients radiaux rouge / noir représenteront les protons et les gradients bleus / noirs représenteront les neutrons..

Nous avons utilisé le intRange () fonction pour placer tous ces neutrons et protons à moins de 20 pixels l’un de l’autre. le makeCircle () méthode définit également le rayon de ces protons et neutrons à 10 pixels. Après cela, nous parcourons nucleusArray et remplissez chaque cercle avec un dégradé différent en alternance.

pour (var i = 0; i < 10; i++)  if (i < 2)  var shellRadius = 50; var angle = i * Math.PI; electronArray.push( two.makeCircle( Math.cos(angle) * shellRadius, Math.sin(angle) * shellRadius, 5 ) );  if (i >= 2 && i < 10)  var shellRadius = 80; var angle = (i - 2) * Math.PI / 4; electronArray.push( two.makeCircle( Math.cos(angle) * shellRadius, Math.sin(angle) * shellRadius, 5 ) );  

Il était facile de placer des neutrons et des protons dans le noyau. Cependant, placer correctement les électrons à une distance uniforme demandera un peu de calcul. Nous utilisons le shellRadius variable pour spécifier la distance des différentes couches d'électrons du noyau. Un cercle entier couvre un angle égal à 2 PI radians. Nous pouvons placer différents électrons uniformément en répartissant les 2 radians PI également.

le Math.cos () et Math.sin () les fonctions sont utilisées pour séparer les composantes verticale et horizontale du vecteur de position de différents électrons en fonction de leur angle.

var orbitA = two.makeCircle (centerX, centerY, 50); orbitA.fill = "transparent"; orbitA.linewidth = 2; orbitA.stroke = "rgba (0, 0, 0, 0.1)"; var orbitB = two.makeCircle (centerX, centerY, 80); orbitB.fill = "transparent"; orbitB.linewidth = 2; orbitB.stroke = "rgba (0, 0, 0, 0.1)"; var groupElectronA = two.makeGroup (electronArray.slice (0, 2)); groupElectronA.translation.set (centerX, centerY); groupElectronA.fill = "orange"; groupElectronA.linewidth = 1; var groupElectronB = two.makeGroup (electronArray.slice (2, 10)); groupElectronB.translation.set (centerX, centerY); groupElectronB.fill = "yellow"; groupElectronB.linewidth = 1; var groupNucleus = two.makeGroup (nucleusArray); groupNucleus.translation.set (centerX, centerY); 

Cette partie du code place les électrons de différentes couches ainsi que les neutrons et les protons dans leurs propres groupes. Il définit également les couleurs de remplissage pour tous les électrons d'une orbite spécifique à la fois..

deux .bind ("update", fonction (frameCount) groupElectronA.rotation + = 0.025 * Math.PI; groupElectronB.rotation + = 0.005 * Math.PI; groupNucleus.rotation - = 0.05;) .play (); var text = two.makeText ("", centerX, 100, styles); nucleusArray.forEach (fonction (nucleus, index) nucleus.opacity = 0;); electronArray.forEach (fonction (electron, index) electron.opacity = 0;); 

Cette partie du code définit l'opacité à zéro des électrons et des protons individuels. Il indique également à Two.js de faire tourner les électrons et les protons à des vitesses spécifiques.

visible = 0; document.addEventListener ("click", fonction (événement) if (visible < nucleusArray.length)  nucleusArray[visible].opacity = 1; electronArray[visible].opacity = 1; visible++; text.value = elementNames[visible];  else  nucleusArray.forEach(el => el.opacité = 0); electronArray.forEach (el => el.opacity = 0); visible = 0; text.value = elementNames [0]; ); 

La dernière partie du code nous permet de parcourir les éléments en cliquant sur la souris ou en tapant dessus. Pour charger l'élément suivant, nous rendons visibles un électron et un proton ou neutron et mettons à jour le nom de l'élément. Après avoir cliqué sur le dernier élément, toutes les particules sont à nouveau masquées pour que nous puissions tout recommencer. le visible la variable garde la trace du nombre de particules atomiques actuellement visibles afin que nous puissions les afficher ou les masquer en conséquence.

Essayez de cliquer ou de cliquer sur la démonstration suivante de CodePen pour afficher les dix premiers éléments du tableau périodique..

Dernières pensées

Nous avons commencé ce didacticiel par une brève introduction à la bibliothèque Two.js et à son utilisation pour dessiner des formes telles que des rectangles, des cercles et des ellipses. Après cela, nous avons discuté de la façon dont nous pouvons regrouper différents objets pour les manipuler tous en même temps. Nous avons utilisé cette possibilité pour regrouper des éléments afin de les traduire et les faire pivoter en synchronisation. Ces outils se sont tous réunis dans notre animation des atomes des dix premiers éléments du tableau périodique.

Comme vous pouvez le constater, la création de graphiques 2D animés est très facile avec Two.js. L'objectif de cet article était de vous aider à démarrer rapidement. Nous n'avons donc abordé que les bases. Cependant, vous devriez lire la documentation officielle pour en savoir plus sur la bibliothèque.!