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/3G12-RzMOitwq.js.map
{"version":3,"file":"3G12-RzMOitwq.js","sources":["../../src/exercices/3e/3G12.js"],"sourcesContent":["import { codageAngle } from '../../lib/2d/angles.js'\nimport { tracePoint } from '../../lib/2d/points.js'\nimport { segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { labelPoint, texteParPosition } from '../../lib/2d/textes.js'\nimport { rotation } from '../../lib/2d/transformations.js'\nimport { choice, shuffle } from '../../lib/outils/arrayOutils'\nimport { miseEnEvidence } from '../../lib/outils/embellissements'\nimport { arcenciel, texcolors } from '../../lib/format/style'\nimport { nombreAvecEspace } from '../../lib/outils/texNombre.js'\nimport { rotationAnimee } from '../../modules/2dAnimation.js'\nimport { colorToLatexOrHTML, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\nimport { egal, listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { pavage } from '../../modules/Pavage.js'\nimport Exercice from '../Exercice.js'\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\n\nexport const titre = 'Finding the image of a figure by rotating in a tiling'\nexport const dateDePublication = '16/12/2020'\nexport const dateDeModifImportante = '29/01/2023' //  Par EE\nexport const interactifReady = true\nexport const interactifType = 'mathLive'\nexport const amcReady = true\nexport const amcType = 'AMCHybride'\n\n/**\n * Trouver l'image par sune rotation d'une figure dans un pavage\n * @author Jean-Claude Lhote\n * Rajout par EE d'un quatrième paramètre, de l'interactif et de l'AMC\n */\nexport const uuid = '442e0'\nexport const ref = '3G12'\nexport default function PavageEtRotation2D () {\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.correctionDetailleeDisponible = true\n  this.correctionDetaillee = true\n  this.spacing = 2\n  this.nbCols = 1\n  this.nbColsCorr = 1\n  this.sup = 1 // 1 pour des pavages modestes, 2 pour des plus grand.\n  this.sup2 = false // On cache les barycentres par défaut.\n  this.sup3 = 7\n  this.sup4 = true // On ignore les rotations centrales par défaut.\n  context.isHtml ? (this.spacingCorr = 2.5) : (this.spacingCorr = 1.5)\n  this.nouvelleVersion = function () {\n    this.sup = Number(this.sup)\n    this.sup3 = Number(this.sup3)\n    const videcouples = function (tableau) {\n      for (let k = 0; k < tableau.length; k++) {\n        if (tableau[k][0] === tableau[k][1]) {\n          tableau.splice(k, 1)\n        }\n        for (let j = k + 1; j < tableau.length; j++) {\n          // eslint-disable-next-line no-empty\n          if (tableau[k][1] === tableau[j][0]) {\n\n          }\n        }\n      }\n      return tableau\n    }\n    const compare2polys = function (poly1, poly2) {\n      if (comparenbsommets(poly1, poly2)) {\n        return comparesommets(poly1, poly2)\n      } else {\n        return false\n      }\n    }\n    const comparenbsommets = function (poly1, poly2) {\n      return poly1.listePoints.length === poly2.listePoints.length\n    }\n\n    const compare2sommets = function (sommet1, sommet2) {\n      return egal(sommet1.x, sommet2.x, 0.1) && egal(sommet1.y, sommet2.y, 0.1)\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) {\n              break\n            }\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      return trouves === poly1.listePoints.length\n    }\n\n    const rotaccion = function (pavage, A, angle, numero) {\n      const poly = pavage.polygones[numero - 1]\n      let pol\n      const result = -1\n      const sympoly = rotation(poly, A, angle)\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 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 A\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    const propositionsAMC = []\n    let texteAMC\n    let sensdirect, M, N, trace, label, P1, P2, P3, t\n    const alphas = [[60, 120, 180], [90, 180], [60, 120, 180], [60, 120, 90], [45, 90, 135, 180], [60, 120, 180], [60, 120, 180]]\n    let alpha\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 < 6) {\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\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      // windowMathalea2d = [window.xmin, window.ymin, window.xmax, window.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\n        index1 = randint(Math.floor(monpavage.nb_polygones / 3), Math.ceil(monpavage.nb_polygones * 2 / 3)) // On choisit 1 point dans un des polygones\n        if (choice([true, false])) {\n          A = monpavage.polygones[index1].listePoints[randint(0, monpavage.polygones[index1].listePoints.length - 1)] // On choisit un sommet\n        } else {\n          A = monpavage.barycentres[index1] // Ou on choisit un barycentre\n        }\n        while (A.x - 5 < fenetre.xmin || A.x + 5 > fenetre.xmax || A.y - 5 < fenetre.ymin || A.y + 5 > fenetre.ymax) {\n          index1 = randint(Math.floor(monpavage.nb_polygones / 3), Math.ceil(monpavage.nb_polygones * 2 / 3)) // On choisit 1 point dans un des polygones\n          if (choice([true, false])) {\n            A = monpavage.polygones[index1].listePoints[randint(0, monpavage.polygones[index1].listePoints.length - 1)] // On choisit un sommet\n          } else {\n            A = monpavage.barycentres[index1] // Ou on choisit un barycentre\n          }\n        }\n        A.nom = 'A'\n        A.positionLabel = 'below'\n        trace = tracePoint(A, 'red') // la trace du centre de symétrie sera rouge et grosse\n        label = labelPoint(A, 'red')\n        trace.epaisseur = 3\n        trace.taille = 4\n        // alpha = alphas[PavingType - 1][randint(0, alphas[PavingType - 1].length - 1)]\n        alpha = choice(alphas[typeDePavage - 1], this.sup4 ? 180 : 0)\n        sensdirect = choice([1, -1])\n        for (let i = 1; i <= monpavage.nb_polygones; i++) { // on crée une liste des couples (antécédents, images)\n          image = rotaccion(monpavage, A, alpha * sensdirect, 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.error('Too many questions, increase the size of the tiling!')\n      return\n    }\n\n    objets.push(trace) // le centre est OK on pousse sa trace\n    objets.push(label) // et son label\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    texte = mathalea2d(fenetre, objets, texteNoir) // monpavage.fenetre est calibrée pour faire entrer le pavage dans une feuille A4\n    texte += `<br>Let the rotation of center $A$ and angle ${alpha}° be in the direction`\n    if (sensdirect === 1) {\n      texte += 'counterclockwise.<br>'\n    } else {\n      texte += 'clockwise.<br>'\n    }\n    texteCorr += `Let the rotation of center $A$ and angle ${alpha}° be in the direction`\n    if (sensdirect === 1) {\n      texteCorr += 'counterclockwise. <br>'\n    } else {\n      texteCorr += 'clockwise. <br>'\n    }\n    const consigneAMC = texte\n    for (let i = 0; i < this.nbQuestions; i++) {\n      texteAMC = `What is the image of the figure $${couples[i][0]}$?` + ajouteChampTexteMathLive(this, i, 'width25 inline') + '<br>'\n      texte += texteAMC\n      texteCorr += `The image of figure $${couples[i][0]}$ is figure $${miseEnEvidence(couples[i][1])}$.<br>`\n\n      if (context.isAmc) {\n        propositionsAMC.push({\n          type: 'AMCNum',\n          propositions: [\n            {\n              texte: texteCorr,\n              reponse: {\n                texte: texteAMC,\n                valeur: couples[i][1],\n                param: {\n                  signe: false,\n                  digits: 2,\n                  decimals: 0\n                }\n              }\n            }\n          ]\n\n        })\n      } else {\n        setReponse(this, i, couples[i][1])\n      }\n      if (this.correctionDetaillee) {\n        t = this.nbQuestions * 3\n        M = monpavage.barycentres[couples[i][0] - 1]\n        N = monpavage.barycentres[couples[i][1] - 1]\n        P1 = monpavage.polygones[couples[i][0] - 1]\n        P1.color = colorToLatexOrHTML(texcolors(i))\n        P1.couleurDeRemplissage = colorToLatexOrHTML(texcolors(i))\n        P1.opaciteDeRemplissage = 0.5\n        P1.epaisseur = 2\n        P2 = monpavage.polygones[couples[i][1] - 1]\n        P2.color = colorToLatexOrHTML(texcolors(i))\n        P2.couleurDeRemplissage = colorToLatexOrHTML(texcolors(i))\n        P2.opaciteDeRemplissage = 0.5\n        P2.epaisseur = 2\n        P3 = rotationAnimee(P1, A, alpha * sensdirect, `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(texcolors(i))\n        P3.epaisseur = 2\n        objetsCorrection.push(tracePoint(M, N), segment(A, M, texcolors(i)), segment(A, N, arcenciel(i)), codageAngle(M, A, N, 0.8, '', arcenciel(i), 1, 1, 'blue', 0.2, true), P1, P2, P3)\n      }\n    }\n    if (this.correctionDetaillee) {\n      texteCorr += mathalea2d(fenetre, objets, objetsCorrection, texteGris)\n    }\n    if (context.isAmc) {\n      this.autoCorrection[0] = {\n        options: { multicols: true },\n        enonce: consigneAMC,\n        propositions: propositionsAMC\n      }\n    }\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  this.besoinFormulaire4CaseACocher = ['Ignore 180° angle']\n}\n"],"names":["titre","dateDePublication","dateDeModifImportante","interactifReady","interactifType","amcReady","amcType","uuid","ref","PavageEtRotation2D","Exercice","context","videcouples","tableau","k","j","compare2polys","poly1","poly2","comparenbsommets","comparesommets","compare2sommets","sommet1","sommet2","egal","trouve","trouves","P","M","rotaccion","pavage","A","angle","numero","poly","pol","result","sympoly","rotation","objets","objetsCorrection","taillePavage","Nx","Ny","index1","image","couples","tailles","monpavage","fenetre","texte","texteCorr","typeDePavage","nombreTentatives","nombrePavageTestes","propositionsAMC","texteAMC","sensdirect","N","trace","label","P1","P2","P3","t","alphas","alpha","randint","choice","tracePoint","labelPoint","i","shuffle","texteNoir","texteGris","texteParPosition","nombreAvecEspace","mathalea2d","consigneAMC","ajouteChampTexteMathLive","miseEnEvidence","setReponse","colorToLatexOrHTML","texcolors","rotationAnimee","segment","arcenciel","codageAngle","listeQuestionsToContenu"],"mappings":"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"}