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/6G25-3-Su-RpzQj.js.map
{"version":3,"file":"6G25-3-Su-RpzQj.js","sources":["../../src/exercices/6e/6G25-3.js"],"sourcesContent":["import { codageMediatrice } from '../../lib/2d/codages.js'\nimport { droiteHorizontaleParPoint, droiteVerticaleParPoint, mediatrice } from '../../lib/2d/droites.js'\nimport { point, pointIntersectionDD, tracePoint } from '../../lib/2d/points.js'\nimport { segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { latexParCoordonnees, texteParPosition } from '../../lib/2d/textes.js'\nimport { symetrieAxiale } from '../../lib/2d/transformations.js'\nimport { shuffle } from '../../lib/outils/arrayOutils'\nimport { miseEnEvidence, texteEnCouleur } from '../../lib/outils/embellissements'\nimport { numAlpha } from '../../lib/outils/outilString.js'\nimport { nombreAvecEspace } from '../../lib/outils/texNombre.js'\nimport Exercice from '../Exercice.js'\nimport { colorToLatexOrHTML, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport { egal, listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { symetrieAnimee } from '../../modules/2dAnimation.js'\nimport { pavage } from '../../modules/Pavage.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\n\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\n\nexport const titre = 'Finding the image of a figure by axial symmetry in a tiling'\nexport const interactifReady = true\nexport const interactifType = 'mathLive'\n\n// Gestion de la date de publication initiale\nexport const dateDePublication = '14/12/2020'\n\n/**\n * Trouver une figure symétrique dans un pavage. Symétrie axiale. 6 pavages différents.\n * @author Jean-Claude Lhote\n * Réf : 6G25-3\n * Relecture : Novembre 2021 par EE\n */\nexport const uuid = '328b1'\nexport const ref = '6G25-3'\nexport default function PavageEtReflexion2d () {\n  Exercice.call(this) // Héritage de la classe Exercice()\n  this.titre = titre\n  this.consigne = ''\n  this.nbQuestions = 3\n  this.nbQuestionsModifiable = true\n  this.correctionDetaillee = true\n  this.correctionDetailleeDisponible = true\n  this.nbCols = 1\n  this.nbColsCorr = 1\n  this.sup = 1 // 1 pour des pavages modestes, 2 pour des plus grands.\n  this.sup2 = false // On cache les centres par défaut.\n  this.sup3 = 7\n  // context.isHtml ? (this.spacingCorr = 2.5): (this.spacingCorr = 1.5)\n  this.nouvelleVersion = function () {\n    const videcouples = function (tableau) {\n      for (let k = 0; k < tableau.length; k++) {\n        for (let j = k + 1; j < tableau.length; j++) {\n          if (tableau[k][1] === tableau[j][0]) {\n            tableau.splice(j, 1)\n          }\n        }\n      }\n      return tableau\n    }\n    const compare2polys = function (poly1, poly2) {\n      if (comparenbsommets(poly1, poly2)) {\n        if (comparesommets(poly1, poly2)) {\n          return true\n        } else {\n          return false\n        }\n      } else {\n        return false\n      }\n    }\n    const comparenbsommets = function (poly1, poly2) {\n      if (poly1.listePoints.length === poly2.listePoints.length) {\n        return true\n      } else return false\n    }\n\n    const compare2sommets = function (sommet1, sommet2) {\n      if (egal(sommet1.x, sommet2.x, 0.1) && egal(sommet1.y, sommet2.y, 0.1)) {\n        return true\n      } else return false\n    }\n    const comparesommets = function (poly1, poly2) {\n      let trouve = false\n      let trouves = 0\n      if (comparenbsommets(poly1, poly2)) {\n        for (const P of poly1.listePoints) {\n          for (const M of poly2.listePoints) {\n            if (compare2sommets(M, P)) {\n              trouve = true\n            }\n            if (trouve) break\n          }\n          if (trouve) {\n            trouves++\n            trouve = false\n          } else {\n            trouves -= 100\n          }\n          if (trouves < 0) {\n            break\n          }\n        }\n      }\n      if (trouves === poly1.listePoints.length) {\n        return true\n      } else return false\n    }\n    /*     let associesommets=function(poly1,poly2,d){ //Pour chercher les indices des symétriques dans leur polygone respectif\n            let binomes=[],P,M\n            for (let k=0;k<poly1.listePoints.length;k++) { // afin éventuellement de faire clignoter ces paires de points lors de la correction\n              P=symetrieAxiale(poly1.listePoints[k],d)\n              for (let l=0;l<poly2.listePoints.length;l++) {\n                M=poly2.listePoints[l]\n                if (compare2sommets(M,P)) {\n                  binomes.push([k,l])\n                  break\n                }\n              }\n            }\n            return binomes\n          }\n      */\n    const refleccion = function (pavage, d, numero) { // retourne le numero du polygone symétrique ou -1 si il n'existe pas\n      const poly = pavage.polygones[numero - 1]\n      let pol\n      const result = -1\n      const sympoly = symetrieAxiale(poly, d)\n      for (let k = 0; k < pavage.polygones.length; k++) {\n        pol = pavage.polygones[k]\n        if (compare2polys(sympoly, pol)) {\n          return k + 1\n        }\n      }\n      return result\n    }\n\n    const objets = []\n    const objetsCorrection = []\n    let P1\n    let P2\n    let P3\n    let t\n    const codes = ['/', '//', '///', 'o', 'w', 'X', 'U', '*']\n    let taillePavage = parseInt(this.sup)\n    if (taillePavage < 1 || taillePavage > 2) {\n      taillePavage = 1\n    }\n    if (this.nbQuestions > 5) {\n      taillePavage = 2\n    }\n    this.listeCorrections = []\n    this.listeQuestions = []\n    this.autoCorrection = []\n    let Nx\n    let Ny\n    let index1\n    let index2\n    let A\n    let B\n    let d\n    let image\n    let couples = []\n    let tailles = []\n    let monpavage\n    let fenetre\n    let texte = ''\n    let texteCorr = ''\n    let typeDePavage = parseInt(this.sup)\n    let nombreTentatives\n    let nombrePavageTestes = 1\n    if (this.sup3 === 8) {\n      typeDePavage = randint(1, 7)\n    } else {\n      typeDePavage = parseInt(this.sup3)\n    }\n    while (couples.length < this.nbQuestions && nombrePavageTestes < 7) {\n      nombreTentatives = 0\n      monpavage = pavage() // On crée l'Tile object that goes s'appeler monpavage\n      tailles = [[[3, 2], [3, 2], [2, 2], [2, 2], [2, 2], [2, 2], [3, 2]], [[4, 3], [4, 3], [3, 3], [3, 3], [3, 3], [3, 2], [5, 3]]]\n      Nx = tailles[taillePavage - 1][typeDePavage - 1][0]\n      Ny = tailles[taillePavage - 1][typeDePavage - 1][1]\n      monpavage.construit(typeDePavage, Nx, Ny, 3) // On initialise toutes les propriétés de l'objet.\n      fenetre = monpavage.fenetre\n      context.fenetreMathalea2d = [fenetre.xmin, fenetre.ymin, fenetre.xmax, fenetre.ymax]\n      while (couples.length < this.nbQuestions + 2 && nombreTentatives < 3) { // On cherche d pour avoir suffisamment de couples\n        couples = [] // On vide la liste des couples pour une nouvelle recherche\n        index1 = randint(Math.floor(monpavage.nb_polygones / 3), Math.ceil(monpavage.nb_polygones * 2 / 3)) // On choisit 2 points dans 2 polygones distincts.\n        index2 = randint(Math.floor(monpavage.nb_polygones / 3), Math.ceil(monpavage.nb_polygones * 2 / 3), index1)\n        A = monpavage.polygones[index1].listePoints[randint(0, 2)] // On les choisit dans les trois premiers\n        B = monpavage.polygones[index2].listePoints[randint(0, 2)] // points pour éviter un point qui n'éxiste pas\n        while (compare2sommets(A, B)) { // On vérifie qu'ils sont bien distincts sinon, on change.\n          index1 = randint(0, monpavage.nb_polygones - 1)\n          index2 = randint(0, monpavage.nb_polygones - 1, index1)\n          A = monpavage.polygones[index1].listePoints[randint(0, 2)] // idem ci-dessus\n          B = monpavage.polygones[index2].listePoints[randint(0, 2)] // mais à la sortie du While A!=B\n        }\n        d = mediatrice(A, B, '', 'red') // l'axe sera la droite passant par ces deux points si ça fonctionne\n        d.epaisseur = 3\n        for (let i = 1; i <= monpavage.nb_polygones; i++) { // on crée une liste des couples (antécédents, images)\n          image = refleccion(monpavage, d, i)\n          if (image !== -1) { // si l'image du polygone i existe, on ajoute le couple à la liste\n            couples.push([i, image])\n          }\n        }\n        couples = videcouples(couples) // supprime tous les couples en double (x,y)=(y,x)\n        nombreTentatives++\n      }\n      if (couples.length < this.nbQuestions) {\n        if (this.sup3 === 7) {\n          typeDePavage = (typeDePavage + 1) % 5 + 1\n        }\n        nombrePavageTestes++\n      }\n    }\n    if (couples.length < this.nbQuestions) {\n      console.log('too many questions, increase the tiling size')\n      return\n    }\n\n    objets.push(d) // la droite d est trouvée\n    let pt1, pt2\n    if (d.pente < 0 && d.pente > -10) {\n      pt1 = pointIntersectionDD(d, droiteHorizontaleParPoint(point(context.fenetreMathalea2d[2], context.fenetreMathalea2d[3])))\n      pt2 = pointIntersectionDD(d, droiteVerticaleParPoint(point(context.fenetreMathalea2d[0], context.fenetreMathalea2d[1])))\n      if (pt1.x > pt2.x) {\n        objets.push(latexParCoordonnees('(d)', pt1.x, pt1.y - 2.5, 'red', 20, 10, '', 12))\n      } else {\n        if (pt2.x < context.fenetreMathalea2d[2] + 0.5) objets.push(latexParCoordonnees('(d)', pt2.x + 0.75 * context.zoom, pt2.y - 0.8 * context.zoom, 'red', 20, 10, '', 12))\n        else objets.push(latexParCoordonnees('(d)', pt2.x + 0.75 * context.zoom, pt2.y + 0.15 * context.zoom, 'red', 20, 10, '', 12))\n      }\n    } else if (d.pente >= 0 && d.pente < 10) {\n      pt1 = pointIntersectionDD(d, droiteHorizontaleParPoint(point(context.fenetreMathalea2d[2], context.fenetreMathalea2d[3])))\n      pt2 = pointIntersectionDD(d, droiteVerticaleParPoint(point(context.fenetreMathalea2d[2], context.fenetreMathalea2d[3])))\n      if (pt1.x < pt2.x) {\n        objets.push(latexParCoordonnees('(d)', pt1.x - 0.75 * context.zoom, pt1.y - 2.5, 'red', 20, 10, '', 12))\n      } else {\n        objets.push(latexParCoordonnees('(d)', pt2.x - 0.75 * context.zoom, pt2.y + 0.5 * context.zoom, 'red', 20, 10, '', 12))\n      }\n    } else { // d est verticale\n      pt1 = pointIntersectionDD(d, droiteHorizontaleParPoint(point(context.fenetreMathalea2d[2], context.fenetreMathalea2d[3])))\n      objets.push(latexParCoordonnees('(d)', pt1.x - 1, pt1.y - 1.5, 'red', 20, 10, '', 12))\n    }\n\n    couples = shuffle(couples) // on mélange les couples\n    const texteNoir = []\n    const texteGris = []\n    for (let i = 0; i < monpavage.nb_polygones; i++) {\n      texteNoir.push(texteParPosition(nombreAvecEspace(i + 1), monpavage.barycentres[i].x, monpavage.barycentres[i].y + 0.5, 'medium', 'black', 1, 0, true))\n      texteGris.push(texteParPosition(nombreAvecEspace(i + 1), monpavage.barycentres[i].x, monpavage.barycentres[i].y + 0.5, 'medium', 'gray', 1, 0, true))\n    }\n    if (this.sup2) { // Doit-on montrer les centres des figures ?\n      for (let i = 0; i < monpavage.nb_polygones; i++) {\n        objets.push(monpavage.tracesCentres[i])\n      }\n    }\n    for (let i = 0; i < monpavage.nb_polygones; i++) { // il faut afficher tous les polygones du pavage\n      objets.push(monpavage.polygones[i])\n    }\n\n    texte = mathalea2d(fenetre, objets, texteNoir) // monpavage.fenetre est calibrée pour faire entrer le pavage dans une feuille A4\n    texte += '<br>'\n    const couleurs = ['green', 'red', 'blue']\n    for (let i = 0; i < this.nbQuestions; i++) {\n      setReponse(this, i, couples[i][1])\n      texte += numAlpha(i) + `What is the image of the figure $${couples[i][0]}$ in the symmetry of axis $(d)$?` + ajouteChampTexteMathLive(this, i, 'width25 inline') + '<br>'\n      texteCorr += numAlpha(i) + `The image of ${texteEnCouleur('the figure', couleurs[i])} $${miseEnEvidence(couples[i][0], couleurs[i])}$ in axis symmetry $(d)$ is the figure $${miseEnEvidence(couples[i][1])}$.<br>`\n      if (this.correctionDetaillee) {\n        t = this.nbQuestions * 3\n        A = monpavage.barycentres[couples[i][0] - 1]\n        B = monpavage.barycentres[couples[i][1] - 1]\n        P1 = monpavage.polygones[couples[i][0] - 1]\n        P1.color = colorToLatexOrHTML(couleurs[i])\n        P1.couleurDeRemplissage = colorToLatexOrHTML(couleurs[i])\n        P1.opaciteDeRemplissage = 0.5\n        P1.epaisseur = 2\n        P2 = monpavage.polygones[couples[i][1] - 1]\n        P2.color = colorToLatexOrHTML(couleurs[i])\n        P2.couleurDeRemplissage = colorToLatexOrHTML(couleurs[i])\n        P2.opaciteDeRemplissage = 0.5\n        P2.epaisseur = 2\n        P3 = symetrieAnimee(P1, d, `begin=\"${i * 3}s;${i * 3 + t}s;${i * 3 + t * 2}s\" end=\"${i * 3 + 2}s;${i * 3 + t + 2}s;${i * 3 + t * 2 + 2}s\" dur=\"2s\" repeatCount=\"indefinite\" repeatDur=\"${9 * this.nbQuestions}s\" id=\"poly-${i}-anim\"`)\n        P3.color = colorToLatexOrHTML(couleurs[i])\n        P3.epaisseur = 2\n        objetsCorrection.push(tracePoint(A, B), segment(A, B, couleurs[i]), P1, P2, P3)\n        if (A !== B) objetsCorrection.push(codageMediatrice(A, B, couleurs[i], codes[i]))\n      }\n    }\n    if (this.correctionDetaillee) {\n      texteCorr += mathalea2d(fenetre, objets, objetsCorrection, texteGris)\n    }\n    this.listeQuestions.push(texte)\n    this.listeCorrections.push(texteCorr)\n    listeQuestionsToContenu(this)\n  }\n  this.besoinFormulaireNumerique = ['Size of the tiling (the large one is automatic beyond 5 questions)', 2, ' 1: Modest size\\n2: Large size']\n  this.besoinFormulaire2CaseACocher = ['Show centers']\n  this.besoinFormulaire3Numerique = ['Choice of paving', 8, '1: Equilateral triangles\\n2: Squares\\n3: Regular hexagons\\n4: Squares and equilateral triangles\\n5: Octagons and squares\\n 6: Rhombuses (school hexagonal tiling)\\n7: Hexagons and equilateral triangles\\n8: One of seven random tilings']\n}\n"],"names":["titre","interactifReady","interactifType","dateDePublication","uuid","ref","PavageEtReflexion2d","Exercice","videcouples","tableau","k","j","compare2polys","poly1","poly2","comparenbsommets","comparesommets","compare2sommets","sommet1","sommet2","egal","trouve","trouves","P","M","refleccion","pavage","d","numero","poly","pol","result","sympoly","symetrieAxiale","objets","objetsCorrection","P1","P2","P3","t","codes","taillePavage","Nx","Ny","index1","index2","A","B","image","couples","tailles","monpavage","fenetre","texte","texteCorr","typeDePavage","nombreTentatives","nombrePavageTestes","randint","context","mediatrice","i","pt1","pt2","pointIntersectionDD","droiteHorizontaleParPoint","point","droiteVerticaleParPoint","latexParCoordonnees","shuffle","texteNoir","texteGris","texteParPosition","nombreAvecEspace","mathalea2d","couleurs","setReponse","numAlpha","ajouteChampTexteMathLive","texteEnCouleur","miseEnEvidence","colorToLatexOrHTML","symetrieAnimee","tracePoint","segment","codageMediatrice","listeQuestionsToContenu"],"mappings":"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"}