HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/diagrammes-_PB4x9vx.js.map
{"version":3,"file":"diagrammes-_PB4x9vx.js","sources":["../../src/lib/2d/diagrammes.js"],"sourcesContent":["import { fraction, max } from 'mathjs'\nimport { colorToLatexOrHTML, ObjetMathalea2D, vide2d } from '../../modules/2dGeneralites.js'\nimport { arc, cercle } from './cercle.js'\nimport { point, tracePoint } from './points.js'\nimport { carre, motifs, polygone, polyline } from './polygones.js'\nimport { axeY, labelY, pointDansRepere } from './reperes.js'\nimport { texcolors } from '../format/style'\nimport { combinaisonListes } from '../outils/arrayOutils'\nimport { numberFormat, texNombre } from '../outils/texNombre.js'\nimport { segment, vecteur } from './segmentsVecteurs.js'\nimport { latexParPoint, texteParPoint, texteParPosition } from './textes.js'\nimport { rotation, similitude, translation } from './transformations.js'\n\n/**\n * Trace un graphique cartésien dans un repère\n *\n *\n * @param {array} data\n * @param {object} repere\n * @author Rémi Angot\n */\nexport function TraceGraphiqueCartesien (data, repere = {}, {\n  couleurDesPoints = 'red',\n  couleurDuTrait = 'blue',\n  styleDuTrait = '', // plein par défaut\n  epaisseurDuTrait = 2,\n  styleDesPoints = 'x', // croix par défaut\n  tailleDesPoints = 3\n\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  const objets = []\n  const listePoints = []\n  for (const [x, y] of data) {\n    const M = pointDansRepere(x, y, repere)\n    listePoints.push(M)\n    const t = tracePoint(M, couleurDesPoints)\n    t.style = styleDesPoints\n    t.taille = tailleDesPoints\n    t.isVisible = false\n    M.isVisible = false\n    objets.push(t)\n  }\n  const l = polyline(...listePoints)\n  l.isVisible = false\n  l.epaisseur = epaisseurDuTrait\n  l.color = colorToLatexOrHTML(couleurDuTrait)\n  if (styleDuTrait === 'pointilles') {\n    l.pointilles = 5\n  }\n  objets.push(l)\n\n  // LES SORTIES TiKZ et SVG\n  this.svg = function (coeff) {\n    let code = ''\n    for (const objet of objets) {\n      code += '\\n\\t' + objet.svg(coeff)\n    }\n    return code\n  }\n  this.tikz = function () {\n    let code = ''\n    for (const objet of objets) {\n      code += '\\n\\t' + objet.tikz()\n    }\n    return code\n  }\n  this.svgml = function (coeff, amp) {\n    let code = ''\n    for (const objet of objets) {\n      if (typeof (objet.svgml) === 'undefined') code += '\\n\\t' + objet.svg(coeff)\n      else code += '\\n\\t' + objet.svgml(coeff, amp)\n    }\n    return code\n  }\n  this.tikzml = function (amp) {\n    let code = ''\n    for (const objet of objets) {\n      if (typeof (objet.tikzml) === 'undefined') code += '\\n\\t' + objet.tikz()\n      else code += '\\n\\t' + objet.tikzml(amp)\n    }\n    return code\n  }\n}\n\nexport function traceGraphiqueCartesien (...args) {\n  return new TraceGraphiqueCartesien(...args)\n}\n\n/**\n * Trace une barre pour un histogramme\n *\n * @param {integer} x\n * @param {integer} hauteur\n * @param {string} legende\n * @param {integer} epaisseur\n * @param {string} couleur\n * @param {integer} opaciteDeRemplissage\n * @param {integer} angle\n * @author Rémi Angot\n */\nexport function TraceBarre (x, hauteur, legende = '', {\n  epaisseur = 0.6,\n  couleurDeRemplissage = 'blue',\n  color = 'black',\n  opaciteDeRemplissage = 0.3,\n  angle = 66,\n  unite = 1,\n  hachures = false\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  const p = hauteur === 0 ? vide2d(x, 0) : polygone([point(x - epaisseur / 2, 0), point(x - epaisseur / 2, hauteur * unite), point(x + epaisseur / 2, hauteur * unite), point(x + epaisseur / 2, 0)])\n  p.couleurDeRemplissage = colorToLatexOrHTML(couleurDeRemplissage)\n  p.opaciteDeRemplissage = opaciteDeRemplissage\n  p.color = colorToLatexOrHTML(color)\n  if (hachures) {\n    p.hachures = hachures\n  }\n  const texte = texteParPosition(legende, x, -0.2, angle, 'black', 1, 'gauche')\n  this.bordures = [Math.min(p.bordures[0], texte.bordures[0]), Math.min(p.bordures[1], texte.bordures[1]), Math.max(p.bordures[2], texte.bordures[2]), Math.max(p.bordures[3], texte.bordures[3])]\n  this.tikz = function () {\n    return p.tikz() + '\\n' + texte.tikz()\n  }\n  this.svg = function (coeff) {\n    return p.svg(coeff) + '\\n' + texte.svg(coeff)\n  }\n}\n\nexport function traceBarre (...args) {\n  return new TraceBarre(...args)\n}\n\n/**\n * Trace une barre horizontale pour un histogramme\n *\n * @param {integer} longueur\n * @param {integer} y\n * @param {string} legende\n * @param {integer} epaisseur\n * @param {string} couleur\n * @param {integer} opaciteDeRemplissage\n * @param {integer} angle\n * @author Rémi Angot\n */\nexport function TraceBarreHorizontale (longueur, y, legende = '', {\n  epaisseur = 0.6,\n  couleurDeRemplissage = 'blue',\n  color = 'black',\n  opaciteDeRemplissage = 0.3,\n  unite = 1,\n  angle = 'gauche',\n  hachures = false\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  const p = longueur === 0 ? vide2d(0, y) : polygone([point(0, y - epaisseur / 2), point(0, y + epaisseur / 2), point(unite * longueur, y + epaisseur / 2), point(unite * longueur, y - epaisseur / 2)])\n  p.couleurDeRemplissage = colorToLatexOrHTML(couleurDeRemplissage)\n  p.opaciteDeRemplissage = opaciteDeRemplissage\n  p.color = colorToLatexOrHTML(color)\n  if (hachures) {\n    p.hachures = hachures\n  }\n  const texte = texteParPosition(legende, -0.2, y, angle, 'black', 1, 'gauche')\n\n  this.tikz = function () {\n    return p.tikz() + '\\n' + texte.tikz()\n  }\n  this.svg = function (coeff) {\n    return p.svg(coeff) + '\\n' + texte.svg(coeff)\n  }\n}\n\nexport function traceBarreHorizontale (...args) {\n  return new TraceBarreHorizontale(...args)\n}\n\n/** Trace un diagramme en barres\n * @param {number[]} hauteursBarres Tableau des effectifs\n * @param {string[]} etiquettes Tableau des labels pour chaque effectif\n * @param {Object} parametres À saisir entre accolades\n * @param {boolean} [parametres.reperageTraitPointille = false] Présence (ou non) du trait en pointillés, reliant le haut de chaque barre à l'axe des ordonnées\n * @param {string} [parametres.couleurDeRemplissage = 'blue'] Couleur de remplissage de toutes les barres : du type 'blue' ou du type '#f15929'.\n * @param {number} [parametres.titreAxeVertical = ''] Titre de l'axe des ordonnées\n * @param {boolean} [parametres.titre = ''] Titre du diagramme\n * @param {boolean} [parametres.hauteurDiagramme = 5] Hauteur du diagramme\n * @param {string[]} [parametres.coeff = 2] Largeur entre deux barres\n * @param {string} [parametres.axeVertical = true] Présence (ou non) de l'axe vertical\n * @param {boolean[]} [parametres.etiquetteValeur = true] Présence (ou non) de l'effectif sur chaque barre\n * @param {boolean[]} [parametres.labelAxeVert = true] Présence (ou non) des labels numériques sur l'axe vertical\n * @property {string} svg Sortie au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} tikz Sortie au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {number[]} bordures Coordonnées de la fenêtre d'affichage du genre [-2,-2,5,5]\n * @class\n */\nexport function DiagrammeBarres (hauteursBarres, etiquettes, {\n  reperageTraitPointille = false,\n  couleurDeRemplissage = 'blue',\n  titreAxeVertical = '',\n  titre = '',\n  hauteurDiagramme = 5,\n  coeff = 2,\n  axeVertical = false,\n  etiquetteValeur = true,\n  labelAxeVert = false\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  const diagramme = []\n  for (let j = 0; j < hauteursBarres.length; j++) {\n    const abscisseBarre = j * coeff\n    const hauteurBarre = hauteursBarres[j] * hauteurDiagramme / max(hauteursBarres)\n    diagramme.push(traceBarre(abscisseBarre, hauteurBarre, etiquettes[j], { couleurDeRemplissage }))\n    if (reperageTraitPointille) {\n      const ligne = segment(-1, hauteurBarre, abscisseBarre, hauteurBarre)\n      ligne.pointilles = 5\n      ligne.epaisseur = 0.2\n      diagramme.push(ligne)\n    }\n    if (etiquetteValeur) {\n      if (hauteursBarres[j] !== 0) {\n        diagramme.push(texteParPoint(numberFormat(hauteursBarres[j]), point(abscisseBarre, hauteurBarre + 0.3))) // On écrit la valeur au dessus de la barre sauf pour une hauteur de 0\n      }\n    }\n    // Calculs permettant de graduer l'axe vertical et de placer des valeurs\n    const steps = [1, 2, 5, 10, 20]\n    const yticks = [1, 2, 5, 5, 5]\n    let istep = 1\n    let step = 1\n    let ytick = 1\n    while (max(hauteursBarres) / step > 5 && istep < 5) {\n      istep += 1\n      step = steps[istep - 1]\n      ytick = yticks[istep - 1]\n    }\n    if (istep === 5) istep = 2\n    while (max(hauteursBarres) / step > 5) {\n      istep = istep + 1\n      step = istep * 10\n      ytick = 5\n    }\n\n    if (labelAxeVert) diagramme.push(labelY(0, max(hauteursBarres), (fraction(hauteurDiagramme, max(hauteursBarres))).mul(step), 'black', -3, max(hauteursBarres) / hauteurDiagramme))\n    if (axeVertical) diagramme.push(axeY(0, hauteurDiagramme + 1, 0.2, (fraction(hauteurDiagramme, max(hauteursBarres))).mul(step), 0.2, 'black', ytick, titreAxeVertical))\n  }\n  if (titre !== '') diagramme.push(texteParPoint(titre, point((hauteursBarres.length - 1) * coeff / 2, hauteurDiagramme + 1)))\n  this.bordures = [1000, 1000, -1000, -1000]\n  for (const objet of diagramme) {\n    if (objet.bordures !== undefined) {\n      this.bordures = [Math.min(this.bordures[0], objet.bordures[0]), Math.min(this.bordures[1], objet.bordures[1]), Math.max(this.bordures[2], objet.bordures[2]), Math.max(this.bordures[3], objet.bordures[3])]\n    }\n  }\n  this.svg = function (coeff) {\n    let code = ''\n    for (const objet of diagramme) {\n      code += '\\n\\t' + objet.svg(coeff)\n    }\n    return code\n  }\n  this.tikz = function () {\n    let code = ''\n    for (const objet of diagramme) {\n      code += '\\n\\t' + objet.tikz()\n    }\n    return code\n  }\n}\n\n/** Trace un diagramme en barres\n * @param {number[]} hauteursBarres Tableau des effectifs\n * @param {string[]} etiquettes Tableau des labels pour chaque effectif\n * @param {Object} parametres À saisir entre accolades\n * @param {boolean} [parametres.reperageTraitPointille = false] Présence (ou non) du trait en pointillés, reliant le haut de chaque barre à l'axe des ordonnées\n * @param {string} [parametres.couleurDeRemplissage = 'blue'] Couleur de remplissage de toutes les barres : du type 'blue' ou du type '#f15929'.\n * @param {number} [parametres.titreAxeVertical = ''] Titre de l'axe des ordonnées\n * @param {boolean} [parametres.titre = ''] Titre du diagramme\n * @param {boolean} [parametres.hauteurDiagramme = 5] Hauteur du diagramme\n * @param {string[]} [parametres.coeff = 2] Largeur entre deux barres\n * @param {string} [parametres.axeVertical = true] Présence (ou non) de l'axe vertical\n * @param {boolean[]} [parametres.etiquetteValeur = true] Présence (ou non) de l'effectif sur chaque barre\n * @param {boolean[]} [parametres.labelAxeVert = true] Présence (ou non) des labels numériques sur l'axe vertical\n * @example diagrammeBarres([15, 25, 30, 10, 20], ['Compas', 'Rapporteur', 'Règle', 'Crayon', 'Gomme'])\n * // Trace un diagramme en barres avec les options par défaut\n * @example diagrammeBarres([15, 25, 30, 10, 20], ['Compas', 'Rapporteur', 'Règle', 'Crayon', 'Gomme'],{\n * reperageTraitPointille: true, couleurDeRemplissage: 'red', titreAxeVertical: 'Nombre de réponses',\n * titre = 'Matériel mathématique dans sa trousse', * hauteurDiagramme: 10, coeff: 3, etiquetteValeur: false }})\n * // Trace un diagramme en barres avec modification de quelques options par défaut\n * @return {DiagrammeBarres}\n */\nexport function diagrammeBarres (hauteursBarres, etiquettes, {\n  reperageTraitPointille = false,\n  couleurDeRemplissage = 'blue',\n  titreAxeVertical = '',\n  titre = '',\n  hauteurDiagramme = 5,\n  coeff = 2,\n  axeVertical = false,\n  etiquetteValeur = true,\n  labelAxeVert = false\n} = {}) {\n  return new DiagrammeBarres(hauteursBarres, etiquettes, {\n    reperageTraitPointille,\n    couleurDeRemplissage,\n    titreAxeVertical,\n    titre,\n    hauteurDiagramme,\n    coeff,\n    axeVertical,\n    etiquetteValeur,\n    labelAxeVert\n  })\n}\n\n/** Trace un diagramme circulaire\n * @param {Object} parametres À saisir entre accolades\n * @param {number[]} parametres.effectifs Liste des effectifs à donner impérativement\n * @param {number} [parametres.x = 0] Abscisse du point en bas à gauche\n * @param {number} [parametres.y = 0] Ordonnée du point en bas à gauche\n * @param {number} [parametres.rayon = 4] Rayon du diagramme circulaire\n * @param {boolean} [parametres.semi = false] True pour un semi-circulaire, false pour un circulaire\n * @param {boolean} [parametres.legendeAffichage = true] Présence (ou non) de la légende (ensemble des labels)\n * @param {string[]} [parametres.labels = []] Labels associés aux effectifs respectifs. Tableau de même taille que effectifs.\n * @param {string} [parametres.legendePosition = 'droite'] Position de la légende à choisir parmi : 'droite', 'dessus' ou 'dessous'\n * @param {boolean[]} [parametres.mesures = []] Présence (ou non) de la mesure de chaque secteur. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.visibles = []] Découpe (ou non) du secteur (pour créer des diagrammes à compléter). Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.pourcents = []] Présence (ou non) du pourcentage de l'effectif total associé au secteur. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.valeurs = []] Présence (ou non) de des valeurs de l'effectif. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.hachures = []] Présence (ou non) de hachures dans le secteur associé. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.remplissage = []] Présence (ou non) d'une couleur de remplissage dans le secteur associé. Tableau de même taille que effectifs.\n * @property {string} svg Sortie au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} tikz Sortie au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {number} x Abscisse du point en bas à gauche\n * @property {number} y Ordonnée du point en bas à gauche\n * @property {number[]} bordures Coordonnées de la fenêtre d'affichage du genre [-2,-2,5,5]\n * @class\n */\nexport function DiagrammeCirculaire ({\n  effectifs,\n  x = 0,\n  y = 0,\n  rayon = 4,\n  labels = [],\n  semi = false,\n  legendeAffichage = true,\n  legendePosition = 'droite',\n  mesures = [],\n  visibles = [],\n  pourcents = [],\n  valeurs = [],\n  hachures = [],\n  remplissage = []\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  const objets = []\n  const listeHachuresDisponibles = [0, 1, 3, 4, 5, 6, 7, 8, 9, 10]\n  const listeMotifs = combinaisonListes(listeHachuresDisponibles, effectifs.length)\n  this.bordures = [1000, 1000, -1000, -1000]\n  this.x = x\n  this.y = y\n  const centre = point(this.x + rayon, this.y + (semi ? 0 : rayon))\n  const depart = point(this.x + 2 * rayon, (semi ? this.y : this.y + rayon))\n  const contour = semi ? arc(translation(centre, vecteur(rayon, 0)), centre, 180, true, 'white', 'black') : cercle(centre, rayon, 'black')\n  let positionLegende // On prévoit l'emplacement de la légende si celle-ci est demandée\n  switch (legendePosition) {\n    case 'droite':\n      positionLegende = { x: this.x + 2 * rayon + 1, y: this.y }\n      break\n    case 'dessus':\n      positionLegende = { x: this.x, y: this.y + semi ? rayon + 1 : 2 * rayon + 1 }\n      break\n    case 'dessous':\n      positionLegende = { x: this.x, y: this.y - 1.5 }\n      break\n  }\n  let T = point(positionLegende.x, positionLegende.y)\n  const angleTotal = semi ? 180 : 360\n  const effectifTotal = effectifs.reduce((somme, valeur) => somme + valeur)\n  const secteurs = []\n  const legendes = []\n  const etiquettes = []\n  const etiquettes2 = []\n  const etiquettes3 = []\n  let alpha = 0 // alpha est l'angle à partir duquel démarre le secteur\n  let legendeMax = 0\n  for (let i = 0, a, angle, legende, textelegende, hachure; i < effectifs.length; i++) {\n    // on crée les secteurs\n    angle = angleTotal * effectifs[i] / effectifTotal\n    a = arc(rotation(depart, centre, alpha), centre, angle, true)\n    if (hachures[i]) {\n      hachure = motifs(listeMotifs[i])\n      a.hachures = hachure\n      a.couleurDesHachures = colorToLatexOrHTML(texcolors(i + 1))\n      a.couleurDeRemplissage = colorToLatexOrHTML(texcolors(i + 2))\n    } else {\n      hachure = ''\n      a.hachures = ''\n    }\n    a.opaciteDeRemplissage = 0.7\n    if (remplissage[i]) a.couleurDeRemplissage = colorToLatexOrHTML(texcolors(i + 1))\n    if (visibles[i]) secteurs.push(a)\n    if (valeurs[i]) {\n      etiquettes.push(latexParPoint(texNombre(effectifs[i]), similitude(depart, centre, alpha + angle * 3 / 4, 0.8), 'black', 20, 12, 'yellow', 8))\n    }\n    if (pourcents[i]) {\n      etiquettes2.push(latexParPoint(texNombre(100 * effectifs[i] / effectifTotal, 0) + '\\\\%', similitude(depart, centre, alpha + angle / 4, 0.8), 'black', 20, 12, 'yellow', 8))\n    }\n    if (mesures[i]) {\n      etiquettes3.push(latexParPoint(texNombre(angle, 0) + '\\\\degree', similitude(depart, centre, alpha + angle / 2, 0.6), 'black', 20, 12, 'yellow', 8))\n    }\n    alpha += angle\n\n    // on crée les légendes\n    switch (legendePosition) {\n      case 'droite':\n        legende = carre(translation(T, vecteur(0, 1.5 * i)), translation(T, vecteur(1, 1.5 * i)), 'black')\n        textelegende = texteParPoint(labels[i], translation(T, vecteur(1.2, i * 1.5 + 0.5)), 0, 'black', 1.5, 'gauche', false)\n        legendeMax = Math.max(legendeMax, labels[i].length * 0.6)\n        break\n      default:\n        legende = carre(T, translation(T, vecteur(1, 0)), 'black')\n        textelegende = texteParPoint(labels[i], translation(T, vecteur(1.2, 0.5)), 0, 'black', 1.5, 'gauche', false)\n        T = translation(T, vecteur(labels[i].length * 0.6 + 1, 0))\n        legendeMax = legendeMax + labels[i].length * 0.6 + 2.2\n        break\n    }\n\n    legende.couleurDeRemplissage = a.couleurDeRemplissage\n    legende.couleurDesHachures = a.couleurDesHachures\n    legende.hachures = hachure\n    legende.opaciteDeRemplissage = 0.7\n    legendes.push(legende, textelegende)\n  }\n  objets.push(contour)\n  objets.push(...secteurs)\n  if (legendeAffichage) objets.push(...legendes)\n  objets.push(...etiquettes, ...etiquettes2, ...etiquettes3)\n  // calcul des bordures\n  this.bordures[0] = this.x - 0.5\n  this.bordures[1] = this.y - 0.5 - (legendeAffichage ? (legendePosition === 'dessous' ? 2 : 0) : 0)\n  this.bordures[2] = this.x + rayon * 2 + 1 + (legendeAffichage ? (legendePosition === 'droite' ? legendeMax : (Math.max(legendeMax, this.x + rayon * 2 + 1) - (this.x + rayon * 2 + 1))) : 0)\n  this.bordures[3] = this.y + (semi ? rayon : rayon * 2) + (legendeAffichage ? (legendePosition === 'dessus' ? 2 : (legendePosition === 'droite' ? Math.max(this.y + (semi ? rayon : rayon * 2), effectifs.length * 1.5) - (this.y + (semi ? rayon : rayon * 2)) : 0)) : 0)\n  this.svg = function (coeff) {\n    let code = ''\n    for (const objet of objets) {\n      code += '\\n\\t' + objet.svg(coeff)\n    }\n    return code\n  }\n  this.tikz = function () {\n    let code = ''\n    for (const objet of objets) {\n      code += '\\n\\t' + objet.tikz()\n    }\n    return code\n  }\n}\n\n/** Trace un diagramme circulaire\n * @param {Object} parametres À saisir entre accolades\n * @param {number[]} parametres.effectifs Liste des effectifs à donner impérativement\n * @param {number} [parametres.x = 0] Abscisse du point en bas à gauche\n * @param {number} [parametres.y = 0] Ordonnée du point en bas à gauche\n * @param {number} [parametres.rayon = 4] Rayon du diagramme circulaire\n * @param {boolean} [parametres.semi = false] True pour un semi-circulaire, false pour un circulaire\n * @param {boolean} [parametres.legendeAffichage = true] Présence (ou non) de la légende (ensemble des labels)\n * @param {string[]} [parametres.labels = []] Labels associés aux effectifs respectifs. Tableau de même taille que effectifs.\n * @param {string} [parametres.legendePosition = 'droite'] Position de la légende à choisir parmi : 'droite', 'dessus' ou 'dessous'\n * @param {boolean[]} [parametres.mesures = []] Présence (ou non) de la mesure de chaque secteur. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.visibles = []] Découpe (ou non) du secteur (pour créer des diagrammes à compléter). Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.pourcents = []] Présence (ou non) du pourcentage de l'effectif total associé au secteur. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.valeurs = []] Présence (ou non) de des valeurs de l'effectif. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.hachures = []] Présence (ou non) de hachures dans le secteur associé. Tableau de même taille que effectifs.\n * @param {boolean[]} [parametres.remplissage = []] Présence (ou non) d'une couleur de remplissage dans le secteur associé. Tableau de même taille que effectifs.\n * @example diagrammeCirculaire({ rayon: 7, semi: false, legendePosition: 'dessous',\n * effectifs: [15, 25, 30, 10, 20],\n * labels: ['Compas', 'Rapporteur', 'Règle', 'Crayon', 'Gomme'],\n * mesures: [true, true, true, false, true],\n * visibles: [true, false, true, true, true],\n * pourcents: [true, true, true, false, true],\n * valeurs: [true, false, true, true, false],\n * hachures: [true, true, true, false, true],\n * remplissage: [false, true, true, true, true] })\n * // Trace un diagramme semi-circulaire de rayon 7 avec différentes options\n * @return {DiagrammeCirculaire}\n */\nexport function diagrammeCirculaire ({\n  effectifs,\n  x = 0,\n  y = 0,\n  rayon = 4,\n  labels = [],\n  semi = false,\n  legendeAffichage = true,\n  legendePosition = 'droite',\n  mesures = [],\n  visibles = [],\n  pourcents = [],\n  valeurs = [],\n  hachures = [],\n  remplissage = []\n} = {}) {\n  return new DiagrammeCirculaire({\n    effectifs,\n    x,\n    y,\n    rayon,\n    labels,\n    semi,\n    legendeAffichage,\n    legendePosition,\n    mesures,\n    visibles,\n    pourcents,\n    valeurs,\n    hachures,\n    remplissage\n  })\n}\n"],"names":["TraceGraphiqueCartesien","data","repere","couleurDesPoints","couleurDuTrait","styleDuTrait","epaisseurDuTrait","styleDesPoints","tailleDesPoints","ObjetMathalea2D","objets","listePoints","x","y","M","pointDansRepere","t","tracePoint","l","polyline","colorToLatexOrHTML","coeff","code","objet","amp","traceGraphiqueCartesien","args","TraceBarre","hauteur","legende","epaisseur","couleurDeRemplissage","color","opaciteDeRemplissage","angle","unite","hachures","p","vide2d","polygone","point","texte","texteParPosition","traceBarre","TraceBarreHorizontale","longueur","traceBarreHorizontale","DiagrammeBarres","hauteursBarres","etiquettes","reperageTraitPointille","titreAxeVertical","titre","hauteurDiagramme","axeVertical","etiquetteValeur","labelAxeVert","diagramme","j","abscisseBarre","hauteurBarre","max","ligne","segment","texteParPoint","numberFormat","steps","yticks","istep","step","ytick","labelY","fraction","axeY","diagrammeBarres","DiagrammeCirculaire","effectifs","rayon","labels","semi","legendeAffichage","legendePosition","mesures","visibles","pourcents","valeurs","remplissage","listeMotifs","combinaisonListes","centre","depart","contour","arc","translation","vecteur","cercle","positionLegende","T","angleTotal","effectifTotal","somme","valeur","secteurs","legendes","etiquettes2","etiquettes3","alpha","legendeMax","i","a","textelegende","hachure","rotation","motifs","texcolors","latexParPoint","texNombre","similitude","carre","diagrammeCirculaire"],"mappings":"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"}