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/courbes-oSx9bP9E.js.map
{"version":3,"file":"courbes-oSx9bP9E.js","sources":["../../src/lib/2d/courbes.js"],"sourcesContent":["import { colorToLatexOrHTML, ObjetMathalea2D } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport { inferieurouegal } from '../../modules/outils.js'\nimport { point, tracePoint } from './points.js'\nimport { motifs, polygone, polyline } from './polygones.js'\nimport { segment } from './segmentsVecteurs.js'\nimport { texteParPosition } from './textes.js'\nimport { arc } from './cercle.js'\n\nexport function LectureImage (x, y, xscale = 1, yscale = 1, color = 'red', textAbs = '', textOrd = '') {\n  ObjetMathalea2D.call(this, {})\n  this.x = x\n  this.y = y\n  this.xscale = xscale\n  this.yscale = yscale\n  if (textAbs === '') textAbs = x.toString()\n  if (textOrd === '') textOrd = y.toString()\n  this.textAbs = textAbs\n  this.textOrd = textOrd\n  this.color = color\n\n  this.svg = function (coeff) {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x0, y0)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(X, M, this.color)\n    const Sy = segment(M, Y, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.svg(coeff) + '\\t\\n' + Sy.svg(coeff) + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 * 20 / coeff, 'milieu', this.color).svg(coeff) + '\\t\\n' + texteParPosition(this.textOrd, -1 * 20 / coeff, y0, 'milieu', this.color).svg(coeff)\n  }\n  this.tikz = function () {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x0, y0)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(X, M, this.color)\n    const Sy = segment(M, Y, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.tikz() + '\\t\\n' + Sy.tikz() + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 / context.scale, 'milieu', this.color).tikz() + '\\t\\n' + texteParPosition(this.textOrd, -1 / context.scale, y0, 'milieu', this.color).tikz()\n  }\n  this.svgml = function (coeff, amp) {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x, y)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(X, M, this.color)\n    const Sy = segment(M, Y, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.svgml(coeff, amp) + '\\t\\n' + Sy.svgml(coeff, amp) + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 * 20 / coeff, 'milieu', this.color).svg(coeff) + '\\t\\n' + texteParPosition(this.textOrd, -1 * 20 / coeff, y0, 'milieu', this.color).svg(coeff)\n  }\n  this.tikzml = function (amp) {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x, y)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(X, M, this.color)\n    const Sy = segment(M, Y, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.tikzml(amp) + '\\t\\n' + Sy.tikzml(amp) + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 / context.scale, 'milieu', this.color).tikz() + '\\t\\n' + texteParPosition(this.textOrd, -1 / context.scale, y0, 'milieu', this.color).tikz()\n  }\n}\n\nexport function lectureImage (...args) {\n  return new LectureImage(...args)\n}\n\nexport function LectureAntecedent (x, y, xscale, yscale, color = 'black', textOrd, textAbs) {\n  //\n  ObjetMathalea2D.call(this, {})\n  this.x = x\n  this.y = y\n  this.xscale = xscale\n  this.yscale = yscale\n  if (textAbs == null) textAbs = this.x.toString().replace('.', ',')\n  if (textOrd == null) textOrd = this.y.toString().replace('.', ',')\n  this.textAbs = textAbs\n  this.textOrd = textOrd\n  this.color = color\n  this.bordures = [x - 0.5, y < 0 ? y - 0.5 : -0.7, x + 0.5, y > 0 ? y + 0.5 : 0]\n\n  this.svg = function (coeff) {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x0, y0)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(M, X, this.color)\n    const Sy = segment(Y, M, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.svg(coeff) + '\\t\\n' + Sy.svg(coeff) + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 * 20 / coeff, 'milieu', this.color).svg(coeff) + '\\t\\n' + texteParPosition(this.textOrd, -1 * 20 / coeff, y0, 'milieu', this.color).svg(coeff)\n  }\n  this.tikz = function () {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x0, y0)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(M, X, this.color)\n    const Sy = segment(Y, M, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.tikz() + '\\t\\n' + Sy.tikz() + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 / context.scale, 'milieu', this.color).tikz() + '\\t\\n' + texteParPosition(this.textOrd, -1 / context.scale, y0, 'milieu', this.color).tikz()\n  }\n  this.svgml = function (coeff, amp) {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x0, y0)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(M, X, this.color)\n    const Sy = segment(Y, M, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.svgml(coeff, amp) + '\\t\\n' + Sy.svgml(coeff, amp) + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 * 20 / coeff, 'milieu', this.color).svg(coeff) + '\\t\\n' + texteParPosition(this.textOrd, -1 * 20 / coeff, y0, 'milieu', this.color).svg(coeff)\n  }\n  this.tikzml = function (amp) {\n    const x0 = this.x / this.xscale\n    const y0 = this.y / this.yscale\n    const M = point(x0, y0)\n    const X = point(x0, 0)\n    const Y = point(0, y0)\n    const Sx = segment(M, X, this.color)\n    const Sy = segment(Y, M, this.color)\n    Sx.styleExtremites = '->'\n    Sy.styleExtremites = '->'\n    Sx.pointilles = 5\n    Sy.pointilles = 5\n    return '\\t\\n' + Sx.tikzml(amp) + '\\t\\n' + Sy.tikzml(amp) + '\\t\\n' + texteParPosition(this.textAbs, x0, -1 / context.scale, 'milieu', this.color).tikz() + '\\t\\n' + texteParPosition(this.textOrd, -1 / context.scale, y0, 'milieu', this.color).tikz()\n  }\n}\n\nexport function lectureAntecedent (...args) {\n  return new LectureAntecedent(...args)\n}\n\n/**\n * Trace la courbe d'une fonction dans un repère\n * @param {function} f fonction à tracer comme par exemple : const f = x => a * x ** 2 + b * x + c\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = {}]  Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du tracé de la courbe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du tracé de la courbe\n * @param {number} [parametres.xMin = repere.xMin]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.xMax = repere.xMax]  Abscisse maximale du tracé de la courbe\n * @param {number} [parametres.yMin = repere.yMin]  Ordonnée minimale du tracé de la courbe\n * @param {number} [parametres.yMax = repere.yMax]  Ordonnée maximale du tracé de la courbe\n * @param {boolean|number} [parametres.step = false] Si false, le pas entre deux abscisses du tracé de la fonction est 0.2/xUnite. Sinon, ce pas vaut la valeur indiquée.\n * @param {number} [parametres.xUnite = 1]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.yUnite = 1]  Abscisse maximale du tracé de la courbe\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 du tracé de la courbe. À associer obligatoirement à colorToLatexOrHTML().\n * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Aout 2022\nexport function Courbe (f, {\n  repere = {},\n  color = 'black',\n  epaisseur = 2,\n  step = false,\n  xMin = repere.xMin,\n  xMax = repere.xMax,\n  yMin = repere.yMin,\n  yMax = repere.yMax,\n  xUnite = 1,\n  yUnite = 1\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  this.bordures = repere.bordures ?? [0, 0, 0, 0]\n\n  this.color = color\n  let xunite, yunite // Tout en minuscule pour les différencier des paramètres de la fonction\n  xunite = repere.xUnite\n  yunite = repere.yUnite\n\n  if (isNaN(xunite)) {\n    xunite = xUnite\n  }\n\n  if (isNaN(yunite)) {\n    yunite = yUnite\n  }\n\n  const objets = []\n  let points = []\n  let pas\n  let p\n  if (!step) {\n    pas = 0.2 / xUnite\n  } else {\n    pas = step\n  }\n  for (let x = xMin; inferieurouegal(x, xMax); x += pas\n  ) {\n    const y = Number(f(x))\n    if (isFinite(y)) {\n      if (f(x) < yMax + 1 && f(x) > yMin - 1) {\n        points.push(point(x * xunite, f(x) * yunite))\n      } else {\n        if (points.length > 1) {\n          p = polyline([...points], this.color)\n          p.epaisseur = epaisseur\n          objets.push(p)\n          points = []\n        }\n      }\n    } else {\n      x += 0.05\n    }\n  }\n  if (points.length > 1) {\n    p = polyline([...points], this.color)\n    p.epaisseur = epaisseur\n    objets.push(p)\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 += '\\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 * Trace la courbe d'une fonction dans un repère\n * @param {function} f Fonction à tracer comme par exemple : const f = x => a * x ** 2 + b * x + c\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere = {}] Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du tracé de la courbe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du tracé de la courbe\n * @param {number} [parametres.xMin = repere.xMin]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.xMax = repere.xMax]  Abscisse maximale du tracé de la courbe\n * @param {number} [parametres.yMin = repere.yMin]  Ordonnée minimale du tracé de la courbe\n * @param {number} [parametres.yMax = repere.yMax]  Ordonnée maximale du tracé de la courbe\n * @param {boolean|number} [parametres.step = false] Si false, le pas entre deux abscisses du tracé de la fonction est 0.2/xUnite. Sinon, ce pas vaut la valeur indiquée.\n * @param {number} [parametres.xUnite = 1]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.yUnite = 1]  Abscisse maximale du tracé de la courbe\n * @example courbe(g, {repere: r})\n * // Trace, en noir avec une épaisseur de 2, la courbe g dans le repère r, tous deux précédemment définis.\n * @example courbe(g, {repere: r, epaisseur: 5, color: 'blue'})\n * // Trace la courbe g dans le repère r, tous deux précédemment définis, en bleu, avec une épaisseur de 5.\n * @author Rémi Angot\n * @return {Courbe}\n */\n// JSDOC Validee par EE Aout 2022\nexport function courbe (f, {\n  repere = {},\n  color = 'black',\n  epaisseur = 2,\n  step = false,\n  xMin,\n  xMax,\n  yMin,\n  yMax,\n  xUnite = 1,\n  yUnite = 1\n} = {}) {\n  return new Courbe(f, { repere, color, epaisseur, step, xMin, xMax, yMin, yMax, xUnite, yUnite })\n}\n\n/**\n * Trace l'aire entre la courbe d'une fonction et l'axe des abscisses\n * @param {function} f fonction dont on veut tracer l'aire entre sa courbe et l'axe des abscisses comme par exemple : const f = x => a * x ** 2 + b * x + c\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = {}]  Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du contour de l'aire : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du contour de l'aire\n * @param {string} [parametres.couleurDeRemplissage = 'blue']  Couleur de l'intérieur de l'aire : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.opacite = 0.5] Taux d'opacité du remplissage entre 0 et 1\n * @param {number} [parametres.hachures = 0] Style des hachures dans cette aire (entier entre 0 et 10).\n * @param {boolean|number} [parametres.step = false] Si false, le pas entre deux abscisses pour tracer l'aire est 0.2/xUnite. Sinon, ce pas vaut la valeur indiquée.\n * @param {number} [parametres.a = 0]  Abscisse minimale du tracé de la courbe avec a < b\n * @param {number} [parametres.b = 1]  Abscisse maximale du tracé de la courbe avec a < b\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 du contour de l'aire. À associer obligatoirement à colorToLatexOrHTML().\n * @property {string} couleurDeRemplissage Couleur de l'intérieur de l'aire. À associer obligatoirement à colorToLatexOrHTML().\n * @property {number} xUnite Unité des abscisses du repère\n * @property {number} yUnite Unité des ordonnées du repère\n * @property {number} ymin Ordonnée minimale du repère\n * @property {number} ymax Ordonnée maximale du repère\n * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Juin 2022\nexport function Integrale (f, {\n  repere = {},\n  color = 'black',\n  couleurDeRemplissage = 'blue',\n  epaisseur = 2,\n  step = false,\n  a = 0,\n  b = 1,\n  opacite = 0.5,\n  hachures = 0\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  this.color = color\n  this.couleurDeRemplissage = couleurDeRemplissage\n  const ymin = repere.yMin\n  const ymax = repere.yMax\n  const xunite = repere.xUnite\n  const yunite = repere.yUnite\n\n  const objets = []\n  const points = []\n  let pas\n  if (!step) {\n    pas = 0.2 / xunite\n  } else {\n    pas = step\n  }\n  for (let x = a; inferieurouegal(x, b); x += pas\n  ) {\n    if (isFinite(f(x))) {\n      if (f(x) < ymax + 1 && f(x) > ymin - 1) {\n        points.push(point(x * xunite, f(x) * yunite))\n      } else {\n        window.notify('Erreur dans Integrale : Il semble que la fonction ne soit pas continue sur l\\'intervalle', {\n          f,\n          a,\n          b\n        })\n      }\n    } else {\n      x += 0.05\n    }\n  }\n  points.push(point(b * xunite, f(b) * yunite), point(b * xunite, 0), point(a * xunite, 0))\n  const p = polygone([...points], this.color)\n  p.epaisseur = epaisseur\n  p.couleurDeRemplissage = colorToLatexOrHTML(this.couleurDeRemplissage)\n  p.opaciteDeRemplissage = opacite\n  p.hachures = motifs(hachures)\n  objets.push(p)\n  this.bordures = repere.bordures\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 * Trace l'aire entre la courbe d'une fonction et l'axe des abscisses\n * @param {function} f fonction dont on veut tracer l'aire entre sa courbe et l'axe des abscisses comme par exemple : const f = x => a * x ** 2 + b * x + c\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = {}]  Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du contour de l'aire : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du contour de l'aire\n * @param {string} [parametres.couleurDeRemplissage = 'blue']  Couleur de l'intérieur de l'aire : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.opacite = 0.5] Taux d'opacité du remplissage entre 0 et 1\n * @param {number} [parametres.hachures = 0] Style des hachures dans cette aire (entier entre 0 et 10).\n * @param {boolean|number} [parametres.step = false] Si false, le pas entre deux abscisses pour tracer l'aire est 0.2/xUnite. Sinon, ce pas vaut la valeur indiquée.\n * @param {number} [parametres.a = 0]  Abscisse minimale du tracé de la courbe avec a < b\n * @param {number} [parametres.b = 1]  Abscisse maximale du tracé de la courbe avec a < b\n * @example integrale(g, {repere: r})\n * // Trace avec une épaisseur de 2, l'aire entre la courbe de la fonction g et l'axe des abscisses dans le repère r, tous deux précédemment définis.\n * @example integrale(g,  {repere: r, epaisseur: 5, color: 'blue', couleurDeRemplissage: 'red'})\n * // Trace avec une épaisseur de 5, l'aire entre la courbe de la fonction g et l'axe des abscisses dans le repère r, tous deux précédemment définis. L'aire est entourée de bleu et remplie de rouge.\n * @author Rémi Angot\n * @return {Integrale}\n */\n// JSDOC Validee par EE Juin 2022\nexport function integrale (f, {\n  repere = {},\n  color = 'black',\n  couleurDeRemplissage = 'blue',\n  epaisseur = 2,\n  step = false,\n  a = 0,\n  b = 1,\n  opacite = 0.5,\n  hachures = 0\n} = {}) {\n  return new Integrale(f, { repere, color, couleurDeRemplissage, epaisseur, step, a, b, opacite, hachures })\n}\n\n/**\n * Trace la courbe d'une fonction, précédemment définie comme Spline, dans un repère\n * @param {function} f fonction à tracer défine, au préalable, avec splineCatmullRom()\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = {}] Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du tracé de la courbe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du tracé de la courbe\n * @param {number} [parametres.xMin = repere.xMin]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.xMax = repere.xMax]  Abscisse maximale du tracé de la courbe\n * @param {number} [parametres.yMin = repere.yMin]  Ordonnée minimale du tracé de la courbe\n * @param {number} [parametres.yMax = repere.yMax]  Ordonnée maximale du tracé de la courbe\n * @param {boolean|number} [parametres.step = false] Si false, le pas entre deux abscisses du tracé de la fonction est 0.2/xUnite. Sinon, ce pas vaut la valeur indiquée.\n * @param {number} [parametres.xUnite = 1]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.yUnite = 1]  Abscisse maximale du tracé de la courbe\n * @param {boolean} [parametres.traceNoeuds = true]  Place (ou non) les points définis dans le paramètre f.\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 {string} color Couleur du tracé de la courbe. À associer obligatoirement à colorToLatexOrHTML().\n * @author Jean-Claude Lhote\n * @class\n */\n// JSDOC Validee par EE Juin 2022\nexport function CourbeSpline (f, {\n  repere = {},\n  color = 'black',\n  epaisseur = 2,\n  step = false,\n  xMin = repere.xMin,\n  xMax = repere.xMax,\n  yMin = repere.yMin,\n  yMax = repere.yMax,\n  xUnite = 1,\n  yUnite = 1,\n  traceNoeuds = true\n} = {}) {\n  ObjetMathalea2D.call(this, {})\n  this.color = color\n  const noeuds = []\n  let points = []\n  let xunite, yunite // Tout en minuscule pour les différencier des paramètres de la fonction\n  xunite = repere.xUnite\n  yunite = repere.yUnite\n\n  if (isNaN(xunite)) {\n    xunite = xUnite\n  }\n\n  if (isNaN(yunite)) {\n    yunite = yUnite\n  }\n\n  const objets = []\n  if (traceNoeuds) {\n    for (let i = 0; i < f.x.length; i++) {\n      noeuds[i] = tracePoint(point(f.x[i], f.y[i]), 'black')\n      noeuds[i].taille = 3\n      noeuds[i].style = '+'\n      noeuds[i].epaisseur = 2\n      noeuds.opacite = 0.5\n      objets.push(noeuds[i])\n    }\n  }\n  let pas\n  let p, y\n  if (!step) {\n    pas = 0.2 / xUnite\n  } else {\n    pas = step\n  }\n  for (let x = xMin; inferieurouegal(x, xMax); x = x + pas) {\n    y = f.image(x)\n    if (!isNaN(y)) {\n      if (y < yMax + 1 && y > yMin - 1) {\n        points.push(point(x * xunite, y * yunite))\n      } else if (points.length > 0) {\n        p = polyline([...points], this.color)\n        p.epaisseur = epaisseur\n        p.opacite = 0.7\n        objets.push(p)\n        points = []\n      }\n    } else {\n      x += 0.05\n    }\n  }\n  p = polyline([...points], this.color)\n  p.epaisseur = epaisseur\n  p.opacite = 0.7\n  objets.push(p)\n  this.bordures = repere.bordures\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 la courbe d'une fonction, précédemment définie comme Spline, dans un repère\n * @param {function} f fonction à tracer défine, au préalable, avec splineCatmullRom()\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = {}] Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du tracé de la courbe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du tracé de la courbe\n * @param {number} [parametres.xMin = repere.xMin]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.xMax = repere.xMax]  Abscisse maximale du tracé de la courbe\n * @param {number} [parametres.yMin = repere.yMin]  Ordonnée minimale du tracé de la courbe\n * @param {number} [parametres.yMax = repere.yMax]  Ordonnée maximale du tracé de la courbe\n * @param {boolean|number} [parametres.step = false] Si false, le pas entre deux abscisses du tracé de la fonction est 0.2/xUnite. Sinon, ce pas vaut la valeur indiquée.\n * @param {number} [parametres.xUnite = 1]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.yUnite = 1]  Abscisse maximale du tracé de la courbe\n * @param {boolean} [parametres.traceNoeuds = true]  Place (ou non) les points définis dans le paramètre f.\n * @example courbeSpline(g, {repere: r})\n * // Trace, en noir avec une épaisseur de 2, la courbe spline g dans le repère r, tous deux précédemment définis.\n * @example courbeSpline(g, {repere: r, epaisseur: 5, color: 'blue'})\n * // Trace la courbe spline g dans le repère r, tous deux précédemment définis, en bleu, avec une épaisseur de 5.\n * @author Jean-Claude Lhote\n * @return {CourbeSpline}\n */\n// JSDOC Validee par EE Juin 2022\nexport function courbeSpline (f, {\n  repere = {},\n  color = 'black',\n  epaisseur = 2,\n  step = false,\n  xMin = repere.xMin,\n  xMax = repere.xMax,\n  yMin = repere.yMin,\n  yMax = repere.yMax,\n  xUnite = 1,\n  yUnite = 1,\n  traceNoeuds = true\n} = {}) {\n  return new CourbeSpline(f, { repere, color, epaisseur, step, xMin, xMax, yMin, yMax, xUnite, yUnite, traceNoeuds })\n}\n\n/**\n * @see : https://gist.github.com/ericelliott/80905b159e1f3b28634ce0a690682957\n * @private\n */\n// y1: start value\n// y2: end value\n// mu: the current frame of the interpolation,\n//     in a linear range from 0-1.\nconst cosineInterpolate = (y1, y2, mu) => {\n  const mu2 = (1 - Math.cos(mu * Math.PI)) / 2\n  return y1 * (1 - mu2) + y2 * mu2\n}\n\n/**\n * Trace la courbe d'une fonction interpolée, linéaire par parties, dans un repère\n * @param {Array.number[]} tableau Ce tableau de tableaux contient les coordonnées des points à rejoindre comme par exemple : [[-5,2],[-1,-7],[2,5],[3,-1]]\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = { xMin: -1, yMin: 1 }] Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du tracé de la courbe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du tracé de la courbe\n * @param {number} [parametres.xMin = repere.xMin]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.xMax = repere.xMax]  Abscisse maximale du tracé de la courbe\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 CourbeInterpolee (\n  tableau,\n  {\n    color = 'black',\n    epaisseur = 2,\n    repere = { xMin: -1, yMin: 1 },\n    xMin = repere.xMin,\n    xMax = repere.xMax\n  } = {}) {\n  ObjetMathalea2D.call(this, {})\n  const mesCourbes = []\n  for (let i = 0; i < tableau.length - 1; i++) {\n    const x0 = tableau[i][0]\n    const y0 = tableau[i][1]\n    const x1 = tableau[i + 1][0]\n    const y1 = tableau[i + 1][1]\n    const f = (x) => cosineInterpolate(y0, y1, (x - x0) / (x1 - x0))\n    let depart, fin\n    xMin > x0 ? (depart = xMin) : (depart = x0)\n    xMax < x1 ? (fin = xMax) : (fin = x1)\n    const c = courbe(f, { repere, xMin: depart, xMax: fin, color, epaisseur })\n    mesCourbes.push(c)\n  }\n  const lesY = tableau.map(el => el[1])\n  const lesX = tableau.map(el => el[0])\n  this.bordures = [Math.min(...lesX), Math.min(...lesY), Math.max(...lesX), Math.max(...lesY)]\n  this.svg = function (coeff) {\n    let code = ''\n    for (const objet of mesCourbes) {\n      code += '\\n\\t' + objet.svg(coeff)\n    }\n    return code\n  }\n  this.tikz = function () {\n    let code = ''\n    for (const objet of mesCourbes) {\n      code += '\\n\\t' + objet.tikz()\n    }\n    return code\n  }\n}\n\n/**\n * Trace la courbe d'une fonction interpolée, linéaire par parties, dans un repère\n * @param {Array.number[]} tableau Ce tableau de tableaux contient les coordonnées des points à rejoindre comme par exemple : [[-5,2],[-1,-7],[2,5],[3,-1]]\n * @param {Object} parametres À saisir entre accolades\n * @param {Repere} [parametres.repere  = {}]  Repère dans lequel le tracé de la fonction se fait\n * @param {string} [parametres.color = 'black']  Couleur du tracé de la courbe : du type 'blue' ou du type '#f15929'\n * @param {number} [parametres.epaisseur = 2]  Epaisseur du tracé de la courbe\n * @param {number} [parametres.xMin = repere.xMin]  Abscisse minimale du tracé de la courbe\n * @param {number} [parametres.xMax = repere.xMax]  Abscisse maximale du tracé de la courbe\n * @example courbeInterpolee(tab, {repere: r})\n * // Trace, en noir avec une épaisseur de 2, la courbe de la fonction interpolée sur les intervalles définis dans tab, dans le repère r, tous deux précédemment définis.\n * @example courbeInterpolee(tab, {repere: r, epaisseur: 5, color: 'blue'})\n * // Trace la courbe de la fonction interpolée sur les intervalles définis dans tab, dans le repère r, tous deux précédemment définis, en bleu avec une épaisseur de 5.\n * @author Rémi Angot\n * @return {CourbeInterpolee}\n */\n// JSDOC Validee par EE Juin 2022\nexport function courbeInterpolee (tableau, {\n  color = 'black',\n  epaisseur = 1,\n  repere = {},\n  xMin = -10,\n  xMax = 10\n} = {}) {\n  return new CourbeInterpolee(tableau, { color, epaisseur, repere, xMin, xMax })\n}\n\nexport function GraphiqueInterpole (\n  tableau, {\n    color = 'black',\n    epaisseur = 1,\n    repere = {}, // repère par défaut : le laisser...\n    step = 0.2\n  } = {}\n) {\n  ObjetMathalea2D.call(this, {})\n  const mesCourbes = []\n  for (let i = 0; i < tableau.length - 1; i++) {\n    const x0 = tableau[i][0]\n    const y0 = tableau[i][1]\n    const x1 = tableau[i + 1][0]\n    const y1 = tableau[i + 1][1]\n    const f = (x) => cosineInterpolate(y0, y1, (x - x0) / (x1 - x0))\n    let depart, fin\n    repere.xMin > x0 ? (depart = repere.xMin) : (depart = x0)\n    repere.xMax < x1 ? (fin = repere.xMax) : (fin = x1)\n    const c = courbe(f, {\n      repere,\n      step,\n      xMin: depart,\n      xMax: fin,\n      color,\n      epaisseur,\n      xUnite: repere.xUnite,\n      yUnite: repere.yUnite,\n      yMin: repere.yMin,\n      yMax: repere.yMax\n    })\n    mesCourbes.push(c)\n  }\n  this.bordures = repere.bordures\n  this.svg = function (coeff) {\n    let code = ''\n    for (const objet of mesCourbes) {\n      code += '\\n\\t' + objet.svg(coeff)\n    }\n    return code\n  }\n  this.tikz = function () {\n    let code = ''\n    for (const objet of mesCourbes) {\n      code += '\\n\\t' + objet.tikz()\n    }\n    return code\n  }\n}\n\n/**\n *\n *\n * @author Rémi Angot\n */\nexport function graphiqueInterpole (...args) {\n  return new GraphiqueInterpole(...args)\n}\n\nexport function imageInterpolee (tableau, antecedent) {\n  const x0 = tableau[0][0]\n  const y0 = tableau[0][1]\n  const x1 = tableau[1][0]\n  const y1 = tableau[1][1]\n  const f = (x) => cosineInterpolate(y0, y1, (x - x0) / (x1 - x0))\n  return f(antecedent)\n}\n\nexport function antecedentInterpole (tableau, image) {\n  const x0 = tableau[0][0]\n  const y0 = tableau[0][1]\n  const x1 = tableau[1][0]\n  const y1 = tableau[1][1]\n  const f = (x) => cosineInterpolate(y0, y1, (x - x0) / (x1 - x0))\n  return antecedentParDichotomie(x0, x1, f, image, 0.01)\n}\n\nexport function antecedentParDichotomie (xmin, xmax, f, y, precision = 0.01) {\n  // On arrondit à 1E-6 parce que sinon, on passe à côté de valeur qui devraient être nulle mais le sont pas à 1E-15 !\n  const ymax = Number(Math.max(f(xmax), f(xmin)).toFixed(6))\n  const ymin = Number(Math.min(f(xmax), f(xmin)).toFixed(6))\n  if (y > ymax || y < ymin) return false // y n'est pas entre les deux extrêmes, la méthode ne fonctionne pas.\n  let xmoy, ymoy\n  if (xmin > xmax) {\n    xmoy = xmin\n    xmin = xmax\n    xmax = xmoy\n  }\n  xmoy = (xmax + xmin) / 2\n  ymoy = f(xmoy)\n  let cpt = 0\n  while (Math.abs(ymoy - y) > precision && cpt < 1000) {\n    if (f(xmin) < f(xmax)) {\n      if (ymoy > y) {\n        xmax = xmoy\n      } else {\n        xmin = xmoy\n      }\n    } else if (ymoy > y) {\n      xmin = xmoy\n    } else {\n      xmax = xmoy\n    }\n    xmoy = (xmin + xmax) / 2\n    ymoy = f(xmoy)\n    cpt++\n  }\n  if (cpt > 1000) return false\n  return xmoy\n}\n\n/**\n * crée un petit demi-cercle en x,y pour marquer une courbe sur un intervalle ouvert\n * @param {number} x\n * @param {number} y\n * @param {'gauche'|'droite'} sens 'gauche' par défaut\n * @param {number} rayon\n * @param {string} couleur\n * @returns {Arc}\n */\nexport function croche (x, y, sens = 'gauche', rayon = 0.1, couleur = 'black') {\n  const centre = point(x + (sens === 'gauche' ? -rayon : rayon), y)\n  const dessous = point(x + (sens === 'gauche' ? -rayon : rayon), y - rayon)\n  const dessus = point(x + (sens === 'gauche' ? -rayon : rayon), y + rayon)\n  const croche = sens === 'gauche' ? arc(dessous, centre, dessus) : arc(dessus, centre, dessous)\n  croche.color = colorToLatexOrHTML(couleur)\n  return croche\n}\n"],"names":["LectureAntecedent","x","y","xscale","yscale","color","textOrd","textAbs","ObjetMathalea2D","coeff","x0","y0","M","point","X","Y","Sx","segment","Sy","texteParPosition","context","amp","lectureAntecedent","args","Courbe","f","repere","epaisseur","step","xMin","xMax","yMin","yMax","xUnite","yUnite","xunite","yunite","objets","points","pas","inferieurouegal","polyline","code","objet","courbe","Integrale","couleurDeRemplissage","a","b","opacite","hachures","ymin","ymax","p","polygone","colorToLatexOrHTML","motifs","integrale","CourbeSpline","traceNoeuds","noeuds","i","tracePoint","courbeSpline","cosineInterpolate","y1","y2","mu","mu2","CourbeInterpolee","tableau","mesCourbes","x1","depart","fin","c","lesY","el","lesX","courbeInterpolee","GraphiqueInterpole","graphiqueInterpole","imageInterpolee","antecedent","antecedentInterpole","image","antecedentParDichotomie","xmin","xmax","precision","xmoy","ymoy","cpt","croche","sens","rayon","couleur","centre","dessous","dessus","arc"],"mappings":"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"}