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/reperes-uV74d7Az.js.map
{"version":3,"file":"reperes-uV74d7Az.js","sources":["../../src/lib/2d/reperes.js"],"sourcesContent":["import { ceil, fraction, Fraction } from 'mathjs'\nimport { ObjetMathalea2D } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport FractionEtendue from '../../modules/FractionEtendue.js'\nimport { arrondi, rangeMinMax } from '../outils/nombres'\nimport { nombreAvecEspace, stringNombre } from '../outils/texNombre'\nimport { plot, point, tracePoint } from './points.js'\nimport { segment } from './segmentsVecteurs.js'\nimport { latexParCoordonnees, texteParPoint, texteParPosition } from './textes.js'\n\n/**  Trace un axe gradué\n * @param {Object} parametres À saisir entre accolades\n * @param {number?} [parametres.Unite = 10] Nombre de cm par unité\n * @param {number?} [parametres.Min = 10] Valeur minimum labelisée sur l'axe (les graduations commencent un peu avant)\n * @param {number?} [parametres.Max = 10] Valeur maximum labelisée sur l'axe (les graduations finissent un peu après)\n * @param {number?} [parametres.x = 0] Abscisse du point de départ du tracé\n * @param {number?} [parametres.y = 0] Ordonnée du point de départ du tracé\n * @param {number?} [parametres.axeEpaisseur = 2] Épaisseur de l'axe gradué\n * @param {string?} [parametres.axeCouleur = 'black'] Couleur de l'axe gradué : du type 'blue' ou du type '#f15929'\n * @param {string?} [parametres.axeStyle = '->'] Style final de l'axe gradué\n * @param {number?} [parametres.axeHauteur = 4] Définit la \"largeur\" de l'axe, celle des graduations et du style final\n * @param {string?} [parametres.axePosition = 'H'] Position de l'axe : 'H' pour horizontal, 'V' pour vertical\n * @param {number?} [parametres.thickEpaisseur = 2] Épaisseur des graduations\n * @param {string?} [parametres.thickCouleur = axeCouleur] Couleur des graduations : du type 'blue' ou du type '#f15929'\n * @param {number?} [parametres.thickDistance = 1] Distance entre deux graduations principales\n * @param {number?} [parametres.thickOffset = 0] Décalage de toutes les graduations sur l'axe (pour, par exemple, faire coïncider le début de l'axe avec une graduation)\n * @param {boolean?} [parametres.thickSec = false] Affichage (ou pas) des graduations secondaires\n * @param {number?} [parametres.thickSecDist = 0.1] Distance entre deux graduations secondaires\n * @param {boolean?} [parametres.thickTer = false] Affichage (ou pas) des graduations secondaires\n * @param {number?} [parametres.thickTerDist = 0.1] Distance entre deux graduations tertiaires, false sinon\n * @param {array?} [parametres.pointListe = []] Liste de points à mettre sur l'axe comme, par exemple, [[3.4,'A'],[3.8,'B']]. Les noms se placent au-dessus de l'axe.\n * @param {number?} [parametres.labelPointTaille = 10] Taille (hauteur) de la police des points (de la liste des points pointListe) utilisée de 5 = \\small à 20=\\huge...\n * @param {number?} [parametres.labelPointLargeur = 20] Largeur de la boîte où sont affichés les points (de la liste des points pointListe) utilisée de 5 = \\small à 20=\\huge...\n * @param {string?} [parametres.pointCouleur = 'blue'] Couleur des points de la liste pointListe : du type 'blue' ou du type '#f15929'\n * @param {number?} [parametres.pointTaille = 4] Taille en pixels des points de la liste  pointListe\n * @param {string?} [parametres.pointStyle = '+'] Style des points de la liste pointListe\n * @param {number?} [parametres.pointOpacite = 0.8] Opacité des points de la liste pointListe\n * @param {number?} [parametres.pointEpaisseur = 2] Épaisseur des points de la liste pointListe\n * @param {boolean?} [parametres.labelsPrincipaux = true] Présence (ou non) des labels numériques principaux\n * @param {boolean?} [parametres.labelsSecondaires = false] Présence (ou non) des labels numériques secondaires\n * @param {number?} [parametres.step1 = 1] Pas des labels numériques principaux\n * @param {number?} [parametres.step2 = 1] Pas des labels numériques secondaires\n * @param {number?} [parametres.labelDistance = (axeHauteur + 10) / context.pixelsParCm] Distance entre les labels et l'axe\n * @param {number?} [parametres.labelCustomDistance = (axeHauteur + 10) / context.pixelsParCm] Distance entre les labels et l'axe\n * @param {array?} [parametres.labelListe = []] Liste de labels à mettre sous l'axe comme, par exemple, [[2.8,'x'],[3.1,'y']]. Les noms se placent en-dessous de l'axe.\n * @param {string?} [parametres.labelColor = 'black'] Couleur des labels de la liste labelListe : du type 'blue' ou du type '#f15929'\n * @param {number?} [parametres.labelScale = 1] Echelle des labels\n * @param {string?} [parametres.Legende = ''] Légende de l'axe\n * @param {number?} [parametres.LegendePosition] Position de la légende\n * @property {number?} Unite Nombre de cm par unité\n * @property {number?} Min Valeur minimum labelisée sur l'axe (les graduations commencent un peu avant)\n * @property {number?} Max Valeur maximum labelisée sur l'axe (les graduations finissent un peu après)\n * @author Jean-Claude Lhote\n * @return {array} Liste d'objets MathAlea2D\n */\n// JSDOC Validee par EE Aout 2022\nexport function DroiteGraduee ({\n  Unite = 10,\n  Min = 0,\n  Max = 2,\n  x = 0,\n  y = 0,\n  axeEpaisseur = 2,\n  axeCouleur = 'black',\n  axeStyle = '->',\n  axeHauteur = 4,\n  axePosition = 'H',\n  thickEpaisseur = 2,\n  thickCouleur = axeCouleur,\n  thickDistance = 1,\n  thickOffset = 0,\n  thickSecDist = 0.1,\n  thickSec = false,\n  thickTerDist = 0.01,\n  thickTer = false,\n  pointListe = [],\n  labelPointTaille = 10,\n  labelPointLargeur = 20,\n  pointCouleur = 'blue',\n  pointTaille = 4,\n  pointStyle = '+',\n  pointOpacite = 0.8,\n  pointEpaisseur = 2,\n  labelsPrincipaux = true,\n  labelsSecondaires = false,\n  step1 = 1,\n  step2 = 1,\n  labelCustomDistance = (axeHauteur + 10) / context.pixelsParCm,\n  labelDistance = (axeHauteur + 10) / context.pixelsParCm,\n  labelListe = [],\n  labelColor = 'black',\n  labelScale = 1,\n  Legende = '',\n  LegendePosition = (Max - Min) * Unite + 1.5\n} = {}) {\n  // ObjetMathalea2D.call(this, {}) on ne fait plus un ObjetMathalea2d, mais une liste d'objets à cause des latexParCoordonnees()\n// correctif Jean-Claude Lhote 15/08/2023\n  // Les propriétés exportables\n  this.Unite = Unite\n  this.Min = Min\n  this.Max = Max\n\n  const objets = []\n  let S\n  let T\n  let P\n  let i\n  let longueurTotale = (Max - Min) * Unite + 0.5 // la longueur totale de l'axe flèche comprise\n  let absord = [1, 0] // Constantes pour gérer la verticalité ou l'horizontalité de l'axe\n  if (axePosition !== 'H') absord = [0, 1]\n  // dessin de l'axe\n  if (axeStyle === '->') {\n    longueurTotale += 0.2\n    S = segment(point(x - 0.2 * absord[0], y - 0.2 * absord[1]), point(x + longueurTotale * absord[0], y + longueurTotale * absord[1]), axeCouleur)\n    S.styleExtremites = '->'\n    S.tailleExtremites = axeHauteur\n    S.epaisseur = axeEpaisseur\n  } else {\n    S = segment(point(x, y), point(x + longueurTotale * absord[0], y + longueurTotale * absord[1]), axeCouleur)\n    S.styleExtremites = axeStyle || '|->'\n    S.epaisseur = axeEpaisseur\n    S.tailleExtremites = axeHauteur\n  }\n  objets.push(S)\n  let factor\n  const r = 10 / context.pixelsParCm\n  if (thickTer) factor = 1 / thickTerDist\n  else if (thickSec) factor = 1 / thickSecDist\n  else factor = 1 / thickDistance\n\n  const Min2 = Math.ceil((Min + thickOffset) * factor) // début des graduations (ne coïncide pas nécéssairement avec le début de la droite)\n  const Max2 = Math.floor((Max - thickOffset) * factor) // fin des graduations\n  const pas1 = Math.round(thickDistance * factor)\n  const pas2 = Math.round(thickSecDist * factor)\n  for (let j = Min2; j <= Max2; j++) {\n    i = (j - Min * factor) / factor\n    if (j % pas1 === 0) { // Graduation principale\n      S = segment(point(x + i * Unite * absord[0] - axeHauteur / 8 * r * absord[1], y - axeHauteur / 8 * r * absord[0] + i * Unite * absord[1]), point(x + i * Unite * absord[0] + axeHauteur / 8 * r * absord[1], y + axeHauteur / 8 * r * absord[0] + i * Unite * absord[1]), thickCouleur)\n      S.epaisseur = thickEpaisseur\n      objets.push(S)\n    } else if (j % pas2 === 0 && thickSec) { // Graduation secondaire\n      S = segment(point(x + i * Unite * absord[0] - axeHauteur / 12 * r * absord[1], y - axeHauteur / 12 * r * absord[0] + i * Unite * absord[1]), point(x + i * Unite * absord[0] + axeHauteur / 12 * r * absord[1], y + axeHauteur / 12 * r * absord[0] + i * Unite * absord[1]), thickCouleur)\n      S.epaisseur = thickEpaisseur / 2\n      S.opacite = 0.8\n      objets.push(S)\n    } else if (thickTer) { // Graduation tertiaire\n      S = segment(point(x + i * Unite * absord[0] - axeHauteur / 16 * r * absord[1], y - axeHauteur / 16 * r * absord[0] + i * Unite * absord[1]), point(x + i * Unite * absord[0] + axeHauteur / 16 * r * absord[1], y + axeHauteur / 16 * r * absord[0] + i * Unite * absord[1]), thickCouleur)\n      S.epaisseur = thickEpaisseur / 4\n      S.opacite = 0.6\n      objets.push(S)\n    }\n  }\n  // Les labels principaux\n  if (labelsPrincipaux) {\n    for (let j = Min2; j <= Max2; j++) {\n      if (j % (step1 * pas1) === 0) {\n        i = (j - Min * factor) / factor\n        T = latexParCoordonnees(`${nombreAvecEspace(arrondi(Min + i, 3))}`, x + i * Unite * absord[0] - labelDistance * absord[1], y + i * Unite * absord[1] - labelDistance * absord[0], 'black', 0, 0, '', 8)\n        objets.push(T)\n      }\n    }\n  }\n  if (labelsSecondaires) {\n    for (let j = Min2; j <= Max2; j++) {\n      if (j % (step2 * pas2) === 0 && j % (step1 * pas1) !== 0) {\n        i = (j - Min * factor) / factor\n        T = latexParCoordonnees(`${nombreAvecEspace(arrondi(Min + i, 3))}`, x + i * Unite * absord[0] - labelDistance * absord[1], y + i * Unite * absord[1] - labelDistance * absord[0], 'black', 0, 0, '', 8)\n        objets.push(T)\n      }\n    }\n  }\n  // Les labels facultatifs\n  let t\n  if (labelListe.length !== 0) {\n    for (const p of labelListe) {\n      t = latexParCoordonnees(p[1], x - labelCustomDistance * absord[1] + (p[0] - Min) * absord[0] * Unite, y - labelCustomDistance * absord[0] + (p[0] - Min) * absord[1] * Unite, labelColor, 0, 0, '', 8 * labelScale)\n      objets.push(t)\n    }\n  }\n  if (Legende !== '') {\n    objets.push(texteParPosition(Legende, x + LegendePosition * absord[0], y + LegendePosition * absord[1]))\n  }\n  if (pointListe.length !== 0) {\n    let lab\n    for (const p of pointListe) {\n      P = point(x + (p[0] - Min) * absord[0] * Unite, y + (p[0] - Min) * absord[1] * Unite, p[1])\n      T = tracePoint(P, pointCouleur)\n      T.taille = pointTaille\n      T.tailleTikz = Math.max(T.taille / 30, 0.3)\n      T.opacite = pointOpacite\n      T.style = pointStyle\n      T.epaisseur = pointEpaisseur\n      lab = latexParCoordonnees(p[1], x - 0.8 * absord[1] + (p[0] - Min) * absord[0] * Unite, y + 0.8 * absord[0] + (p[0] - Min) * absord[1] * Unite, pointCouleur, labelPointLargeur, labelPointTaille, '', labelPointTaille)\n      objets.push(T, lab)\n    }\n  }\n  /*\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 += '\\t' + objet.svg(coeff) + '\\n'\n      else code += '\\t' + objet.svgml(coeff, amp) + '\\n'\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 += '\\t' + objet.tikz() + '\\n'\n      else code += '\\t' + objet.tikzml(amp) + '\\n'\n    }\n    return code\n  }\n */\n  return objets\n}\n\n/**  Trace un axe gradué\n * @param {Object} parametres À saisir entre accolades\n * @param {number} [parametres.Unite = 10] Nombre de cm par unité\n * @param {number} [parametres.Min = 10] Valeur minimum labelisée sur l'axe (les graduations commencent un peu avant)\n * @param {number} [parametres.Max = 10] Valeur maximum labelisée sur l'axe (les graduations finissent un peu après)\n * @param {number} [parametres.x = 0] Abscisse du point de départ du tracé\n * @param {number} [parametres.y = 0] Ordonnée du point de départ du tracé\n * @param {number} [parametres.axeEpaisseur = 2] Épaisseur de l'axe gradué\n * @param {string} [parametres.axeCouleur = 'black'] Couleur de l'axe gradué : du type 'blue' ou du type '#f15929'\n * @param {string} [parametres.axeStyle = '->'] Style final de l'axe gradué\n * @param {number} [parametres.axeHauteur = 4] Définit la \"largeur\" de l'axe, celle des graduations et du style final\n * @param {string} [parametres.axePosition = 'H'] Position de l'axe : 'H' pour horizontal, 'V' pour vertical\n * @param {number} [parametres.thickEpaisseur = 2] Épaisseur des graduations\n * @param {string} [parametres.thickCouleur = axeCouleur] Couleur des graduations : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.thickDistance = 1] Distance entre deux graduations principales\n * @param {number} [parametres.thickOffset = 0] Décalage de toutes les graduations sur l'axe (pour, par exemple, faire coïncider le début de l'axe avec une graduation)\n * @param {boolean?} [parametres.thickSec = false] Affichage (ou pas) des graduations secondaires\n * @param {number} [parametres.thickSecDist = 0.1] Distance entre deux graduations secondaires\n * @param {boolean?} [parametres.thickTer = false] Affichage (ou pas) des graduations secondaires\n * @param {number} [parametres.thickTerDist = 0.1] Distance entre deux graduations tertiaires, false sinon\n * @param {array?} [parametres.pointListe = []] Liste de points à mettre sur l'axe comme, par exemple, [[3.4,'A'],[3.8,'B']]. Les noms se placent au-dessus de l'axe.\n * @param {number} [parametres.labelPointTaille = 10] Taille (hauteur) de la police des points (de la liste des points pointListe) utilisée de 5 = \\small à 20=\\huge...\n * @param {number} [parametres.labelPointLargeur = 20] Largeur de la boîte où sont affichés les points (de la liste des points pointListe) utilisée de 5 = \\small à 20=\\huge...\n * @param {string} [parametres.pointCouleur = 'blue'] Couleur des points de la liste pointListe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.pointTaille = 4] Taille en pixels des points de la liste  pointListe\n * @param {string} [parametres.pointStyle = '+'] Style des points de la liste pointListe\n * @param {number} [parametres.pointOpacite = 0.8] Opacité des points de la liste pointListe\n * @param {number} [parametres.pointEpaisseur = 2] Épaisseur des points de la liste pointListe\n * @param {boolean?} [parametres.labelsPrincipaux = true] Présence (ou non) des labels numériques principaux\n * @param {boolean?} [parametres.labelsSecondaires = false] Présence (ou non) des labels numériques secondaires\n * @param {number} [parametres.step1 = 1] Pas des labels numériques principaux\n * @param {number} [parametres.step2 = 1] Pas des labels numériques secondaires\n * @param {number} [parametres.labelDistance = (axeHauteur + 10) / context.pixelsParCm] Distance entre les labels et l'axe\n * @param {number} [parametres.labelCustomDistance = (axeHauteur + 10) / context.pixelsParCm] Distance entre les labels de labelListe et l'axe\n * @param {string?} [parametres.labelColor = 'black'] Couleur des labels de la liste labelListe : du type 'blue' ou du type '#f15929'\n * @param {number?} [parametres.labelScale = 1] Echelle des labels\n * @param {string} [parametres.Legende = ''] Légende de l'axe\n * @param {number} [parametres.LegendePosition] Position de la légende\n * @example droiteGraduee({\n        x: 0,\n        y: 3,\n        Min: -2.7,\n        Max: 12 + 0.2,\n        thickSec: true,\n        Unite: 3,\n        thickCouleur: 'red',\n        axeCouleur: 'blue',\n        axeHauteur: 4,\n        labelsPrincipaux: false,\n        labelListe: [[0, 'O'], [1, 'I']],\n        pointListe: [[-1, 'A'], [5, 'B'], [7.2, 'C']],\n        pointTaille: 6,\n        pointCouleur: 'gray',\n        pointStyle: '|',\n        pointEpaisseur: 3\n      })\n // Trace une droite graduée avec différentes options\n * @author Jean-Claude Lhote\n * @return {DroiteGraduee}\n */\n// JSDOC Validee par EE Aout 2022\nexport function droiteGraduee ({\n  Unite = 10,\n  Min = 0,\n  Max = 2,\n  x = 0,\n  y = 0,\n  axeEpaisseur = 2,\n  axeCouleur = 'black',\n  axeStyle = '->',\n  axeHauteur = 4,\n  axePosition = 'H',\n  thickEpaisseur = 2,\n  thickCouleur = axeCouleur,\n  thickDistance = 1,\n  thickOffset = 0,\n  thickSecDist = 0.1,\n  thickSec = false,\n  thickTerDist = 0.01,\n  thickTer = false,\n  pointListe = [],\n  labelPointTaille = 10,\n  labelPointLargeur = 20,\n  pointCouleur = 'blue',\n  pointTaille = 4,\n  pointStyle = '+',\n  pointOpacite = 0.8,\n  pointEpaisseur = 2,\n  labelsPrincipaux = true,\n  labelsSecondaires = false,\n  step1 = 1,\n  step2 = 1,\n  labelDistance = (axeHauteur + 10) / context.pixelsParCm,\n  labelCustomDistance = (axeHauteur + 10) / context.pixelsParCm,\n  labelListe = [],\n  labelColor = 'black',\n  labelScale = 1,\n  Legende = '',\n  LegendePosition = (Max - Min) * Unite + 1.5\n} = {}) {\n  return new DroiteGraduee({\n    Unite,\n    Min,\n    Max,\n    x,\n    y,\n    axeEpaisseur,\n    axeCouleur,\n    axeStyle,\n    axeHauteur,\n    axePosition,\n    thickEpaisseur,\n    thickCouleur,\n    thickDistance,\n    thickOffset,\n    thickSecDist,\n    thickSec,\n    thickTerDist,\n    thickTer,\n    pointListe,\n    labelPointTaille,\n    labelPointLargeur,\n    pointCouleur,\n    pointTaille,\n    pointStyle,\n    pointOpacite,\n    pointEpaisseur,\n    labelsPrincipaux,\n    labelsSecondaires,\n    step1,\n    step2,\n    labelDistance,\n    labelCustomDistance,\n    labelListe,\n    labelColor,\n    labelScale,\n    Legende,\n    LegendePosition\n  })\n}\n\n/**\n * Trace un repère orthonormé\n * @param {number} [xmin=-30] Valeur minimale sur l'axe des abscisses\n * @param {number} [ymin=-30] Valeur minimale sur l'axe des ordonnées\n * @param {number} [xmax=30] Valeur maximale sur l'axe des abscisses\n * @param {number} [ymax=30] Valeur maximale sur l'axe des ordonnées\n * @param {number} [thick=0.2] Demi-longueur des tirets de chaque graduation\n * @param {number} [xstep=1] Pas sur l'axe des abscisses\n * @param {number} [ystep=1] Pas sur l'axe des ordonnées\n * @param {number} [epaisseur=2] Epaisseur des deux axes\n * @param {string} [color='black'] Couleur du codage : du type 'blue' ou du type '#f15929'.\n * @param {number} [tailleExtremites=4] Taille des flèches à l'extrémité des axes.\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 * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Juin 2022\nexport function Axes (\n  xmin = -30,\n  ymin = -30,\n  xmax = 30,\n  ymax = 30,\n  thick = 0.2,\n  xstep = 1,\n  ystep = 1,\n  epaisseur = 2,\n  color = 'black',\n  tailleExtremites = 4\n) {\n  ObjetMathalea2D.call(this, {})\n  const objets = []\n  let yabscisse\n  ymin > 0 ? (yabscisse = ymin) : (yabscisse = 0)\n  let xordonnee\n  xmin > 0 ? (xordonnee = xmin) : (xordonnee = 0)\n  const abscisse = segment(xmin, yabscisse, xmax, yabscisse, color)\n  abscisse.styleExtremites = '->'\n  abscisse.tailleExtremites = tailleExtremites\n  abscisse.epaisseur = epaisseur\n  const ordonnee = segment(xordonnee, ymin, xordonnee, ymax, color)\n  ordonnee.styleExtremites = '->'\n  ordonnee.epaisseur = epaisseur\n  ordonnee.tailleExtremites = tailleExtremites\n  objets.push(abscisse, ordonnee)\n  for (let x = xmin; x < xmax; x = x + xstep) {\n    const s = segment(x, yabscisse - thick, x, yabscisse + thick, color)\n    s.epaisseur = epaisseur\n    objets.push(s)\n  }\n  for (let y = ymin; y < ymax; y = y + ystep) {\n    const s = segment(xordonnee - thick, y, xordonnee + thick, y, color)\n    s.epaisseur = epaisseur\n    objets.push(s)\n  }\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.commentaire = `Axes(xmin = ${xmin}, ymin = ${ymin}, xmax = ${xmax}, ymax = ${ymax}, thick = ${thick})`\n}\n\n/**\n * Trace un repère orthonormé\n * @param {number} [xmin=-30] Valeur minimale sur l'axe des abscisses\n * @param {number} [ymin=-30] Valeur minimale sur l'axe des ordonnées\n * @param {number} [xmax=30] Valeur maximale sur l'axe des abscisses\n * @param {number} [ymax=30] Valeur maximale sur l'axe des ordonnées\n * @param {number} [thick=0.2] Demi-longueur des tirets de chaque graduation\n * @param {number} [xstep=1] Pas sur l'axe des abscisses\n * @param {number} [ystep=1] Pas sur l'axe des ordonnées\n * @param {number} [epaisseur=2] Epaisseur des deux axes\n * @param {string} [color='black'] Couleur du codage : du type 'blue' ou du type '#f15929'.\n * @example axes()\n * // Trace un repère orthonormé dont les axes des abscisses et des ordonnées ont pour minimum -30, maximum -30, épaisseur 2, avec un pas de 1 et de couleur noire. Le tiret de chaque graduation mesure 0,4.\n * @example axes(-10,-5,20,3,0.25,2,0.5,1,'red')\n * // Trace un repère orthonormé rouge dont les axes des abscisses et des ordonnées ont pour épaisseur 1 et dont le tiret de chaque graduation mesure 0,5.\n * // L'axe des abscisses va de -10 à 20 avec un pas de 2. L'axe des ordonnées va de -5 à 3 avec un pas de 0,5.\n * @return {Axes}\n * @author Rémi Angot\n */\n// JSDOC Validee par EE Juin 2022\nexport function axes (\n  xmin = -30,\n  ymin = -30,\n  xmax = 30,\n  ymax = 30,\n  thick = 0.2,\n  xstep = 1,\n  ystep = 1,\n  epaisseur = 2,\n  color = 'black'\n) {\n  return new Axes(xmin, ymin, xmax, ymax, thick, xstep, ystep, epaisseur, color)\n}\n\n/**\n * Trace une droite verticale graduée\n * @param {number} [ymin=-2] Valeur minimale sur l'axe vertical\n * @param {number} [ymax=5] Valeur maximale sur l'axe vertical\n * @param {number} [thick=0.2] Largeur des tirets de chaque graduation principale\n * @param {number} [ystep=1] Pas sur l'axe des ordonnées\n * @param {number} [epaisseur=2] Epaisseur des deux axes\n * @param {string} [color='black'] Couleur du codage : du type 'blue' ou du type '#f15929'.\n * @param {number} [ytick=2] Nombre de partage entre deux graduations principales\n * @param {string} [titre=''] Titre de l'axe\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 * @author Frédéric Piou\n * @class\n */\n// JSDOC Validee par EE Juin 2022\nexport function AxeY (\n  ymin = -2,\n  ymax = 5,\n  thick = 0.2,\n  ystep = 1,\n  epaisseur = 2,\n  color = 'black',\n  ytick = 2,\n  titre = ''\n) {\n  if (!(ystep instanceof Fraction || ystep instanceof FractionEtendue)) ystep = fraction(ystep)\n  if (!(ytick instanceof Fraction || ytick instanceof FractionEtendue)) ytick = fraction(ytick)\n  ObjetMathalea2D.call(this, {})\n  const objets = []\n  objets.push(texteParPoint(titre, point(-1 - thick - 0.1, ymax), 'gauche', color))\n  const ordonnee = segment(-1, ymin, -1, ymax, color)\n  ordonnee.styleExtremites = '->'\n  ordonnee.epaisseur = epaisseur\n  objets.push(ordonnee)\n  for (let y = ymin; y < ymax; y = fraction(y).add(ystep)) {\n    const s = segment(-1 - thick, y, -1, y, color)\n    s.epaisseur = epaisseur\n    objets.push(s)\n  }\n  for (let y = ymin; y < ymax; y = fraction(y).add(ystep.div(ytick))) {\n    const s = segment(-1 - thick / 2, y, -1, y, color)\n    s.epaisseur = epaisseur\n    objets.push(s)\n  }\n  this.bordures = [1000, 1000, -1000, -1000]\n  for (const objet of objets) {\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 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/**\n * Trace une droite verticale graduée\n * @param {number} [ymin=-2] Valeur minimale sur l'axe vertical\n * @param {number} [ymax=5] Valeur maximale sur l'axe vertical\n * @param {number} [thick=0.2] Largeur des tirets de chaque graduation principale\n * @param {number} [ystep=1] Pas sur l'axe des ordonnées\n * @param {number} [epaisseur=2] Epaisseur des deux axes\n * @param {string} [color='black'] Couleur du codage : du type 'blue' ou du type '#f15929'.\n * @param {number} [ytick=2] Nombre de partage entre deux graduations principales\n * @param {string} [titre=''] Titre de l'axe\n * @example axeY()\n * // Trace un axe noir vertical gradué de -2 à 5, de 1 en 1, avec une petite graduation entre deux graduations principales (de longueur 0.2 et d'épaisseur 2), et sans titre\n * @example axeY(0,10,0.25,2,1,'red',5,'titre')\n * // Trace un axe rouge vertical gradué de 0 à 10, de 2 en 2, avec quatre petites graduations entre deux graduations principales (de longueur 0.25 et d'épaisseur 1), et avec comme titre de l'axe : titre\n * @author Frédéric Piou\n * @return {AxeY}\n */\n// JSDOC Validee par EE Juin 2022\nexport function axeY (\n  ymin = -2,\n  ymax = 5,\n  thick = 0.2,\n  ystep = 1,\n  epaisseur = 2,\n  color = 'black',\n  ytick = 2,\n  titre = ''\n) {\n  return new AxeY(ymin, ymax, thick, ystep, epaisseur, color, ytick, titre)\n}\n\n/**  Place des labels sur un axe vertical précédemment\n * @param  {number} [ymin = 1] Ordonnée minimale sur l'axe\n * @param  {number} [ymax = 20] Ordonnée maximale sur l'axe\n * @param  {number} [step = 1] Pas entre chaque label\n * @param {string} [color = 'black'] Couleur des labels : du type 'blue' ou du type '#f15929'\n * @param  {number} [pos = -0.6] Décalage entre les labels et l'axe vertical\n * @param  {number} [coeff = 1] Coefficient multiplicatif sur chaque label\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 * @author Rémi Angot modifié par Frédéric Piou\n * @class\n */\n// JSDOC Validee par EE Septembre 2022\nexport function LabelY (ymin = 1, ymax = 20, step = 1, color = 'black', pos = -0.6, coeff = 1) {\n  ObjetMathalea2D.call(this, {})\n  const objets = []\n  for (let y = ceil(ymin / coeff);\n    y * coeff <= ymax;\n    y = y + step\n  ) {\n    objets.push(\n      texteParPoint(\n        stringNombre(y * coeff, 3),\n        point(pos, y),\n        'gauche',\n        color, 1, 'middle', true\n      )\n    )\n  }\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/**  Place des labels sur un axe vertical précédemment\n * @param  {number} [ymin = 1] Ordonnée minimale sur l'axe\n * @param  {number} [ymax = 20] Ordonnée maximale sur l'axe\n * @param  {number} [step = 1] Pas entre chaque label\n * @param {string} [color = 'black'] Couleur des labels : du type 'blue' ou du type '#f15929'\n * @param  {number} [pos = -0.6] Décalage entre les labels et l'axe vertical\n * @param  {number} [coeff = 1] Coefficient multiplicatif sur chaque label\n * @example labelY()\n * // Note, sur un axe (prédéfini de 1 en 1), des labels noirs, de 0 à 20, de 2 en 2, avec un décalage de -0,6 par rapport à l'axe\n * @example labelY(0, 160, 2, 'red', -2, 20)\n * // Note, sur un axe (prédéfini de 1 en 1), des labels rouges, de 0 à 160, de 40 (2*20) en 40, avec un décalage de -2 par rapport à l'axe.\n * @author Rémi Angot modifié par Frédéric Piou\n * @return {LabelY}\n */\n// JSDOC Validee par EE Septembre 2022\nexport function labelY (ymin = 1, ymax = 20, step = 1, color = 'black', pos = -0.6, coeff = 1) {\n  return new LabelY(ymin, ymax, step, color, pos, coeff)\n}\n\n/**  Trace une grille quadrillée dont le coin en bas à gauche est (xmin, ymin) et celui à droite est au maximum (xmax, ymax), de couleur et opacité choisie, avec un pas choisi et avec ou sans pointillés\n * @param {number} [xmin = -30] Abscisse du coin en bas à gauche de la grille\n * @param {number} [ymin = -30] Ordonnée du coin en bas à gauche de la grille\n * @param {number} [xmax = 30] Abscisse du coin en haut à droite de la grille\n * @param {number} [ymax = 30] Ordonnée du coin en haut à droite de la grille\n * @param {string} [color = 'gray'] Couleur de la grille : du type 'blue' ou du type '#f15929'\n * @param {number} [opacite = 0.4] Opacité de la grille : entre 0 et 1\n * @param {number} [step = 1] Pas de la grille\n * @param {number} [pointilles = 0] Style des pointillés de la grille (entier entre 1 et 5). Si autre chose, pas de pointillés.\n * @property {string} svg Sortie au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} svgml Sortie, à main levée, 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 {string} tikzml Sortie, à main levée, au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {string} color Couleur de la grille. À associer obligatoirement à colorToLatexOrHTML().\n * @property {number} opacite Opacité de la grille : entre 0 et 1\n * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Aout 2022\nexport function Grille (xmin = -30, ymin = -30, xmax = 30, ymax = 30, color = 'gray', opacite = 0.4, step = 1, pointilles = 0) {\n  ObjetMathalea2D.call(this, {})\n  this.color = color\n  this.opacite = opacite\n  const objets = []\n  for (let i = xmin; i <= xmax; i = arrondi(i + step)) {\n    const s = segment(i, ymin, i, ymax, this.color)\n    s.opacite = this.opacite\n    if (pointilles) {\n      s.pointilles = 5\n    }\n    objets.push(s)\n  }\n  for (let i = ymin; i <= ymax; i = arrondi(i + step)) {\n    const s = segment(xmin, i, xmax, i, this.color)\n    s.opacite = this.opacite\n    if (pointilles) {\n      s.pointilles = 5\n    }\n    objets.push(s)\n  }\n  this.bordures = [xmin, ymin, xmax, ymax]\n  // this.commentaire = `Grille(xmin = ${xmin}, ymin = ${ymin}, xmax = ${xmax}, ymax = ${ymax}, color = ${this.color}, opacite = ${this.opacite}, pas = ${step})`\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      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      code += '\\n\\t' + objet.tikzml(amp)\n    }\n    return code\n  }\n}\n\n/**  Trace une grille quadrillée dont le coin en bas à gauche est (xmin, ymin) et celui à droite est au maximum (xmax, ymax), de couleur et opacité choisie, avec un pas choisi et avec ou sans pointillés\n * @param {number} [xmin = -30] Abscisse du coin en bas à gauche de la grille\n * @param {number} [ymin = -30] Ordonnée du coin en bas à gauche de la grille\n * @param {number} [xmax = 30] Abscisse du coin en haut à droite de la grille\n * @param {number} [ymax = 30] Ordonnée du coin en haut à droite de la grille\n * @param {string} [color = 'gray'] Couleur de la grille : du type 'blue' ou du type '#f15929'\n * @param {number} [opacite = 0.4] Opacité de la grille : entre 0 et 1\n * @param {number} [step = 1] Pas de la grille\n * @param {number} [pointilles = 0] Style des pointillés de la grille (entier entre 1 et 5). Si autre chose, pas de pointillés.\n * @example grid = grille() // Trace une grille avec toutes les options par défaut\n * @example grid = grille(-3, -3, 27, 18, 'red', 0.2, 0.5, true) // Trace une grille avec toutes les options différentes de celles par défaut\n * @author Rémi Angot\n * @return {Grille}\n */\n// JSDOC Validee par EE Aout 2022\nexport function grille (xmin = -30, ymin = -30, xmax = 30, ymax = 30, color = 'gray', opacite = 0.4, step = 1, pointilles = 0) {\n  return new Grille(xmin, ymin, xmax, ymax, color, opacite, step, pointilles)\n}\n\n/**  Trace des parallèles à l'axe des abscisses\n * @param {number} [xmin = -30] Abscisse du coin en bas à gauche de ces parallèles\n * @param {number} [ymin = -30] Ordonnée du coin en bas à gauche de ces parallèles\n * @param {number} [xmax = 30] Abscisse du coin en haut à droite de ces parallèles\n * @param {number} [ymax = 30] Ordonnée du coin en haut à droite de ces parallèles\n * @param {string} [color = 'gray'] Couleur de ces parallèles : du type 'blue' ou du type '#f15929'\n * @param {number} [opacite = 0.4] Opacité de ces parallèles : entre 0 et 1\n * @param {number} [step = 1] Pas de ces parallèles\n * @param {number} [pointilles = 0] Style des pointillés de ces parallèles (entier entre 1 et 5). Si autre chose, pas de pointillés.\n * @property {string} svg Sortie au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} svgml Sortie, à main levée, 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 {string} tikzml Sortie, à main levée, au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {string} color Couleur de ces parallèles. À associer obligatoirement à colorToLatexOrHTML().\n * @property {number} opacite Opacité de ces parallèles : entre 0 et 1\n * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Aout 2022\nexport function LignesHorizontales (\n  xmin = -30,\n  ymin = -30,\n  xmax = 30,\n  ymax = 30,\n  color = 'gray',\n  opacite = 0.4,\n  step = 1,\n  pointilles = ''\n) {\n  ObjetMathalea2D.call(this, {})\n  this.color = color\n  this.opacite = opacite\n  const objets = []\n  for (let i = ymin; i <= ymax; i += step) {\n    const s = segment(xmin, i, xmax, i, this.color)\n    s.opacite = this.opacite\n    if (pointilles) {\n      s.pointilles = 5\n    }\n    objets.push(s)\n  }\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 des parallèles à l'axe des abscisses\n * @param {number} [xmin = -30] Abscisse du coin en bas à gauche de ces parallèles\n * @param {number} [ymin = -30] Ordonnée du coin en bas à gauche de ces parallèles\n * @param {number} [xmax = 30] Abscisse du coin en haut à droite de ces parallèles\n * @param {number} [ymax = 30] Ordonnée du coin en haut à droite de ces parallèles\n * @param {string} [color = 'gray'] Couleur de ces parallèles : du type 'blue' ou du type '#f15929'\n * @param {number} [opacite = 0.4] Opacité de ces parallèles : entre 0 et 1\n * @param {number} [step = 1] Pas de ces parallèles\n * @param {number} [pointilles = 0] Style des pointillés de ces parallèles (entier entre 1 et 5). Si autre chose, pas de pointillés.\n * @example grid = lignesHorizontales() // Trace des parallèles à l'axe des abscisses avec toutes les options par défaut\n * @example grid = lignesHorizontales(-3, -3, 27, 18, 'red', 0.2, 0.5, true) // Trace des parallèles à l'axe des abscisses avec toutes les options différentes de celles par défaut\n * @author Rémi Angot\n * @return {LignesHorizontales}\n */\n// JSDOC Validee par EE Aout 2022\nexport function lignesHorizontales (xmin = -30, ymin = -30, xmax = 30, ymax = 30, color = 'gray', opacite = 0.4, step = 1, pointilles = '') {\n  return new LignesHorizontales(xmin, ymin, xmax, ymax, color, opacite, step, pointilles)\n}\n\n/**  Trace des verticales à l'axe des ordonnées\n * @param {number} [xmin = -30] Abscisse du coin en bas à gauche de ces parallèles\n * @param {number} [ymin = -30] Ordonnée du coin en bas à gauche de ces parallèles\n * @param {number} [xmax = 30] Abscisse du coin en haut à droite de ces parallèles\n * @param {number} [ymax = 30] Ordonnée du coin en haut à droite de ces parallèles\n * @param {string} [color = 'gray'] Couleur de ces parallèles : du type 'blue' ou du type '#f15929'\n * @param {number} [opacite = 0.4] Opacité de ces parallèles : entre 0 et 1\n * @param {number} [step = 1] Pas de ces parallèles\n * @param {number} [pointilles = 0] Style des pointillés de ces parallèles (entier entre 1 et 5). Si autre chose, pas de pointillés.\n * @property {string} svg Sortie au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} svgml Sortie, à main levée, 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 {string} tikzml Sortie, à main levée, au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {string} color Couleur de ces parallèles. À associer obligatoirement à colorToLatexOrHTML().\n * @property {number} opacite Opacité de ces parallèles : entre 0 et 1\n * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Aout 2022\nexport function LignesVerticales (xmin = -30, ymin = -30, xmax = 30, ymax = 30, color = 'gray', opacite = 0.4, step = 1, pointilles = '') {\n  ObjetMathalea2D.call(this, {})\n  this.color = color\n  this.opacite = opacite\n  const objets = []\n  for (let i = xmin; i <= xmax; i = i + step) {\n    const s = segment(i, ymin, i, ymax, this.color)\n    s.opacite = this.opacite\n    if (pointilles) {\n      s.pointilles = 5\n    }\n    objets.push(s)\n  }\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/**\n * LignesVerticales(xmin,ymin,xmax,ymax,color,opacite,pas)\n *\n * @author Rémi Angot\n */\n/**  Trace des parallèles à l'axe des ordonnées\n * @param {number} [xmin = -30] Abscisse du coin en bas à gauche de ces parallèles\n * @param {number} [ymin = -30] Ordonnée du coin en bas à gauche de ces parallèles\n * @param {number} [xmax = 30] Abscisse du coin en haut à droite de ces parallèles\n * @param {number} [ymax = 30] Ordonnée du coin en haut à droite de ces parallèles\n * @param {string} [color = 'gray'] Couleur de ces parallèles : du type 'blue' ou du type '#f15929'\n * @param {number} [opacite = 0.4] Opacité de ces parallèles : entre 0 et 1\n * @param {number} [step = 1] Pas de ces parallèles\n * @param {number} [pointilles = 0] Style des pointillés de ces parallèles (entier entre 1 et 5). Si autre chose, pas de pointillés.\n * @example grid = lignesHorizontales() // Trace des parallèles à l'axe des ordonnées avec toutes les options par défaut\n * @example grid = lignesHorizontales(-3, -3, 27, 18, 'red', 0.2, 0.5, true) // Trace des parallèles à l'axe des ordonnées avec toutes les options différentes de celles par défaut\n * @author Rémi Angot\n * @return {LignesVerticales}\n */\n// JSDOC Validee par EE Aout 2022\nexport function lignesVerticales (xmin = -30, ymin = -30, xmax = 30, ymax = 30, color = 'gray', opacite = 0.4, step = 1, pointilles = '') {\n  return new LignesVerticales(xmin, ymin, xmax, ymax, color, opacite, step, pointilles)\n}\n\nexport function Seyes (xmin = 0, ymin = 0, xmax = 15, ymax = 15, opacite1 = 0.5, opacite2 = 0.2) {\n  ObjetMathalea2D.call(this, {})\n  const objets = []\n  for (let y = ymin; y <= ymax; y = y + 0.25) {\n    if (y % 1 !== 0) {\n      const d = segment(xmin, y, xmax, y, 'red')\n      d.opacite = opacite2\n      objets.push(d)\n    }\n  }\n  objets.push(grille(xmin, ymin, xmax, ymax, 'blue', opacite1, 1))\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/**\n * Fais un quadrillage avec des grands carreaux.\n *\n * Pour une sortie LaTeX, il faut penser à ajouter scale = .8\n *\n * @param {number} xmin\n * @param {number} ymin\n * @param {number} xmax\n * @param {number} ymax\n * @param {number?} opacite1=0.5\n * @param {number?} opacite2=0.2\n * @author Rémi Angot\n */\nexport function seyes (xmin, ymin, xmax, ymax, opacite1 = 0.5, opacite2 = 0.2) {\n  return new Seyes(xmin, ymin, xmax, ymax, opacite1, opacite2)\n}\n\n/**\n * @param {number?} xmin=-10\n * @param {number?} ymin=10\n * @param {number?} xmax=-10\n * @param {number?} ymax=10\n * @param {number?} xstep=1\n * @param {number?} ystep=1\n * @param {'quad'|'hexa'|'equi'?} type='quad'\n * @param {string?} pointColor='black'\n * @param {number?} pointRayon=0.05\n * @param {number?} opacite=1\n * @param {number?} opaciteDeRemplissage=1\n * @constructor\n * @author Jean-Claude Lhote\n */\nexport function PapierPointe ({\n  xmin = -10,\n  xmax = 10,\n  ymin = -10,\n  ymax = 10,\n  xstep = 1,\n  ystep = 1,\n  type = 'quad',\n  pointColor = 'black',\n  pointRayon = 0.05,\n  opacite = 1,\n  opaciteDeRemplissage = 1\n}) {\n  ObjetMathalea2D.call(this, {})\n  this.listeCoords = []\n  const plots = []\n  let xstep1, xstep2, ystep1, stepper\n  switch (type) {\n    case 'quad':\n      for (let x = xmin; x <= xmax; x += xstep) {\n        for (let y = ymin; y <= ymax; y += ystep) {\n          plots.push(plot(x, y, {\n            rayon: pointRayon,\n            couleur: pointColor,\n            opacite,\n            couleurDeRemplissage: 'black',\n            opaciteDeRemplissage\n          }))\n          this.listeCoords.push([x, y])\n        }\n      }\n      break\n    case 'hexa':\n      stepper = false\n      ystep1 = Math.min(xstep, ystep)\n      xstep1 = 0.866 * ystep1\n      xstep2 = 1.732 * ystep1\n      for (let x = xmin; x <= xmax; x += xstep2) {\n        for (let y = ymin; y <= ymax; y += 1.5 * ystep1) {\n          stepper = !stepper\n          if (stepper) {\n            plots.push(plot(x, y, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            plots.push(plot(x + xstep1, y + ystep1 / 2, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            plots.push(plot(x + xstep1, y + ystep1 * 1.5, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            this.listeCoords.push([x, y], [x + xstep1, y + ystep1 / 2], [x + xstep1, y + ystep1 * 1.5])\n          } else {\n            plots.push(plot(x, y + ystep1 / 2, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            this.listeCoords.push([x, y + ystep1 / 2])\n          }\n        }\n        stepper = !stepper\n      }\n      break\n    case 'equi':\n      stepper = false\n      ystep1 = Math.min(xstep, ystep)\n      xstep1 = 0.866 * ystep1\n      xstep2 = 1.732 * ystep1\n      for (let x = xmin; x <= xmax; x = x + xstep2) {\n        for (let y = ymin; y <= ymax; y = y + 1.5 * ystep1) {\n          stepper = !stepper\n          if (stepper) {\n            plots.push(plot(x, y, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            plots.push(plot(x, y + ystep1, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            plots.push(plot(x + xstep1, y + ystep1 / 2, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            plots.push(plot(x + xstep1, y + ystep1 * 1.5, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            this.listeCoords.push([x, y], [x, y + ystep1], [x + xstep1, y + ystep1 / 2], [x + xstep1, y + ystep1 * 1.5])\n          } else {\n            plots.push(plot(x + xstep1, y + ystep1, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            plots.push(plot(x, y + ystep1 / 2, {\n              rayon: pointRayon,\n              couleur: pointColor,\n              opacite,\n              couleurDeRemplissage: context.isHtml ? 'none' : '',\n              opaciteDeRemplissage\n            }))\n            this.listeCoords.push([x + xstep1, y + ystep1], [x, y + ystep1 / 2])\n          }\n        }\n        stepper = !stepper\n      }\n      break\n  }\n  this.svg = function (coeff) {\n    let code = ''\n    for (const objet of plots) {\n      code += objet.svg(coeff)\n    }\n    return code\n  }\n  this.tikz = function () {\n    let code = ''\n    for (const objet of plots) {\n      code += objet.tikz()\n    }\n    return code\n  }\n}\n\nexport function papierPointe ({\n  xmin = -10,\n  xmax = 10,\n  ymin = -10,\n  ymax = 10,\n  xstep = 1,\n  ystep = 1,\n  type = 'quad',\n  pointColor = 'black',\n  pointRayon = 0.05,\n  opacite = 0.4,\n  opaciteDeRemplissage = 0.4\n}) {\n  return new PapierPointe({\n    xmin,\n    xmax,\n    ymin,\n    ymax,\n    xstep,\n    ystep,\n    type,\n    pointColor,\n    pointRayon,\n    opacite,\n    opaciteDeRemplissage\n  })\n}\n\nexport function Repere ({\n  /**\n   * repere({xUnite, yUnite, xMin, xMax, yMin, yMax, axeX, axeY, axesEpaisseur, axesCouleur, axeXStyle, axeYStyle, thickEpaisseur,\n   * thickHauteur, thickCouleur, xThickDistance, xThickListe, xThickMin, xThickMax, yThickDistance, yThickListe,\n   * yThickMin, yThickMax, xLabelDistance, xLabelListe, xLabelMin, xLabelMax, yLabelDistance, yLabelListe,\n   * yLabelMin, yLabelMax, xLegende,xLegendePosition, yLegende, yLegendePosition, grille, grilleDistance,\n   * grilleCouleur,grilleOpacite, grilleEpaisseur, grilleSecondaire, grilleSecondaireDistance, grilleSecondaireCouleur,\n   * grilleSecondaireOpacite, grilleSecondaireEpaisseur, grilleX, grilleXListe, grilleXDistance, grilleXMin, grilleXMax,\n   * grilleXCouleur, grilleXOpacite, grilleY, grilleYListe, grilleYDistance, grilleYMin, grilleYMax, grilleYCouleur,\n   * grilleYOpacite, grilleSecondaireX, grilleSecondaireXListe, grilleSecondaireXDistance, grilleSecondaireXMin, grilleSecondaireXMax,\n   * grilleSecondaireXCouleur, grilleSecondaireXOpacite, grilleSecondaireY, grilleSecondaireYListe, grilleSecondaireYDistance,\n   * grilleSecondaireYMin, grilleSecondaireYMax, grilleSecondaireYCouleur, grilleSecondaireYOpacite})\n   *\n   * repere() trace un repère classique. De nombreux paramètres permettent d'en modifier l'aspect\n   *\n   * @author Rémi Angot\n   * @param {object} options\n   * @param {number}  options.xUnite = 1,\n   * @param {number}  options.yUnite = 1,\n   * @param {number}  options.xMin = -10,\n   * @param {number}  options.xMax = 10,\n   * @param {number}  options.yMin = -10,\n   * @param {number}  options.yMax = 10,\n   * @param {boolean?}  options.axeXisVisible = true,\n   * @param {boolean?}  options.axeYisVisible = true,\n   * @param {number}  options.axesEpaisseur = 2,\n   * @param {string}  options.axesCouleur = 'black',\n   * @param {string}  options.axeXStyle = '->',\n   * @param {string}  options.axeYStyle = '->',\n   * @param {number}  options.thickEpaisseur = 2,\n   * @param {number}  options.thickHauteur = 0.2,\n   * @param {string}  options.thickCouleur = axesCouleur,\n   * @param {number}  options.xThickDistance = 1,\n   * @param {number[]}  options.xThickListe = false,\n   * @param {number}  options.xThickMin = xMin + xThickDistance,\n   * @param {number}  options.xThickMax = xMax - xThickDistance,\n   * @param {number}  options.yThickDistance = 1,\n   * @param {number[]}  options.yThickListe = false,\n   * @param {number}  options.yThickMin = yMin + yThickDistance,\n   * @param {number}  options.yThickMax = yMax - yThickDistance,\n   * @param {number}  options.xLabelDistance = xThickDistance,\n   * @param {number[]}  options.xLabelListe = false,\n   * @param {number}  options.xLabelMin = xThickMin,\n   * @param {number}  options.xLabelMax = xThickMax,\n   * @param {number}  options.yLabelDistance = yThickDistance,\n   * @param {number[]}  options.yLabelListe = false,\n   * @param {number}  options.yLabelMin = yThickMin,\n   * @param {number}  options.yLabelMax = yThickMax,\n   * @param {number}  options.precisionLabelX = 1,\n   * @param {number}  options.precisionLabelY = 1,\n   * @param {number}  options.xLabelEcart = 0.5,\n   * @param {number}  options.yLabelEcart = 0.5,\n   * @param {string}  options.xLegende = '',\n   * @param {number}  options.xLegendePosition = [],\n   * @param {string}  options.yLegende = '',\n   * @param {number}  options.yLegendePosition = [],\n   * @param {boolean?}  options.grille = true,\n   * @param {number}  options.grilleDistance = false,\n   * @param {string}  options.grilleCouleur = 'black',\n   * @param {number}  options.grilleOpacite = 0.5,\n   * @param {number}  options.grilleEpaisseur = 1,\n   * @param {boolean?}  options.grilleSecondaire = false,\n   * @param {number}  options.grilleSecondaireDistance = false,\n   * @param {string}  options.grilleSecondaireCouleur = 'gray',\n   * @param {number}  options.grilleSecondaireOpacite = 0.3,\n   * @param {number}  options.grilleSecondaireEpaisseur = 1,\n   * @param {boolean?}  options.grilleX = grille,\n   * @param {number[]}  options.grilleXListe = false,\n   * @param {number}  options.grilleXDistance = grilleDistance,\n   * @param {number}  options.grilleXMin = false,\n   * @param {number}  options.grilleXMax = false,\n   * @param {string}  options.grilleXCouleur = grilleCouleur,\n   * @param {number}  options.grilleXOpacite = grilleOpacite,\n   * @param {boolean?}  options.grilleY = grille,\n   * @param {number[]}  options.grilleYListe = false,\n   * @param {number}  options.grilleYDistance = grilleDistance,\n   * @param {number}  options.grilleYMin = false,\n   * @param {number}  options.grilleYMax = false,\n   * @param {string}  options.grilleYCouleur = grilleCouleur,\n   * @param {number}  options.grilleYOpacite = grilleOpacite,\n   * @param {boolean?}  options.grilleSecondaireX = grilleSecondaire,\n   * @param {number[]}  options.grilleSecondaireXListe = false,\n   * @param {number}  options.grilleSecondaireXDistance = grilleSecondaireDistance,\n   * @param {number}  options.grilleSecondaireXMin = false,\n   * @param {number}  options.grilleSecondaireXMax = false,\n   * @param {string}  options.grilleSecondaireXCouleur = grilleSecondaireCouleur,\n   * @param {number}  options.grilleSecondaireXOpacite = grilleSecondaireOpacite,\n   * @param {boolean?}  options.grilleSecondaireY = grilleSecondaire,\n   * @param {number[]}  options.grilleSecondaireYListe = false,\n   * @param {number}  options.grilleSecondaireYDistance = grilleSecondaireDistance,\n   * @param {number}  options.grilleSecondaireYMin = false,\n   * @param {number}  options.grilleSecondaireYMax = false,\n   * @param {string}  options.grilleSecondaireYCouleur = grilleSecondaireCouleur,\n   * @param {number}  options.grilleSecondaireYOpacite = grilleSecondaireOpacite\n   */\n  xUnite = 1,\n  yUnite = 1,\n  xMin = -10,\n  xMax = 10,\n  yMin = -10,\n  yMax = 10,\n  axeXisVisible = true,\n  axeYisVisible = true,\n  axesEpaisseur = 2,\n  axesCouleur = 'black',\n  axeXStyle = '->',\n  axeYStyle = '->',\n  thickEpaisseur = 2,\n  thickHauteur = 0.2,\n  thickCouleur = axesCouleur,\n  xThickDistance = 1,\n  xThickListe = [],\n  xThickMin = xMin + xThickDistance,\n  xThickMax = xMax - xThickDistance,\n  yThickDistance = 1,\n  yThickListe = [],\n  yThickMin = yMin + yThickDistance,\n  yThickMax = yMax - yThickDistance,\n  xLabelDistance = xThickDistance,\n  xLabelListe = [],\n  xLabelMin = xThickMin,\n  xLabelMax = xThickMax,\n  yLabelDistance = yThickDistance,\n  yLabelListe = [],\n  yLabelMin = yThickMin,\n  yLabelMax = yThickMax,\n  precisionLabelX = 1,\n  precisionLabelY = 1,\n  xLabelEcart = 0.5,\n  yLabelEcart = 0.5,\n  xLegende = '',\n  xLegendePosition = [],\n  yLegende = '',\n  yLegendePosition = [],\n  grille = true,\n  grilleDistance = 1,\n  grilleCouleur = 'black',\n  grilleOpacite = 0.5,\n  grilleEpaisseur = 1,\n  grilleSecondaire = false,\n  grilleSecondaireDistance = 1,\n  grilleSecondaireCouleur = 'gray',\n  grilleSecondaireOpacite = 0.3,\n  grilleSecondaireEpaisseur = 1,\n  grilleX = grille,\n  grilleXListe = [],\n  grilleXDistance = grilleDistance,\n  grilleXMin = xMin,\n  grilleXMax = xMax,\n  grilleXCouleur = grilleCouleur,\n  grilleXOpacite = grilleOpacite,\n  grilleY = grille,\n  grilleYListe = [],\n  grilleYDistance = grilleDistance,\n  grilleYMin = yMin,\n  grilleYMax = yMax,\n  grilleYCouleur = grilleCouleur,\n  grilleYOpacite = grilleOpacite,\n  grilleSecondaireX = grilleSecondaire,\n  grilleSecondaireXListe = [],\n  grilleSecondaireXDistance = grilleSecondaireDistance,\n  grilleSecondaireXMin = xMin,\n  grilleSecondaireXMax = xMax,\n  grilleSecondaireXCouleur = grilleSecondaireCouleur,\n  grilleSecondaireXOpacite = grilleSecondaireOpacite,\n  grilleSecondaireY = grilleSecondaire,\n  grilleSecondaireYListe = [],\n  grilleSecondaireYDistance = grilleSecondaireDistance,\n  grilleSecondaireYMin = yMin,\n  grilleSecondaireYMax = yMax,\n  grilleSecondaireYCouleur = grilleSecondaireCouleur,\n  grilleSecondaireYOpacite = grilleSecondaireOpacite\n}) {\n  ObjetMathalea2D.call(this, {})\n\n  // Les propriétés exportables\n  this.xUnite = xUnite\n  this.yUnite = yUnite\n  this.xMin = xMin\n  this.xMax = xMax\n  this.yMin = yMin\n  this.yMax = yMax\n\n  this.bordures = [xMin * xUnite - 1, yMin * yUnite - 1, xMax * xUnite + 1 + xLegende.length / 3, yMax * yUnite + 1]\n\n  const objets = []\n  // LES AXES\n  const ordonneeAxe = Math.max(0, yMin)\n  if (xLegendePosition.length === 0) {\n    xLegendePosition = [xMax * xUnite + 0.5, 0.5 + ordonneeAxe]\n  }\n  const axeX = segment(xMin * xUnite, ordonneeAxe * yUnite, xMax * xUnite, ordonneeAxe * yUnite, axesCouleur)\n  axeX.epaisseur = axesEpaisseur\n  axeX.styleExtremites = axeXStyle\n  const abscisseAxe = Math.max(0, xMin)\n  if (yLegendePosition.length === 0) {\n    yLegendePosition = [0.5 + abscisseAxe, yMax * yUnite + 0.5]\n  }\n  const axeY = segment(abscisseAxe * xUnite, yMin * yUnite, abscisseAxe * xUnite, yMax * yUnite, axesCouleur)\n  axeY.epaisseur = axesEpaisseur\n  axeY.styleExtremites = axeYStyle\n  if (axeXisVisible) objets.push(axeX)\n  if (axeYisVisible) objets.push(axeY)\n  // Cache les objets intermédiaires pour ne pas les afficher en double dans mathalea2d.html\n  // axeX.isVisible = false\n  // axeY.isVisible = false\n  // GRILLE PRINCIPALE\n\n  // Les traits horizontaux\n  if (grilleY) {\n    if (grilleYListe.length === 0) {\n      // Ceux qui ne sont pas définis reprennent les valeurs de thick\n      if (typeof (grilleYMin) !== 'number') {\n        grilleYMin = yThickMin\n      }\n      if (typeof (grilleYMax) !== 'number') {\n        grilleYMax = yThickMax\n      }\n      if (!grilleYDistance) {\n        grilleYDistance = yThickDistance\n      }\n      // On créé la liste avec ces valeurs\n      grilleYListe = rangeMinMax(0, grilleYMax, [0], grilleYDistance / yUnite).concat(\n        rangeMinMax(0, -grilleYMin, [0], grilleYDistance / yUnite).map(el => -el)\n      )\n    }\n    for (const y of grilleYListe) {\n      if (y !== 0 || !axeXisVisible) {\n        const traitH = segment(xMin * xUnite, y * yUnite, xMax * xUnite, y * yUnite, grilleYCouleur)\n        //  traitH.isVisible = false // Pourquoi demander la création de ces traits si c'est pour les rendre invisibles ?\n        traitH.opacite = grilleYOpacite\n        traitH.epaisseur = grilleEpaisseur\n        if (grilleY === 'pointilles') {\n          traitH.pointilles = 5\n        }\n        objets.push(traitH)\n      }\n    }\n  }\n  // Les traits verticaux\n  if (grilleX) {\n    if (grilleXListe.length === 0) {\n      // Ceux qui ne sont pas définis reprennent les valeurs de thick\n      if (typeof (grilleXMin) !== 'number') {\n        grilleXMin = xThickMin\n      }\n      if (typeof (grilleXMax) !== 'number') {\n        grilleXMax = xThickMax\n      }\n      if (typeof (grilleXDistance) !== 'number') {\n        grilleXDistance = xThickDistance\n      }\n      // On créé la liste avec ces valeurs\n      grilleXListe = rangeMinMax(0, grilleXMax, [0], grilleXDistance / xUnite).concat(\n        rangeMinMax(0, -grilleXMin, [0], grilleXDistance / xUnite).map(el => -el)\n      )\n    }\n    for (const x of grilleXListe) {\n      if (x !== 0 || !axeYisVisible) {\n        const traitV = segment(x * xUnite, (this.grilleYMin ? this.grilleYMin : yMin) * yUnite, x * xUnite, (this.grilleYMax ? this.grilleYMax : yMax) * yUnite, grilleXCouleur)\n        //  traitV.isVisible = false\n        traitV.opacite = grilleXOpacite\n        traitV.epaisseur = grilleEpaisseur\n        if (grilleX === 'pointilles') {\n          traitV.pointilles = 5\n        }\n        objets.push(traitV)\n      }\n    }\n  }\n\n  // GRILLE SECONDAIRE\n\n  // Les traits horizontaux\n  if (grilleSecondaireY) {\n    if (grilleSecondaireYListe.length === 0) {\n      // Ceux qui ne sont pas définis reprennent les valeurs de thick\n      if (typeof (grilleSecondaireYMin) !== 'number') {\n        grilleSecondaireYMin = yThickMin\n      }\n      if (typeof (grilleSecondaireYMax) !== 'number') {\n        grilleSecondaireYMax = yThickMax\n      }\n      if (typeof (grilleSecondaireYDistance) !== 'number') {\n        grilleSecondaireYDistance = yThickDistance / 2\n      }\n      // On créé la liste avec ces valeurs\n      grilleSecondaireYListe = rangeMinMax(0, grilleSecondaireYMax, grilleYListe, grilleSecondaireYDistance).concat(\n        rangeMinMax(0, -grilleSecondaireYMin, grilleYListe, grilleSecondaireYDistance).map(el => -el)\n      )\n    }\n    for (const y of grilleSecondaireYListe) {\n      const traitH = segment((grilleSecondaireXMin || xMin) * xUnite, y * yUnite, (grilleSecondaireXMax || xMax) * xUnite, y * yUnite, grilleSecondaireYCouleur)\n      // traitH.isVisible = false\n      traitH.opacite = grilleSecondaireYOpacite\n      traitH.epaisseur = grilleSecondaireEpaisseur\n      if (grilleSecondaireY === 'pointilles') {\n        traitH.pointilles = 5\n      }\n      objets.push(traitH)\n    }\n  }\n  // Les traits verticaux\n  if (grilleSecondaireX) {\n    if (grilleSecondaireXListe.length === 0) {\n      // Ceux qui ne sont pas définis reprennent les valeurs de thick\n      if (typeof (grilleSecondaireXMin) !== 'number') {\n        grilleSecondaireXMin = xThickMin\n      }\n      if (typeof (grilleSecondaireXMax) !== 'number') {\n        grilleSecondaireXMax = xThickMax\n      }\n      if (typeof (grilleSecondaireXDistance) !== 'number') {\n        grilleSecondaireXDistance = xThickDistance / 2\n      }\n      // On créé la liste avec ces valeurs\n      grilleSecondaireXListe = rangeMinMax(0, grilleSecondaireXMax, grilleXListe, grilleSecondaireXDistance).concat(\n        rangeMinMax(0, -grilleSecondaireXMin, grilleXListe, grilleSecondaireXDistance).map(el => -el)\n      )\n    }\n    for (const x of grilleSecondaireXListe) {\n      const traitV = segment(x * xUnite, (grilleSecondaireYMin || yMin) * yUnite, x * xUnite, (grilleSecondaireYMax || yMax) * yUnite, grilleSecondaireXCouleur)\n      //  traitV.isVisible = false\n      traitV.opacite = grilleSecondaireXOpacite\n      traitV.epaisseur = grilleSecondaireEpaisseur\n      if (grilleSecondaireX === 'pointilles') {\n        traitV.pointilles = 5\n      }\n      objets.push(traitV)\n    }\n  }\n  // LES THICKS\n  if (axeXisVisible) {\n    if ((typeof xThickListe === 'boolean' && xThickListe) || (Array.isArray(xThickListe) && xThickListe.length === 0)) {\n      xThickListe = rangeMinMax(0, xThickMax, [0], xThickDistance).concat(\n        rangeMinMax(0, -xThickMin, [0], xThickDistance).map(el => -el)\n      )\n    } else if (typeof xThickListe === 'boolean') xThickListe = []\n\n    for (const x of xThickListe) {\n      const thick = segment(x * xUnite, ordonneeAxe * yUnite - thickHauteur, x * xUnite, ordonneeAxe * yUnite + thickHauteur, thickCouleur)\n      // thick.isVisible = false\n      thick.epaisseur = thickEpaisseur\n      objets.push(thick)\n    }\n  }\n  if (axeYisVisible) {\n    if ((typeof yThickListe === 'boolean' && yThickListe) || (Array.isArray(yThickListe) && yThickListe.length === 0)) {\n      yThickListe = rangeMinMax(0, yThickMax, [0], yThickDistance).concat(\n        rangeMinMax(0, -yThickMin, [0], yThickDistance).map(el => -el)\n      )\n    } else if (typeof yThickListe === 'boolean') yThickListe = []\n    for (const y of yThickListe) {\n      const thick = segment(abscisseAxe * xUnite - thickHauteur, y * yUnite, abscisseAxe * xUnite + thickHauteur, y * yUnite, thickCouleur)\n      // thick.isVisible = false\n      thick.epaisseur = thickEpaisseur\n      objets.push(thick)\n    }\n  }\n  // LES LABELS\n  if (axeXisVisible) {\n    if ((typeof xLabelListe === 'boolean' && xLabelListe) || (Array.isArray(xLabelListe) && xLabelListe.length === 0)) {\n      xLabelListe = rangeMinMax(0, xLabelMax, [0], xLabelDistance).concat(\n        rangeMinMax(0, -xLabelMin, [0], xLabelDistance).map(el => -el)\n      )\n    } else if (typeof xLabelListe === 'boolean') xLabelListe = []\n    for (const x of xLabelListe) {\n      let l\n      if (typeof x === 'number') {\n        if (x >= xMin && x <= xMax) {\n          l = texteParPosition(`${stringNombre(x, precisionLabelX)}`, x * xUnite, ordonneeAxe * yUnite - xLabelEcart, 'milieu', 'black', 1, 'middle', false)\n          //   l.isVisible = false\n          objets.push(l)\n        }\n      } else {\n        if (x.valeur <= xMax && x.valeur >= xMin) {\n          l = latexParCoordonnees(x.texte, x.valeur * xUnite, ordonneeAxe * yUnite - xLabelEcart * 2, 'black', 20, 20, '', 8)\n          //  l.isVisible = false\n          objets.push(l)\n        }\n      }\n    }\n  }\n  if (axeYisVisible) {\n    if ((typeof yLabelListe === 'boolean' && yLabelListe) || (Array.isArray(yLabelListe) && yLabelListe.length === 0)) {\n      yLabelListe = rangeMinMax(0, yLabelMax, [0], yLabelDistance).concat(\n        rangeMinMax(0, -yLabelMin, [0], yLabelDistance).map(el => -el)\n      )\n    } else if (typeof yLabelListe === 'boolean') yLabelListe = []\n    for (const y of yLabelListe) {\n      let l\n      if (typeof y === 'number') {\n        if (y >= yMin && y <= yMax) {\n          l = texteParPosition(`${stringNombre(y, precisionLabelY)}`, abscisseAxe * xUnite - yLabelEcart, y * yUnite, 'milieu', 'black', 1, 'middle', false)\n          //  l.isVisible = false\n          objets.push(l)\n        }\n      } else {\n        if (y.valeur >= yMin && y.valeur <= yMax) {\n          l = latexParCoordonnees(y.texte, abscisseAxe * xUnite - yLabelEcart, y.valeur * yUnite, 'black', 20, 20, '', 8)\n          //     l.isVisible = false\n          objets.push(l)\n        }\n      }\n    }\n  }\n  // LES LÉGENDES\n  if (xLegende.length > 0) {\n    objets.push(texteParPosition(xLegende, xLegendePosition[0], xLegendePosition[1], 'droite'))\n  }\n  if (yLegende.length > 0) {\n    objets.push(texteParPosition(yLegende, yLegendePosition[0], yLegendePosition[1], 'droite'))\n  }\n  this.objets = objets\n\n  this.addObjet = function (objet) {\n    if (!(objet instanceof ObjetMathalea2D)) return\n    this.objets = [...this.objets, objet]\n  }\n\n  this.trace = function () {\n    return this.objets\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\n/**\n *\n * @param {object} params\n * @return {object}\n * @author Rémi Angot\n */\nexport function repere ({\n  xUnite = 1,\n  yUnite = 1,\n  xMin = -10,\n  xMax = 10,\n  yMin = -10,\n  yMax = 10,\n  axeXisVisible = true,\n  axeYisVisible = true,\n  axesEpaisseur = 2,\n  axesCouleur = 'black',\n  axeXStyle = '->',\n  axeYStyle = '->',\n  thickEpaisseur = 2,\n  thickHauteur = 0.2,\n  thickCouleur = axesCouleur,\n  xThickDistance = 1,\n  xThickListe = [],\n  xThickMin = xMin + xThickDistance,\n  xThickMax = xMax - xThickDistance,\n  yThickDistance = 1,\n  yThickListe = [],\n  yThickMin = yMin + yThickDistance,\n  yThickMax = yMax - yThickDistance,\n  xLabelDistance = xThickDistance,\n  xLabelListe = [],\n  xLabelMin = xThickMin,\n  xLabelMax = xThickMax,\n  yLabelDistance = yThickDistance,\n  yLabelListe = [],\n  yLabelMin = yThickMin,\n  yLabelMax = yThickMax,\n  precisionLabelX = 1,\n  precisionLabelY = 1,\n  xLabelEcart = 0.5,\n  yLabelEcart = 0.5,\n  xLegende = '',\n  xLegendePosition = [xMax * xUnite + 0.5, 0.5],\n  yLegende = '',\n  yLegendePosition = [0.5, yMax * yUnite + 0.5],\n  grille = true,\n  grilleDistance = 1,\n  grilleCouleur = 'black',\n  grilleOpacite = 0.5,\n  grilleEpaisseur = 1,\n  grilleSecondaire = false,\n  grilleSecondaireDistance = 0.1,\n  grilleSecondaireCouleur = 'gray',\n  grilleSecondaireOpacite = 0.3,\n  grilleSecondaireEpaisseur = 1,\n  grilleX = grille,\n  grilleXListe = [],\n  grilleXDistance = grilleDistance,\n  grilleXMin,\n  grilleXMax,\n  grilleXCouleur = grilleCouleur,\n  grilleXOpacite = grilleOpacite,\n  grilleY = grille,\n  grilleYListe = [],\n  grilleYDistance = grilleDistance,\n  grilleYMin,\n  grilleYMax,\n  grilleYCouleur = grilleCouleur,\n  grilleYOpacite = grilleOpacite,\n  grilleSecondaireX = grilleSecondaire,\n  grilleSecondaireXListe = [],\n  grilleSecondaireXDistance = grilleSecondaireDistance,\n  grilleSecondaireXMin,\n  grilleSecondaireXMax,\n  grilleSecondaireXCouleur = grilleSecondaireCouleur,\n  grilleSecondaireXOpacite = grilleSecondaireOpacite,\n  grilleSecondaireY = grilleSecondaire,\n  grilleSecondaireYListe = [],\n  grilleSecondaireYDistance = grilleSecondaireDistance,\n  grilleSecondaireYMin,\n  grilleSecondaireYMax,\n  grilleSecondaireYCouleur = grilleSecondaireCouleur,\n  grilleSecondaireYOpacite = grilleSecondaireOpacite\n} = {}) {\n  return new Repere({\n    xUnite,\n    yUnite,\n    xMin,\n    xMax,\n    yMin,\n    yMax,\n    axeXisVisible,\n    axeYisVisible,\n    axesEpaisseur,\n    axesCouleur,\n    axeXStyle,\n    axeYStyle,\n    thickEpaisseur,\n    thickHauteur,\n    thickCouleur,\n    xThickDistance,\n    xThickListe,\n    xThickMin,\n    xThickMax,\n    yThickDistance,\n    yThickListe,\n    yThickMin,\n    yThickMax,\n    xLabelDistance,\n    xLabelListe,\n    xLabelMin,\n    xLabelMax,\n    yLabelDistance,\n    yLabelListe,\n    yLabelMin,\n    yLabelMax,\n    precisionLabelX,\n    precisionLabelY,\n    xLabelEcart,\n    yLabelEcart,\n    xLegende,\n    xLegendePosition,\n    yLegende,\n    yLegendePosition,\n    grille,\n    grilleDistance,\n    grilleCouleur,\n    grilleOpacite,\n    grilleEpaisseur,\n    grilleSecondaire,\n    grilleSecondaireDistance,\n    grilleSecondaireCouleur,\n    grilleSecondaireOpacite,\n    grilleSecondaireEpaisseur,\n    grilleX,\n    grilleXListe,\n    grilleXDistance,\n    grilleXMin,\n    grilleXMax,\n    grilleXCouleur,\n    grilleXOpacite,\n    grilleY,\n    grilleYListe,\n    grilleYDistance,\n    grilleYMin,\n    grilleYMax,\n    grilleYCouleur,\n    grilleYOpacite,\n    grilleSecondaireX,\n    grilleSecondaireXListe,\n    grilleSecondaireXDistance,\n    grilleSecondaireXMin,\n    grilleSecondaireXMax,\n    grilleSecondaireXCouleur,\n    grilleSecondaireXOpacite,\n    grilleSecondaireY,\n    grilleSecondaireYListe,\n    grilleSecondaireYDistance,\n    grilleSecondaireYMin,\n    grilleSecondaireYMax,\n    grilleSecondaireYCouleur,\n    grilleSecondaireYOpacite\n  })\n}\n\n/**\n * Place un point dans un repère (en récupérant xUnite et yUnite d'un objet repère)\n *\n *\n * @param {integer} x\n * @param {integer} y\n * @param {object} repere\n * @author Rémi Angot\n */\nexport function pointDansRepere (x, y, repere = { xUnite: 1, yUnite: 1 }) {\n  return point(x * repere.xUnite, y * repere.yUnite)\n}\n"],"names":["DroiteGraduee","Unite","Min","Max","x","y","axeEpaisseur","axeCouleur","axeStyle","axeHauteur","axePosition","thickEpaisseur","thickCouleur","thickDistance","thickOffset","thickSecDist","thickSec","thickTerDist","thickTer","pointListe","labelPointTaille","labelPointLargeur","pointCouleur","pointTaille","pointStyle","pointOpacite","pointEpaisseur","labelsPrincipaux","labelsSecondaires","step1","step2","labelCustomDistance","context","labelDistance","labelListe","labelColor","labelScale","Legende","LegendePosition","objets","S","T","P","i","longueurTotale","absord","segment","point","factor","r","Min2","Max2","pas1","pas2","j","latexParCoordonnees","nombreAvecEspace","arrondi","t","p","texteParPosition","lab","tracePoint","droiteGraduee","AxeY","ymin","ymax","thick","ystep","epaisseur","color","ytick","titre","Fraction","FractionEtendue","fraction","ObjetMathalea2D","texteParPoint","ordonnee","s","objet","coeff","code","axeY","LabelY","step","pos","ceil","stringNombre","labelY","Grille","xmin","xmax","opacite","pointilles","amp","grille","LignesHorizontales","lignesHorizontales","LignesVerticales","lignesVerticales","Seyes","opacite1","opacite2","d","seyes","PapierPointe","xstep","type","pointColor","pointRayon","opaciteDeRemplissage","plots","xstep1","xstep2","ystep1","stepper","plot","papierPointe","Repere","xUnite","yUnite","xMin","xMax","yMin","yMax","axeXisVisible","axeYisVisible","axesEpaisseur","axesCouleur","axeXStyle","axeYStyle","thickHauteur","xThickDistance","xThickListe","xThickMin","xThickMax","yThickDistance","yThickListe","yThickMin","yThickMax","xLabelDistance","xLabelListe","xLabelMin","xLabelMax","yLabelDistance","yLabelListe","yLabelMin","yLabelMax","precisionLabelX","precisionLabelY","xLabelEcart","yLabelEcart","xLegende","xLegendePosition","yLegende","yLegendePosition","grilleDistance","grilleCouleur","grilleOpacite","grilleEpaisseur","grilleSecondaire","grilleSecondaireDistance","grilleSecondaireCouleur","grilleSecondaireOpacite","grilleSecondaireEpaisseur","grilleX","grilleXListe","grilleXDistance","grilleXMin","grilleXMax","grilleXCouleur","grilleXOpacite","grilleY","grilleYListe","grilleYDistance","grilleYMin","grilleYMax","grilleYCouleur","grilleYOpacite","grilleSecondaireX","grilleSecondaireXListe","grilleSecondaireXDistance","grilleSecondaireXMin","grilleSecondaireXMax","grilleSecondaireXCouleur","grilleSecondaireXOpacite","grilleSecondaireY","grilleSecondaireYListe","grilleSecondaireYDistance","grilleSecondaireYMin","grilleSecondaireYMax","grilleSecondaireYCouleur","grilleSecondaireYOpacite","ordonneeAxe","axeX","abscisseAxe","rangeMinMax","el","traitH","traitV","l","repere","pointDansRepere"],"mappings":"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"}