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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"}