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/2dAnimation-JCSf4hAJ.js.map
{"version":3,"file":"2dAnimation-JCSf4hAJ.js","sources":["../../src/modules/2dAnimation.js"],"sourcesContent":["/**\n * Rend visible un element d'après son id\n * @param {number} id id propre à un objet MathALEA2d\n * @example montrerParDiv(s2.id) // Affiche l'objet s2\n * @author Rémi Angot\n */\n\nimport { affiniteOrtho, homothetie, rotation, symetrieAxiale } from '../lib/2d/transformations.js'\nimport { fixeBordures, ObjetMathalea2D } from './2dGeneralites.js'\n\n// JSDOC Validee par EE Juin 2022\nexport function montrerParDiv (id) {\n  if (document.getElementById(id)) {\n    document.getElementById(id).style.visibility = 'visible'\n  } else {\n    console.log(id + ' n\\'existe pas et ne peut pas être rendu visible.')\n  }\n}\n\n/**\n   * Rend invisible un element d'après son id\n   * @param {number} id id propre à un objet MathALEA2d\n   * @example cacherParDiv(s2.id) // Cache l'objet s2\n   * @author Rémi Angot\n   */\n// JSDOC Validee par EE Juin 2022\nexport function cacherParDiv (id) {\n  if (document.getElementById(id)) {\n    document.getElementById(id).style.visibility = 'hidden'\n  } else {\n    console.log(id + ' n\\'existe pas et ne peut pas être caché.')\n  }\n}\n\n/**\n   * Masque un objet pendant t0 secondes puis l'affiche pendant (t-t0) secondes avant de recommencer r fois ce cycle en tout\n   * @param {ObjetMathalea2D} objet Objet MathALEA2d masqué puis affiché\n   * @param {number} [t0=1] Temps en secondes avant l'apparition.\n   * @param {number} [t=5] Temps à partir duquel l'animation recommence.\n   * @param {string} [r='Infinity'] Nombre de répétitions (infini si ce n'est pas un nombre).\n   * @example afficherTempo(ob1)\n   * // Affiche ob1 au bout de 1 seconde, pendant 4 secondes puis le masque. Ce cycle est répété indéfiniment.\n   * @example afficherTempo(ob1,2,9,10)\n   * // Sur un cycle de 9 secondes, affiche ob1 au bout de 2 seconde puis le masque en fin de cycle. Ce cycle est répété 10 fois.\n   */\n// JSDOC Validee par EE Juin 2022\nexport function afficherTempo (objet, t0 = 1, t = 5, r = 'Infinity') {\n  let compteur = 1 // Nombre d'animations\n  const checkExist = setInterval(function () {\n    if (document.getElementById(objet.id)) {\n      clearInterval(checkExist)\n      cacherParDiv(objet.id)\n      if (r === 1) { // On le montre au bout de t0 et on ne le cache plus\n        setTimeout(function () { montrerParDiv(objet.id) }, t0 * 1000)\n      } else {\n        const cacheRepete = setInterval(function () { cacherParDiv(objet.id) }, t * 1000) // On cache tous les t s\n        setTimeout(function () {\n          montrerParDiv(objet.id) // On attend t0 pour montrer\n          const montreRepete = setInterval(function () {\n            montrerParDiv(objet.id)\n            compteur++\n            if (typeof r === 'number') {\n              if (compteur >= r) {\n                clearInterval(cacheRepete)\n                clearInterval(montreRepete)\n              }\n            }\n          }, t * 1000) // On montre tous les t s (vu qu'on a décalé de t0)\n        }, t0 * 1000) // Fin de l'animation en boucle\n      }\n    }\n  }, 100) // vérifie toutes les  100ms que le div existe\n}\n\n/**\n   * Affiche un objet pendant t0 secondes puis le cache pendant (t-t0) secondes avant de recommencer r fois ce cycle en tout\n   * @param {ObjetMathalea2D} objet Objet MathALEA2d affiché puis masqué\n   * @param {number} [t0=1] Temps en secondes avant l'apparition\n   * @param {number} [t=5] Temps à partir duquel l'animation recommence\n   * @param {string} [r='Infinity'] Nombre de répétitions (infini si ce n'est pas un nombre)\n   * @example cacherTempo(figure1)\n   * // Affiche figure1 pendant 1 seconde, puis le cache pendant 4 secondes et recommence ce cycle indéfiniment.\n   * @example cacherTempo(figure1,2,8,3)\n   * // Affiche figure1 pendant 2 secondes, puis le cache pendant 6 secondes et recommence ce cycle 3 fois en tout.\n   * @author Eric Elter\n   */\n// JSDOC Validee par EE Juin 2022\nexport function cacherTempo (objet, t0 = 1, t = 5, r = 'Infinity') {\n  let compteur = 1 // Nombre d'animations\n  const checkExist = setInterval(function () {\n    if (document.getElementById(objet.id)) {\n      clearInterval(checkExist)\n      montrerParDiv(objet.id)\n      if (r === 1) { // On le cache au bout de t0 et on ne le montre plus\n        setTimeout(function () { cacherParDiv(objet.id) }, t0 * 1000)\n      } else {\n        const montreRepete = setInterval(function () { montrerParDiv(objet.id) }, t * 1000) // On cache tous les t s\n        setTimeout(function () {\n          cacherParDiv(objet.id) // On attend t0 pour montrer\n          const cacheRepete = setInterval(function () {\n            cacherParDiv(objet.id)\n            compteur++\n            if (typeof r === 'number') {\n              if (compteur >= r) {\n                clearInterval(cacheRepete)\n                clearInterval(montreRepete)\n              }\n            }\n          }, t * 1000) // On montre tous les t s (vu qu'on a décalé de t0)\n        }, t0 * 1000) // Fin de l'animation en boucle\n      }\n    }\n  }, 100) // vérifie toutes les  100ms que le div existe\n}\n\n/**\n   * Masque une suite d'objets puis les affiche un par un, de t secondes en t secondes avant de recommencer r fois, tApresDernier secondes après l'affichage de tous les objets\n   * @param {ObjetMathalea2D[]} objets Liste d'objets MathALEA2d masqués puis affichés\n   * @param {number} [t = 1] Temps en secondes entre l'apparition de chaque objet\n   * @param {string} [r = 'Infinity'] Nombre de répétitions (infini si ce n'est pas un nombre).\n   * @param {number} [tApresDernier = 5] Temps, après l'affichage du dernier objet, à partir duquel l'animation recommence.\n   * @example afficherUnParUn([s1,s2])\n   * // Affiche s1 au bout de 1 seconde, puis s2 après 1 nouvelle seconde, puis les masque après 5 secondes. Ce cycle est répété indéfiniment.\n   * @example afficherUnParUn([s1,s2],2,9,10)\n   * // Affiche s1 au bout de 2 secondes, puis s2 après 2 nouvelles secondes, puis les masque après 10 secondes. Ce cycle est répété en tout 9 fois.\n   * @author Rémi Angot\n   */\n// JSDOC Validee par EE Juin 2022\nexport function afficherUnParUn (objets, t = 1, r = 'Infinity', tApresDernier = 5) {\n  let t0 = t\n  const tf = objets.length * t + tApresDernier\n  for (const objet of objets) {\n    afficherTempo(objet, t0, tf, r)\n    t0 += t\n  }\n}\n\n/*\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%%%%%% LES TRANSFORMATIONS ANIMÉES %%%%%%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n*/\n\n/**\n * Fait apparaître une liste d'objets de façon animée.\n * @param {ObjetMathalea2D[]} liste liste d'objets à faire apparaître\n * @param {number} [dur = 2] Durée de l'animation en secondes\n * @param {number} [pourcentage = 0.5] Pourcentage de la durée à partir de laquelle les objets sont visibles\n * @param {number|string} [repeat = 'indefinite'] Nombre de répétitions de l'animation, peut être un entier.\n * @author Rémi Angot\n */\n// JSDOC Non Validee EE Juin 2022 (non testée)\nfunction ApparitionAnimee (liste, dur = 2, pourcentage = 0.5, repeat = 'indefinite') {\n  ObjetMathalea2D.call(this, { })\n  this.svg = function (coeff) {\n    let code = '<g> '\n    if (Array.isArray(liste)) {\n      for (const objet of liste) {\n        code += '\\n' + objet.svg(coeff)\n      }\n    } else {\n      // si ce n'est pas une liste\n      code += '\\n' + liste.svg(coeff)\n    }\n    code += `<animate attributeType=\"CSS\"\n    attributeName=\"visibility\"\n    from=\"hidden\"\n    to=\"hidden\"\n    values=\"hidden;visible;hidden\"\n    keyTimes=\"0; ${pourcentage}; 1\"\n    dur=\"${dur}\"\n    repeatCount=\"${repeat}\"/>`\n    code += '</g>'\n    return code\n  }\n}\n/**\n * Fait apparaître une liste d'objets de façon animée\n * @param {ObjetMathalea2D[]} liste liste d'objets à faire apparaître\n * @param {number} [dur = 2] Durée de l'animation en secondes\n * @param {number} [pourcentage = 0.5] Pourcentage de la durée à partir de laquelle les objets sont visibles\n * @param {number|string} [repeat = 'indefinite'] Nombre de répétitions de l'animation, peut être un entier\n * @return {ApparitionAnimee}\n * @example Fonction non utilisée donc pas d'exemple, fonction non testée, peut être bugguée\n * @author Rémi Angot\n */\n// JSDOC Non Validee EE Juin 2022 (impossible à tester car non utilisée)\nexport function apparitionAnimee (liste, dur = 2, pourcentage = 0.5, repeat = 'indefinite') {\n  return new ApparitionAnimee(liste, dur, pourcentage, repeat)\n}\n/**\n * translationAnimee(s,v) //Animation de la translation de vecteur v pour s\n * translationAnimee([a,b,c],v) //Animation de la translation de vecteur v pour les objets a, b et v\n *\n * @author Rémi Angot\n */\nfunction TranslationAnimee (liste, v, animation = 'begin=\"0s\" dur=\"2s\" repeatCount=\"indefinite\"') {\n  ObjetMathalea2D.call(this, { })\n  this.svg = function (coeff) {\n    let code = '<g> '\n    if (Array.isArray(liste)) {\n      for (const objet of liste) {\n        code += '\\n' + objet.svg(coeff)\n      }\n    } else {\n      // si ce n'est pas une liste\n      code += '\\n' + liste.svg(coeff)\n    }\n    if (Array.isArray(v)) {\n      code += '<animateMotion path=\"M 0 0 l'\n      for (const vecteur of v) {\n        code += ` ${vecteur.xSVG(coeff)} ${vecteur.ySVG(coeff)} `\n      }\n      code += `${animation} />`\n    } else {\n      code += `<animateMotion path=\"M 0 0 l ${v.xSVG(coeff)} ${v.ySVG(coeff)} \" ${animation} />`\n    }\n    code += '</g>'\n    return code\n  }\n}\nexport function translationAnimee (...args) {\n  return new TranslationAnimee(...args)\n}\n\n/**\n * rotationAnimee(s,O,a) //Animation de la rotation de centre O et d'angle a pour s\n * rotationAnimee([a,b,c],O,a) //Animation de la rotation de centre O et d'angle a pour les objets a, b et c\n *\n * @author Rémi Angot\n */\nfunction RotationAnimee (\n  liste,\n  O,\n  angle,\n  animation = 'begin=\"0s\" dur=\"2s\" repeatCount=\"indefinite\"'\n) {\n  ObjetMathalea2D.call(this, { })\n  if (!Array.isArray(liste)) liste = [liste]\n  const bordures = fixeBordures([liste, liste.map(el => rotation(el, O, angle))])\n  this.bordures = [bordures.xmin, bordures.ymin, bordures.xmax, bordures.ymax]\n  this.svg = function (coeff) {\n    let code = '<g> '\n    if (Array.isArray(liste)) {\n      for (const objet of liste) {\n        code += '\\n' + objet.svg(coeff)\n      }\n    } else {\n      // si ce n'est pas une liste\n      code += '\\n' + liste.svg(coeff)\n    }\n\n    code += `<animateTransform\n  attributeName=\"transform\"\n  type=\"rotate\"\n  from=\"0 ${O.xSVG(coeff)} ${O.ySVG(coeff)}\"\n  to=\"${-angle} ${O.xSVG(coeff)} ${O.ySVG(coeff)}\"\n  ${animation}\n  />`\n    code += '</g>'\n    return code\n  }\n}\nexport function rotationAnimee (...args) {\n  return new RotationAnimee(...args)\n}\n/**\n * homothetieAnimee(s,O,k) //Animation de la homothetie de centre O et de rapport k pour s\n * homothetieAnimee([a,b,c],O,k) //Animation de la homothetie de centre O et de rapport k pour les objets a, b et v\n *\n * @author Rémi Angot\n */\nfunction HomothetieAnimee (\n  p,\n  O,\n  k,\n  animation = 'begin=\"0s\" dur=\"2s\" repeatCount=\"indefinite\"'\n) {\n  ObjetMathalea2D.call(this, { })\n  const bordures = k > 1\n    ? fixeBordures([O, homothetie(p, O, k)])\n    : fixeBordures([O, p])\n  this.bordures = [bordures.xmin, bordures.ymin, bordures.xmax, bordures.ymax]\n  if (k > 1) {\n    this.bordures = homothetie(p, O, k).bordures\n  }\n  this.bordures = homothetie(p, O, k).bordures\n  this.svg = function (coeff) {\n    const binomesXY1 = p.binomesXY(coeff)\n    const p2 = homothetie(p, O, k)\n    p2.isVisible = false\n    const binomesXY2 = p2.binomesXY(coeff)\n    const code = `<polygon stroke=\"${p.color[0]}\" stroke-width=\"${p.epaisseur}\" fill=\"${p.couleurDeRemplissage[0]}\" >\n  <animate attributeName=\"points\" ${animation}\n  from=\"${binomesXY1}\"\n  to=\"${binomesXY2}\"\n  />\n  </polygon>`\n    return code\n  }\n}\nexport function homothetieAnimee (...args) {\n  return new HomothetieAnimee(...args)\n}\n\n/**\n * symetrieAnimee(s,d) //Animation de la symetrie d'axe (d) pour s\n * symetrieAnimee([a,b,c],d) //Animation de la symetrie d'axe (d) pour les objets a, b et v\n *\n * @author Rémi Angot\n */\nfunction SymetrieAnimee (\n  p,\n  d,\n  animation = 'begin=\"0s\" dur=\"2s\" repeatCount=\"indefinite\"'\n) {\n  ObjetMathalea2D.call(this, { })\n  const bordures = fixeBordures([p, symetrieAxiale(p, d)])\n  this.bordures = [bordures.xmin, bordures.ymin, bordures.xmax, bordures.ymax]\n  this.svg = function (coeff) {\n    const binomesXY1 = p.binomesXY(coeff)\n    const p2 = symetrieAxiale(p, d)\n    p2.isVisible = false\n    const binomesXY2 = p2.binomesXY(coeff)\n    const code = `<polygon stroke=\"${p.color[0]}\" stroke-width=\"${p.epaisseur}\" fill=\"${p.couleurDeRemplissage[0]}\" >\n    <animate attributeName=\"points\" ${animation}\n    from=\"${binomesXY1}\"\n    to=\"${binomesXY2}\"\n    />\n    </polygon>`\n    return code\n  }\n}\nexport function symetrieAnimee (...args) {\n  return new SymetrieAnimee(...args)\n}\n\nfunction AffiniteOrthoAnimee (\n  p,\n  d,\n  k,\n  animation = 'begin=\"0s\" dur=\"2s\" repeatCount=\"indefinite\"'\n) {\n  ObjetMathalea2D.call(this, { })\n  const bordures = fixeBordures([p, affiniteOrtho(p, d, k)])\n  this.bordures = [bordures.xmin, bordures.ymin, bordures.xmax, bordures.ymax]\n  this.svg = function (coeff) {\n    const binomesXY1 = p.binomesXY(coeff)\n    const p2 = affiniteOrtho(p, d, k)\n    p2.isVisible = false\n    const binomesXY2 = p2.binomesXY(coeff)\n    const code = `<polygon stroke=\"${p.color[0]}\" stroke-width=\"${p.epaisseur}\" fill=\"${p.couleurDeRemplissage[0]}\" >\n    <animate attributeName=\"points\" ${animation}\n    from=\"${binomesXY1}\"\n    to=\"${binomesXY2}\"\n    />\n    </polygon>`\n    return code\n  }\n}\nexport function affiniteOrthoAnimee (...args) {\n  return new AffiniteOrthoAnimee(...args)\n}\n"],"names":["montrerParDiv","id","cacherParDiv","afficherTempo","objet","t0","t","r","compteur","checkExist","cacheRepete","montreRepete","cacherTempo","ApparitionAnimee","liste","dur","pourcentage","repeat","ObjetMathalea2D","coeff","code","apparitionAnimee","TranslationAnimee","v","animation","vecteur","translationAnimee","args","RotationAnimee","O","angle","bordures","fixeBordures","el","rotation","rotationAnimee","SymetrieAnimee","p","d","symetrieAxiale","binomesXY1","p2","binomesXY2","symetrieAnimee"],"mappings":"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"}