File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/6G25-1-arMICpp2.js.map
{"version":3,"file":"6G25-1-arMICpp2.js","sources":["../../src/exercices/6e/6G25-1.js"],"sourcesContent":["import { droite, droiteAvecNomLatex } from '../../lib/2d/droites.js'\nimport { point } from '../../lib/2d/points.js'\nimport { polygone } from '../../lib/2d/polygones.js'\nimport { vecteur } from '../../lib/2d/segmentsVecteurs.js'\nimport { texteParPointEchelle } from '../../lib/2d/textes.js'\nimport { rotation, symetrieAxiale, translation } from '../../lib/2d/transformations.js'\nimport { centreGraviteTriangle } from '../../lib/2d/triangle.js'\nimport { choice, combinaisonListes } from '../../lib/outils/arrayOutils'\nimport { texteEnCouleur } from '../../lib/outils/embellissements'\nimport { numAlpha } from '../../lib/outils/outilString.js'\nimport { stringNombre } from '../../lib/outils/texNombre.js'\nimport Exercice from '../Exercice.js'\nimport { colorToLatexOrHTML, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport { listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { propositionsQcm } from '../../lib/interactif/qcm.js'\nimport { symetrieAnimee } from '../../modules/2dAnimation.js'\nexport const titre = 'Use axial symmetries in triangular tiling'\nexport const interactifReady = true\nexport const interactifType = 'qcm'\nexport const amcReady = true\nexport const amcType = 'AMCHybride'\n\n/**\n* Référence 6G25-1\n* Relecture : Novembre 2021 par EE\n*/\n\nexport const uuid = '49cb2'\nexport const ref = '6G25-1'\nexport default function SymetrieAxialePavageTriangulaire () {\n Exercice.call(this)\n this.titre = 'Axial symmetry in a tiling of equilateral triangles'\n this.nbQuestionsModifiable = false // désactive le formulaire nombre de questions\n this.nbCols = 1 // Le nombre de colonnes dans l'énoncé LaTeX\n this.nbColsCorr = 1// Le nombre de colonne pour la correction LaTeX\n this.pasDeVersionLatex = false // mettre à true si on ne veut pas de l'exercice dans le générateur LaTeX\n this.pas_de_version_HMTL = false // mettre à true si on ne veut pas de l'exercice en ligne\n this.nbQuestions = 3\n this.nbQuestionsModifiable = false\n // See the Exercise Class for an exhaustive list of available properties.\n context.fenetreMathalea2d = [0, -0.1, 15, 10]\n this.sup = false\n // we Choose three axes from the predefined possibilities... 6 types of axes leaving the paving invariant\n // a horizontal axis passes through the vertices 0 of two triangles with indices 2n and 2n+2 (unless 2n%14=12)\n // a vertical axis passes through the centers of gravity of two triangles of index i and i+13 (unless i%14=0)\n // an axis parallel to [AC] passes through the vertices 0 of two triangles with indices 2n and 2n+14\n // an axis parallel to [BC] passes through the vertices 0 of two triangles with indices 2n and 2n+12 (unless 2n%14=0)\n // an axis perpendicular to [BC] passes through the centers of gravity of two triangles of index 2n and 2n+1\n // an axis perpendicular to [AC] passes through the centers of gravity of two triangles of index 2n+1 and 2n+2 (unless (2n+1)%14=13)\n\n const axes = [ // contient des couples de numéros dont seront tirés les deux points servant à définir l'axe\n [[32, 34], [46, 48], [60, 62], [74, 76]], // axes horizontaux\n [[46, 59], [47, 60], [48, 61], [49, 62], [50, 63], [51, 64]], // axes verticaux\n [[32, 46], [34, 48], [36, 50], [38, 52]], // axes // à [AC]\n [[44, 56], [46, 58], [48, 60], [50, 62], [52, 64], [54, 66]], // axes // à [BC]\n [[4, 5], [2, 3], [0, 1], [14, 15], [28, 29]], // axes perpendiculaires à [BC]\n [[42, 31], [43, 44], [56, 45], [57, 58], [70, 59], [71, 72]] // axes perpendiculaires à [AC]\n ]\n // function which chooses a triangle according to the type of axis and its position returns the chosen triangle, its image and distractors for a MCQ\n const choisitTriangle = function (typeAxe, index) { // retourne {antecedent: number, image: number, distracteurs: [number]}\n let figA\n let antecedent\n let rangM // rangée de l'antécédent\n let rangN // rangée de l'image\n let rangA // rangée de l'axe\n let deltaRang\n let image\n const distracteurs = []\n switch (typeAxe) {\n case 0:\n figA = axes[typeAxe][index][0] - axes[typeAxe][index][0] % 14 // figA est le triangle en tête de rangée dont le point A définit l'axe\n rangA = Math.floor(figA / 14)\n if (rangA < 4) { // On est avec un axe bas...\n if (rangA < 3) {\n antecedent = randint(0, rangA - 1) * 14 + randint(6, 13)\n } else {\n antecedent = randint(1, rangA - 1) * 14 + randint(8, 13)\n }\n } else { // on est avec un axe haut ...\n if (rangA > 4) {\n antecedent = randint(rangA, 6) * 14 + randint(0, 7)\n } else {\n antecedent = randint(rangA, 5) * 14 + randint(0, 7)\n }\n }\n rangM = Math.floor(antecedent / 14)\n deltaRang = rangA - rangM\n if (deltaRang > 0) { // l'axis is above the'antécédent\n image = antecedent + (deltaRang - 1) * 26 + 13\n distracteurs.push(image - 13)\n if (image + 13 < 98) distracteurs.push(image + 13)\n distracteurs.push(image - deltaRang * 2 + 1, image + deltaRang * 2 - 1)\n } else { // l'axis is below the'antécédent\n image = antecedent + deltaRang * 26 - 13\n distracteurs.push(image + 13)\n if (image - 13 > 0) distracteurs.push(image - 13)\n distracteurs.push(image + deltaRang * 2 - 1, image - deltaRang * 2 + 1)\n }\n\n break\n case 1:\n figA = axes[typeAxe][index][0] % 13 // figA est le triangle en pied de verticale dont le centre de gravité est sur l'axe\n rangA = figA // le numéro c'est aussi le rang de gauche à droite\n // on row rowM, rowA + rowM*13 is the number of the figure crossed by the axis\n rangM = randint(2, 5) // on choisit la rangée de l'antécédent\n if (rangA < 10) { // On est avec un axe à gauche\n // the antecedent must be chosen between rankM*14 and rankA +rankM*13\n antecedent = randint(rangM * 14 + 1, rangA + rangM * 13 - 1)\n } else { // on est avec un axe à droite\n // the antecedent must be chosen between rankA +rankM*13 and rankM*14-1\n antecedent = randint(rangA + rangM * 13 + 1, rangA + rangM * 14)\n }\n deltaRang = rangA + rangM * 13 - antecedent\n if (deltaRang > 0) { // l'axis is to the right of'antécédent\n image = rangA + rangM * 13 + deltaRang\n distracteurs.push(image - 1)\n if (image + 13 < 98) distracteurs.push(image + 13)\n if (image - 13 > 0) {\n if (image % 14 === 13) {\n distracteurs.push(image - 2)\n } else {\n if (choice([false, true])) {\n distracteurs.push(image - 13)\n } else {\n distracteurs.push(image - 14)\n }\n }\n }\n if (image % 14 !== 13) distracteurs.push(image + 1)\n } else { // l'axis is to the left of the'antécédent\n image = rangA + rangM * 13 + deltaRang\n distracteurs.push(image + 1)\n if (image + 14 < 98) {\n if (image % 14 === 0) {\n distracteurs.push(image + 14)\n } else {\n distracteurs.push(image + 13)\n }\n }\n if (image - 13 > 0) distracteurs.push(image - 13)\n if (image % 14 !== 0) distracteurs.push(image - 1)\n }\n\n break\n case 2: // axe parallèle à [AC]\n figA = axes[typeAxe][index][0] % 14 // figA est le triangle de la première rangée dont le côté [AC] définit l'axe\n rangA = figA >> 1 // le rang de gauche à droite est le numéro de la figure divisé par 2 car il n'y a que les figures paires qui comptent ici\n // on row rowM, rowA + rowM*13 is the number of the figure crossed by the axis\n rangM = randint(rangA, 6 - rangA) // on choisit la rangée verticale de l'antécédent\n if (rangA < 4) { // On est avec un axe à gauche\n // the antecedent must be chosen between rankM*14 and 2*(rankA-1) + rankM*14\n antecedent = randint(rangM * 14, (rangA - 1) * 2 + rangM * 14)\n } else { // on est avec un axe à droite\n // the antecedent must be chosen between rankA*2 + 1 + rankM*14 and rankM*14+(rankA+1)*2\n antecedent = randint(rangA * 2 + 1 + rangM * 14, rangM * 14 + (rangA + 1) * 2)\n }\n deltaRang = rangA - ((antecedent % 14 - antecedent % 2) >> 1)\n // the axis is to the right of the antecedent\n image = antecedent - 10 * deltaRang - 1 + 12 * (antecedent % 2) // ne me demandez pas d'où je sors ça !!!\n distracteurs.push(image - 1)\n if (deltaRang > 0) {\n distracteurs.push(antecedent + 2 * (deltaRang + 1))\n } else {\n distracteurs.push(antecedent + 3 * (deltaRang - 1))\n }\n if (image - 13 > 0) {\n if (image % 14 === 13) {\n distracteurs.push(image - 2)\n } else {\n distracteurs.push(image - 13)\n }\n } else {\n distracteurs.push(image + 13)\n }\n\n if (image % 14 !== 13) distracteurs.push(image + 1)\n\n break\n case 3:\n figA = axes[typeAxe][index][0] // figA un nombre pair entre 44 et 54 inclus. l'axe passe par son sommet gauche\n rangA = (figA - 42) >> 1 // le rang de gauche à droite. rangA va de 1 à 6 inclus\n if (rangA < 4) { // l'antecedent will be to the left of the'axe\n rangM = randint(0, Math.min(2 + rangA, 6)) // on choisit la rangée verticale de l'antécédent\n // the antecedent must be chosen between 0 and ?\n antecedent = rangM * 14 + 2 * randint(0, 2 + rangA - rangM)\n } else { // l'antecedent will be to the right of'axe\n rangM = randint(rangA - 2, 6) // on choisit la rangée verticale de l'antécédent\n // the antecedent must be chosen between rankA*2 + 1 + rankM*14 and rankM*14+(rankA+1)*2\n antecedent = rangM * 14 + randint(rangA * 2, 13)\n }\n rangN = antecedent % 14\n rangN -= rangN % 2\n rangN = rangN / 2\n deltaRang = rangA - rangN + 3 - rangM\n // the axis is to the right of the antecedent\n image = antecedent + 16 * deltaRang - 15 - 2 * (antecedent % 2) // ne me demandez pas d'où je sors ça !!!\n if (image > 0) {\n distracteurs.push(image - 1)\n }\n if (image < 97) {\n distracteurs.push(image + 1)\n }\n if (image - 13 > 0) {\n if (image % 14 === 13) {\n distracteurs.push(image - 2)\n } else {\n distracteurs.push(image - 13)\n }\n } else {\n distracteurs.push(image + 14)\n }\n if (image + 13 < 97) {\n if (image % 14 === 0) {\n distracteurs.push(image + 2)\n } else {\n distracteurs.push(image + 13)\n }\n }\n break\n case 4:\n figA = axes[typeAxe][index][0] // figA un nombre pair entre 44 et 54 inclus. l'axe passe par son sommet gauche\n rangA = figA % 14 // le rang de gauche à droite. rangA va de 1 à 6 inclus\n if (index < 2) { // l'antecedent will be under'axe qui est sous la diagonale\n rangM = randint(0, 3 + index) // on choisit la rangée verticale de l'antécédent\n antecedent = rangM * 14 + randint((3 + rangM - index) * 2, 13)\n } else if (index > 2) { // l'antecedent will be above the'axe qui est au dessus\n rangM = randint(index, 6) // on choisit la rangée verticale de l'antécédent\n antecedent = rangM * 14 + randint(0, rangM + 2 * (4 - index))\n } else { // l'antecedent is everywhere except on the diagonal because it is the axis\n rangM = randint(0, 6)\n antecedent = rangM * 14 + randint(0, 13, [rangM * 2, rangM * 2 + 1, rangM * 2 - 1])\n }\n deltaRang = 4 - index * 2 + 16 * rangM - (antecedent >> 1) * 2 // Vaudrait mieux que ça marche... je ne sais pas où je vais chercher tout ça !\n if (deltaRang > 0) {\n deltaRang >>= 1\n } else {\n deltaRang = -((-deltaRang) >> 1)\n }\n // the axis is to the right of the antecedent\n image = antecedent - 12 * deltaRang\n if (image > 0) {\n distracteurs.push(image - 1)\n }\n if (image < 97) {\n distracteurs.push(image + 1)\n }\n if (image - 13 > 0) {\n if (image % 14 === 13) {\n distracteurs.push(image - 2)\n } else {\n distracteurs.push(image - 13)\n }\n } else {\n distracteurs.push(image + 14)\n }\n if (image + 13 < 97) {\n if (image % 14 === 0) {\n distracteurs.push(image + 2)\n } else {\n distracteurs.push(image + 13)\n }\n }\n break\n case 5:\n figA = axes[typeAxe][index][0] // figA un nombre pair entre 44 et 54 inclus. l'axe passe par son sommet gauche\n rangA = Math.floor(figA / 14) // le rang de gauche à droite. rangA va de 1 à 6 inclus\n if (index < 4) { // l'antecedent will be under'axe\n rangM = randint(1, rangA - 2) // on choisit la rangée verticale de l'antécédent\n rangN = randint(rangA - rangM, 4 * (rangA - rangM) + 2 * (figA % 2) - 2)\n antecedent = rangM * 14 + rangN\n } else { // l'antecedent will be above the'axe\n rangM = randint(rangA - 1, 5) // on choisit la rangée verticale de l'antécédent\n rangN = randint(4 * (rangA - rangM) + 2 * (figA % 2) + 2, 12)\n antecedent = rangM * 14 + rangN\n }\n deltaRang = 44 + 14 * (index >> 1) + 2 * (index % 2) + 10 * (rangM - rangA) - (antecedent >> 1) * 2 // Vaudrait mieux que ça marche... je ne sais pas où je vais chercher tout ça !\n if (deltaRang > 0) {\n deltaRang >>= 1\n } else {\n deltaRang = -((-deltaRang) >> 1)\n }\n // the axis is to the right of the antecedent\n image = antecedent + 14 * deltaRang - 14 * (1 + antecedent % 2)\n if (image > 0) {\n distracteurs.push(image - 1)\n }\n if (image < 97) {\n distracteurs.push(image + 1)\n }\n if (image - 13 > 0) {\n if (image % 14 === 13) {\n distracteurs.push(image - 2)\n } else {\n distracteurs.push(image - 13)\n }\n } else {\n distracteurs.push(image + 14)\n }\n if (image + 13 < 97) {\n if (image % 14 === 0) {\n distracteurs.push(image + 2)\n } else {\n distracteurs.push(image + 13)\n }\n }\n break\n }\n return { antecedent, image, distracteurs }\n }\n\n this.nouvelleVersion = function (numeroExercice) {\n this.listeQuestions = [] // tableau contenant la liste des questions\n this.listeCorrections = []\n this.autocorrection = []\n const objetsEnonce = []\n let paramsEnonce = {}\n let texte = ''\n let texteCorr = ''\n let typesDeQuestionsDisponibles\n const scaleFigure = 1\n // construction of the triangular paving\n const triAngles = [{}] // tableau des triangles { tri: polygone (le triangle), gra: point(son centre de gravité), num: texteParPoint(son numéro)} l'indice du triangle est son numéro\n const images = []\n const A = point(0, 0, '')\n const B = point(1.2, 0, '')\n const C = rotation(B, A, 60, '')\n const v = vecteur(1.2, 0)\n const w = rotation(vecteur(1.2, 0), A, 60)\n triAngles[0] = { tri: polygone(A, B, C), gra: centreGraviteTriangle(A, B, C) }\n triAngles[1] = { tri: rotation(triAngles[0].tri, B, -60), gra: rotation(triAngles[0].gra, B, -60) }\n for (let i = 0; i < 7; i++) {\n if (i !== 0) {\n triAngles[i * 2] = { tri: translation(triAngles[(i - 1) * 2].tri, v), gra: translation(triAngles[(i - 1) * 2].gra, v) }\n triAngles[i * 2 + 1] = { tri: translation(triAngles[(i - 1) * 2 + 1].tri, v), gra: translation(triAngles[(i - 1) * 2 + 1].gra, v) }\n }\n for (let j = 1; j < 7; j++) {\n triAngles[i * 2 + j * 14] = { tri: translation(triAngles[i * 2 + (j - 1) * 14].tri, w), gra: translation(triAngles[i * 2 + (j - 1) * 14].gra, w) }\n triAngles[i * 2 + 1 + j * 14] = { tri: translation(triAngles[i * 2 + 1 + (j - 1) * 14].tri, w), gra: translation(triAngles[i * 2 + 1 + (j - 1) * 14].gra, w) }\n }\n }\n for (let i = 0; i < triAngles.length; i++) {\n triAngles[i].n = texteParPointEchelle(stringNombre(i), triAngles[i].gra, 'medium', 'black', 0.5)\n objetsEnonce.push(triAngles[i].tri, triAngles[i].n)\n }\n paramsEnonce = { xmin: 0, ymin: -0.1, xmax: 15, ymax: 10, pixelsParCm: 30 * scaleFigure, zoom: 1.5, scale: scaleFigure * 0.7, mainlevee: false }\n if (!this.sup) {\n this.nbQuestions = 3\n typesDeQuestionsDisponibles = [0, 1, 2]\n } else {\n this.nbQuestions = 6\n typesDeQuestionsDisponibles = [0, 1, 2, 3, 4, 5]\n }\n const listeTypesDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, 3)\n const couleurs = ['blue', 'green', 'red', 'gray', 'magenta', 'purple']\n let M\n let N\n const d = []\n const dLatex = []\n const question = []\n let choix\n for (let i = 0; i < this.nbQuestions; i++) {\n choix = randint(0, axes[listeTypesDeQuestions[i]].length - 1)\n switch (listeTypesDeQuestions[i]) { // ici on définit les 3 axes\n case 0: // axe horizontal\n case 2: // axe parallèle à [AC]\n case 3: // axe parallèle à [BC]\n M = triAngles[axes[listeTypesDeQuestions[i]][choix][0]].tri.listePoints[0]\n N = triAngles[axes[listeTypesDeQuestions[i]][choix][1]].tri.listePoints[0]\n break\n case 1: // axe vertical\n case 4: // axe perpendiculaire à [BC]\n case 5: // axe perpendiculaire à [AC]\n M = triAngles[axes[listeTypesDeQuestions[i]][choix][0]].gra\n N = triAngles[axes[listeTypesDeQuestions[i]][choix][1]].gra\n d[i] = droite(M, N, '', couleurs[i])\n break\n }\n d[i] = droite(M, N, '', couleurs[i])\n dLatex[i] = droiteAvecNomLatex(d[i], `(d_${i + 1})`)\n dLatex[i].epaisseur = 3\n dLatex[i].opacite = 0.6\n\n objetsEnonce.push(dLatex[i])\n // here we choose the figures and create the questions\n question[i] = choisitTriangle(listeTypesDeQuestions[i], choix)\n triAngles[question[i].antecedent].tri.couleurDeRemplissage = colorToLatexOrHTML(couleurs[i])\n triAngles[question[i].antecedent].tri.opaciteDeRemplissage = 0.7\n }\n this.introduction = mathalea2d(paramsEnonce, objetsEnonce)\n for (let i = 0; i < this.nbQuestions; i++) {\n texte = `${texteEnCouleur('What is the image of the figure ' + question[i].antecedent + ' by axial axis symmetry ' + `$${dLatex[i][1].texte}$` + ' ?', couleurs[i])}`\n texteCorr = `${texteEnCouleur('The image of the figure ' + question[i].antecedent + ' by axial axis symmetry ' + `$${dLatex[i][1].texte}$` + ' is the figure ' + question[i].image + '.', couleurs[i])}`\n if (context.isAmc) {\n if (i === 0) {\n this.autoCorrection[0] = {\n enonce: this.introduction + '\\\\\\\\\\not' + numAlpha(0) + texte + '\\\\\\\\\\not',\n propositions: [\n {\n type: 'mthMono',\n propositions: [\n {\n texte: question[i].image,\n statut: true,\n feedback: ''\n }\n ]\n }\n ]\n }\n } else {\n this.autoCorrection[0].enonce += `${numAlpha(i)} ${texte} \\\\\\\\\\n`\n this.autoCorrection[0].propositions.push({\n type: 'mthMono',\n propositions: [\n {\n texte: question[i].image,\n statut: true,\n feedback: ''\n }\n ]\n })\n }\n\n for (let j = 0; j < question[i].distracteurs.length; j++) {\n this.autoCorrection[0].propositions[i].propositions.push({\n texte: question[i].distracteurs[j],\n statut: false,\n feedback: ''\n })\n }\n } else {\n this.autoCorrection[i] = {\n enonce: (context.isAmc ? this.introduction + '\\\\\\\\' + texte : texte),\n propositions: [{\n texte: question[i].image,\n statut: true,\n feedback: ''\n }\n ]\n }\n for (let j = 0; j < question[i].distracteurs.length; j++) {\n this.autoCorrection[i].propositions.push({\n texte: question[i].distracteurs[j],\n statut: false,\n feedback: ''\n })\n }\n }\n objetsEnonce.push(symetrieAnimee(triAngles[question[i].antecedent].tri, d[i], `id=\"anim${numeroExercice}-${i}\" dur=\"2s\" repeatCount=\"2\"`))\n images[i] = symetrieAxiale(triAngles[question[i].antecedent].tri, d[i])\n images[i].couleurDeRemplissage = colorToLatexOrHTML(couleurs[i])\n images[i].opaciteDeRemplissage = 0.3\n objetsEnonce.push(images[i])\n // We add to the text of the correction, the figure of the correction\n // textCorr += mathalea2d(paramsCorrection, objectsCorrection)\n if (this.interactif && !context.isAmc) {\n texte += '<br>' + propositionsQcm(this, i).texte\n }\n this.listeQuestions.push(texte)\n this.listeCorrections.push(texteCorr)\n }\n listeQuestionsToContenu(this) // On envoie l'exercice à la fonction de mise en page\n // this.contentCorrection += '<br>' + mathalea2d(paramsEnonce, objectsEnonce)\n this.contenuCorrection += mathalea2d(paramsEnonce, objetsEnonce)\n if (context.isHtml) {\n for (let i = 0; i < this.nbQuestions; i++) {\n this.contenuCorrection += `<br><button class=\"btn ui labeled icon button\" style=\"margin:10px\" onclick=\"document.getElementById('anim${numeroExercice}-${i}').beginElement()\"><i class=\"redo circle icon\"> </i>Restart symmetry animation relative to ${d[i].nom}</button>`\n }\n }\n }\n this.besoinFormulaireCaseACocher = ['Number of axes of symmetry = 6 if checked, 3 otherwise', false]\n}\n"],"names":["titre","interactifReady","interactifType","amcReady","amcType","uuid","ref","SymetrieAxialePavageTriangulaire","Exercice","context","axes","choisitTriangle","typeAxe","index","figA","antecedent","rangM","rangN","rangA","deltaRang","image","distracteurs","randint","choice","numeroExercice","objetsEnonce","paramsEnonce","texte","texteCorr","typesDeQuestionsDisponibles","scaleFigure","triAngles","images","A","point","B","C","rotation","v","vecteur","w","polygone","centreGraviteTriangle","i","translation","j","texteParPointEchelle","stringNombre","listeTypesDeQuestions","combinaisonListes","couleurs","M","N","d","dLatex","question","choix","droite","droiteAvecNomLatex","colorToLatexOrHTML","mathalea2d","texteEnCouleur","numAlpha","symetrieAnimee","symetrieAxiale","propositionsQcm","listeQuestionsToContenu"],"mappings":"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"}