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/6G13-MlDOGMLq.js.map
{"version":3,"file":"6G13-MlDOGMLq.js","sources":["../../src/exercices/6e/6G13.js"],"sourcesContent":["import { codageAngleDroit } from '../../lib/2d/angles.js'\nimport { cercle } from '../../lib/2d/cercle.js'\nimport { afficheLongueurSegment, texteSurSegment } from '../../lib/2d/codages.js'\nimport { droite, droiteParPointEtPerpendiculaire } from '../../lib/2d/droites.js'\nimport {\n  milieu,\n  point,\n  pointAdistance,\n  pointIntersectionCC,\n  pointIntersectionLC,\n  tracePoint\n} from '../../lib/2d/points.js'\nimport { polygone, polygoneRegulier } from '../../lib/2d/polygones.js'\nimport { segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { labelPoint } from '../../lib/2d/textes.js'\nimport { combinaisonListes } from '../../lib/outils/arrayOutils'\nimport { texteEnCouleur } from '../../lib/outils/embellissements'\nimport { creerNomDePolygone } from '../../lib/outils/outilString.js'\nimport { stringNombre, texNombre } from '../../lib/outils/texNombre'\nimport Exercice from '../Exercice'\nimport { mathalea2d, vide2d } from '../../modules/2dGeneralites.js'\nimport { listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport Alea2iep from '../../modules/Alea2iep.js'\nexport const titre = 'Draw squares and rectangles of given lengths'\n\nexport const dateDePublication = '10/09/2022'\n\n/**\n * Simple construction de rectangles et de carrés dont les longueur des côtés sont données avec pour autocorrection une vérification des mesures des diagonales.\n * @author Guillaume Valmont\n*/\nexport const uuid = '2203a'\nexport const ref = '6G13'\nexport default class TracerQuadrilatèresParticuliers extends Exercice {\n  constructor () {\n    super()\n    this.nbQuestions = 4\n    this.besoinFormulaireNumerique = ['Figure to trace', 11, '1: Square\\n2: Rectangle\\n3: Square (one diagonal)\\n4: Rectangle (one diagonal)\\n5: Rhombus (one side and one diagonal)\\n6: Rhombus (2 diagonals)\\n7: Parallelogram\\n8: Blend Square - Rectangle\\n9: Mix Square - Rectangle - Rhombus\\n10: Mix Rhombus - Parallelogram\\n11: Mix all figures']\n    this.sup = 8\n  }\n\n  nouvelleVersion (numeroExercice) {\n    this.listeQuestions = []\n    this.listeCorrections = []\n    this.autoCorrection = []\n\n    let typesDeQuestionsDisponibles = ['Square', 'Rectangle']\n    if (this.sup === 1) typesDeQuestionsDisponibles = ['Square']\n    else if (this.sup === 2) typesDeQuestionsDisponibles = ['Rectangle']\n    else if (this.sup === 3) typesDeQuestionsDisponibles = ['Square1diag']\n    else if (this.sup === 4) typesDeQuestionsDisponibles = ['Rectangle1diag']\n    else if (this.sup === 5) typesDeQuestionsDisponibles = ['Diamond']\n    else if (this.sup === 6) typesDeQuestionsDisponibles = ['Diamond2diag']\n    else if (this.sup === 7) typesDeQuestionsDisponibles = ['Parallelogram']\n    else if (this.sup === 8) typesDeQuestionsDisponibles = ['Square', 'Rectangle']\n    else if (this.sup === 9) typesDeQuestionsDisponibles = ['Square', 'Rectangle', 'Square1diag', 'Rectangle1diag']\n    else if (this.sup === 10) typesDeQuestionsDisponibles = ['Diamond', 'Diamond2diag', 'Parallelogram']\n    else typesDeQuestionsDisponibles = ['Square', 'Rectangle', 'Square1diag', 'Rectangle1diag', 'Diamond', 'Diamond2diag', 'Parallelogram']\n\n    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)\n    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {\n      const objetsCorrection = []\n      const nomPoly = creerNomDePolygone(4)\n      const A = point(0, 0, nomPoly.charAt(0), 'below left')\n      let B, C, D, naturePoly, figure\n      switch (listeTypeDeQuestions[i]) {\n        case 'Square': {\n          naturePoly = 'square'\n          let ok = false; let disSave = [0, 0, 1000]; const old = []; let dis\n          for (let jj = 0; jj < 20 && !ok; jj++) {\n            const cote = randint(20, 50, old) * 2 // paire seulement!\n            old.push(cote / 2)\n            const diagonale = cote / Math.sqrt(2)\n            const m = diagonale * 0.1 - Math.floor(diagonale /* * 0.1 * 10 */) * 0.1\n            dis = [diagonale, cote, m]\n            if (dis[2] < 0.005) {\n              disSave = dis\n              ok = true\n              break\n            } else {\n              if (dis[2] < disSave[2]) {\n                disSave = dis\n              }\n            }\n          }\n          B = point(disSave[1] / 10, 0, nomPoly.charAt(1), 'below right')\n          figure = polygoneRegulier(A, B, 4)\n          C = point(figure.listePoints[2].x, figure.listePoints[2].y, nomPoly.charAt(2), 'above right')\n          D = point(figure.listePoints[3].x, figure.listePoints[3].y, nomPoly.charAt(3), 'above left')\n          break\n        }\n\n        case 'Square1diag': {\n          naturePoly = 'square'\n          let ok = false; let disSave = [0, 0, 1000]; const old = []; let dis\n          for (let jj = 0; jj < 20 && !ok; jj++) {\n            const diagonale = randint(25, 50, old) * 2 // paire seulement!\n            old.push(diagonale / 2)\n            const cote = diagonale / Math.sqrt(2)\n            const m = cote * 0.1 - Math.floor(cote /* * 0.1 * 10  */) * 0.1\n            dis = [diagonale, cote, m]\n            // console.log('Square1diag:j' + dd + ':dis:' + dis[0].toFixed(2) + ':' + dis[1].toFixed(2) + ':dis' + dis [2].toFixed(4))\n            if (dis[2] < 0.005) {\n              disSave = dis\n              ok = true\n              // console.log('FOUND:Square1diag:' + dd + ':dis:' + dis[0].toFixed(2) + ':' + dis[1].toFixed(2) + ':dis' + dis[2].toFixed(4))\n              break\n            } else {\n              if (dis[2] < disSave[2]) {\n                disSave = dis\n              }\n            }\n          }\n          B = point(disSave[1] / 10, 0, nomPoly.charAt(1), 'below right')\n          figure = polygoneRegulier(A, B, 4)\n          C = point(figure.listePoints[2].x, figure.listePoints[2].y, nomPoly.charAt(2), 'above right')\n          D = point(figure.listePoints[3].x, figure.listePoints[3].y, nomPoly.charAt(3), 'above left')\n          break\n        }\n\n        case 'Rectangle': {\n          naturePoly = 'rectangle'\n          let ok = false; let disSave = [0, 0, 0, 1000]; const old = []; let dis\n          for (let jj = 0; jj < 20 && !ok; jj++) {\n            const lAB = randint(22, 45, old) * 2 // paire seulement!\n            old.push(lAB / 2)\n            for (let kk = 0; kk < 20 && !ok; kk++) {\n              const lBC = randint(35, 60, lAB)\n              const lAC = Math.sqrt(lBC * lBC + lAB * lAB)\n              dis = [lAB, lBC, lAC, lAC * 0.1 - Math.floor(lAC /** 0.1 * 10 */) * 0.1]\n              // console.log('Rectangle: j' + jj + 'k' + kk + ':dis:' + dis[0].toFixed(2) + ':' + dis[1].toFixed(2) + ':' + dis[2].toFixed(2) + ':dis:' + dis[3].toFixed(4))\n              if (dis[3] < 0.005) {\n                disSave = dis\n                ok = true\n                // console.log('FOUND:Rectangle: j' + dd + 'k' + kk + ':dis:' + dis[0].toFixed(2) + ':' + dis[1].toFixed(2 ) + ':' + dis[2].toFixed(2) + ':dis:' + dis[3].toFixed(4))\n                break\n              } else {\n                if (dis[3] < disSave[3]) {\n                  disSave = dis\n                }\n              }\n            }\n          }\n          B = point(disSave[0] / 10, 0, nomPoly.charAt(1), 'below right')\n          C = pointAdistance(B, disSave[1] / 10, 90, nomPoly.charAt(2))\n          D = pointAdistance(C, disSave[0] / 10, 180, nomPoly.charAt(3))\n          figure = polygone(A, B, C, D)\n          break\n        }\n\n        case 'Rectangle1diag': {\n          naturePoly = 'rectangle'\n          let ok = false; let disSave = [0, 0, 0, 1000]; const old = []; let dis\n          for (let jj = 0; jj < 20 && !ok; jj++) {\n            const lAB = randint(22, 45, old) * 2 // paire seulement!\n            old.push(lAB / 2)\n            for (let kk = 0; kk < 20 && !ok; kk++) {\n              const lBC = randint(lAB + 5, 100)\n              const lAC = Math.sqrt(lBC * lBC - lAB * lAB)\n              dis = [lAB, lBC, lAC, lAC * 0.1 - Math.floor(lAC /** 0.1 * 10 */) * 0.1]\n              // console.log('Rectangle1diag:j' + jj + 'k' + kk + ':dis:' + dis[0].toFixed(2) + ':' + dis[1].toFixed(2) + ':' + dis[2].toFixed(2) + ':dis:' + dis[3].toFixed(4))\n              if (dis[3] < 0.005) {\n                disSave = dis\n                ok = true\n                // console.log('FOUND:Rectangle1diag:j' + dd + 'k' + kk + ':dis:' + dis[0].toFixed(2) + ':' + dis[1].toFixed(2 ) + ':' + dis[2].toFixed(2) + ':dis:' + dis[3].toFixed(4))\n                break\n              } else {\n                if (dis[3] < disSave[3]) {\n                  disSave = dis\n                }\n              }\n            }\n          }\n\n          const diagonale = disSave[1] / 10\n          B = point(disSave[0] / 10, 0, nomPoly.charAt(1), 'below right')\n\n          C = pointIntersectionLC(droiteParPointEtPerpendiculaire(B, droite(A, B)), cercle(A, diagonale), nomPoly[2], 1)\n          C.positionLabel = 'above right'\n\n          D = pointIntersectionLC(droiteParPointEtPerpendiculaire(A, droite(A, B)), cercle(B, diagonale), nomPoly[3], 1)\n          D.positionLabel = 'above left'\n          figure = polygone(A, B, C, D)\n          break\n        }\n\n        case 'Diamond': {\n          naturePoly = 'diamond'\n          // isosceles triangle given by two lengths and auto-correction\n          let ok = false; let disSave = [0, 0, 0, 1000]; const old = []; let dis\n          for (let jj = 0; jj < 20 && !ok; jj++) {\n            const base = randint(20, 50, old) * 2 // paire seulement!\n            old.push(base / 2)\n            for (let kk = 0; kk < 20 && !ok; kk++) {\n              const cote = randint(base / 2 + 20, 80, base)\n              const diagonale2 = 2 * Math.sqrt(cote * cote * 0.01 / 2 + cote * cote * 0.01 / 2 - base * base * 0.01 / 4)\n              dis = [base, cote, cote, diagonale2 - Math.floor(diagonale2 * 10) * 0.1]\n              if (dis[3] < 0.005) {\n                disSave = dis\n                ok = true\n                break\n              } else {\n                if (dis[3] < disSave[3]) {\n                  disSave = dis\n                }\n              }\n            }\n          }\n          const diagonale = disSave[0] / 10\n          const cote = disSave[1] / 10\n          C = pointAdistance(A, diagonale, randint(-10, 10), nomPoly[2])\n          C.positionLabel = 'right'\n          const cA = cercle(A, cote)\n          const cB = cercle(C, cote)\n          B = pointIntersectionCC(cA, cB, nomPoly[1], 2)\n          B.positionLabel = 'below'\n          D = pointIntersectionCC(cA, cB, nomPoly[3], 1)\n          D.positionLabel = 'above'\n          figure = polygone(A, B, C, D)\n          break\n        }\n        case 'Diamond2diag' : {\n          naturePoly = 'diamond'\n          // right triangle with two lengths and self-correction\n          let ok = false; let disSave = [0, 0, 0, 1000]; const old = []; let dis\n          for (let jj = 0; jj < 10 & !ok; jj++) {\n            const lAB = randint(15, 30, old) * 2\n            old.push(lAB)\n            for (let kk = 0; kk < 20 && !ok; kk++) {\n              const lAC = randint(15, 30, lAB) * 2\n              const lBC = Math.sqrt(lAC * lAC + lAB * lAB)\n              dis = [lAB, lBC, lAC, lAC * 0.1 - Math.floor(lAC /* 0.1 * 10 */) * 0.1]\n              if (dis[3] < 0.005) {\n                disSave = dis\n                ok = true\n                break\n              } else {\n                if (dis[3] < disSave[3]) {\n                  disSave = dis\n                }\n              }\n            }\n          }\n          const diagonale1 = 2 * disSave[0] / 10\n          const diagonale2 = 2 * disSave[2] / 10\n          C = pointAdistance(A, diagonale1, randint(-10, 10), nomPoly[2])\n          C.positionLabel = 'right'\n          B = pointIntersectionLC(droiteParPointEtPerpendiculaire(milieu(A, C), droite(A, C)), cercle(milieu(A, C), diagonale2 / 2), nomPoly[1], 2)\n          B.positionLabel = 'below'\n          D = pointIntersectionLC(droiteParPointEtPerpendiculaire(milieu(A, C), droite(A, C)), cercle(milieu(A, C), diagonale2 / 2), nomPoly[3], 1)\n          D.positionLabel = 'above'\n          figure = polygone(A, B, C, D)\n          break\n        }\n        case 'Parallelogram' : {\n          naturePoly = 'parallelogram'\n          // any triangle given by three lengths and auto-correction\n          const lAB = randint(25, 45) * 2 // paire seulement!\n          let ok = false; let disSave = [0, 0, 0, 1000]; const old = []; let dis\n          old.push(lAB)\n          for (let kk = 0; kk < 10 && !ok; kk++) {\n            const lBC = randint(30, 80, old)\n            old.push(lBC)\n            for (let jj = 0; jj < 30 && !ok; jj++) {\n              const lAC = randint(Math.max(Math.abs(lAB - lBC) + 20, 30), Math.min(lAB + lBC - 20, 150))\n              const m = Math.sqrt(lAC * lAC * 0.01 / 2 + lBC * lBC * 0.01 / 2 - lAB * lAB * 0.01 / 4)\n              dis = [lAB, lBC, lAC, m - Math.floor(m * 10) * 0.1]\n              if (dis[3] < 0.005) {\n                disSave = dis\n                // console.log('i:' + i + ':kk:' + kk + ':dd:' + dd + ':d:' + m + 'dmin:' + dis[3])\n                // console.log('OK i:' + i + ':kk:' + kk + ':dd:' + dd + ':a:' + lBC + ':b:' + lAC + ':c: ' + lAB)\n                ok = true\n                break\n              } else {\n                if (dis[3] < disSave[3]) {\n                  // console.log('i:' + i + ':kk:' + kk + ':dd:' + dd + ':d:' + m + 'dmin:' + dis[3])\n                  // console.log('i:' + i + ':kk:' + kk + ':dd:' + jj + ':a:' + lBC + ':b:' + lAC + ':c:' + lAB)\n                  disSave = dis\n                }\n              }\n            }\n          }\n          const diagonale1 = disSave[0] / 10\n          const cote1 = disSave[1] / 10\n          const cote2 = disSave[2] / 10\n          C = pointAdistance(A, diagonale1, randint(-10, 10), nomPoly[2])\n          C.positionLabel = 'right'\n          D = pointIntersectionCC(cercle(A, cote1), cercle(C, cote2), nomPoly[3], 1)\n          D.positionLabel = 'above'\n          B = pointIntersectionCC(cercle(A, cote2), cercle(C, cote1), nomPoly[1], 2)\n          B.positionLabel = 'below'\n          figure = polygone(A, B, C, D)\n          break\n        }\n      }\n      const aA = listeTypeDeQuestions[i] === 'Square' || listeTypeDeQuestions[i] === 'Rectangle' ? codageAngleDroit(B, A, D, 'red', 0.7, 1, 0.6, 'red', 0.2) : vide2d()\n      const aB = listeTypeDeQuestions[i] === 'Square' || listeTypeDeQuestions[i] === 'Rectangle' ? codageAngleDroit(A, B, C, 'red', 0.7, 1, 0.6, 'red', 0.2) : vide2d()\n      const aC = listeTypeDeQuestions[i] === 'Square' || listeTypeDeQuestions[i] === 'Rectangle' ? codageAngleDroit(B, C, D, 'red', 0.7, 1, 0.6, 'red', 0.2) : vide2d()\n      const aD = listeTypeDeQuestions[i] === 'Square' || listeTypeDeQuestions[i] === 'Rectangle' ? codageAngleDroit(C, D, A, 'red', 0.7, 1, 0.6, 'red', 0.2) : vide2d()\n      const aE = listeTypeDeQuestions[i] === 'Diamond2diag' || listeTypeDeQuestions[i] === 'Square1diag' ? codageAngleDroit(C, milieu(A, C), D, 'red', 0.7, 1, 0.6, 'red', 0.2) : vide2d()\n      const segmentAC = segment(A, C, 'blue')\n      const segmentBC = segment(B, D, 'blue')\n      const traces2 = tracePoint(A, B, C, D)\n      const labels2 = labelPoint(A, B, C, D)\n      figure.epaisseur = 2\n      objetsCorrection.push(traces2, labels2, figure, aA, aB, aC, aD, aE, segmentAC, segmentBC)\n      if (listeTypeDeQuestions[i] === 'Rectangle' || listeTypeDeQuestions[i] === 'Square') {\n        objetsCorrection.push(afficheLongueurSegment(B, A), afficheLongueurSegment(C, B), afficheLongueurSegment(D, C), afficheLongueurSegment(A, D))\n        const txt = texteSurSegment(`${A.nom}${C.nom}≃${stringNombre(segment(A, C).longueur, 2)} cm`, milieu(A, C), C, 'blue')\n        txt.mathOn = false\n        txt.scale = 1.2\n        objetsCorrection.push(txt)\n      } else if (listeTypeDeQuestions[i] === 'Square1diag') {\n        const txt = texteSurSegment(`${A.nom}${C.nom}=${stringNombre(segment(A, C).longueur, 1)} cm`, milieu(A, C), C)\n        txt.mathOn = false\n        const txt2 = texteSurSegment(`${B.nom}${D.nom}=${stringNombre(segment(B, D).longueur, 1)} cm`, milieu(B, D), D)\n        txt2.mathOn = false\n        const txt3 = texteSurSegment(`${D.nom}${C.nom}≃${stringNombre(segment(D, C).longueur, 2)} cm`, D, C, 'blue')\n        txt3.mathOn = false\n        txt3.scale = 1.2\n        objetsCorrection.push(txt, txt2, txt3)\n      } else if (listeTypeDeQuestions[i] === 'Rectangle1diag') {\n        objetsCorrection.push(afficheLongueurSegment(B, A))\n        const txt = texteSurSegment(`${A.nom}${C.nom}=${stringNombre(segment(A, C).longueur, 1)} cm`, milieu(A, C), C)\n        txt.mathOn = false\n        const txt3 = texteSurSegment(`${B.nom}${C.nom}≃${stringNombre(segment(B, C).longueur, 2)} cm`, C, B, 'blue')\n        txt3.mathOn = false\n        txt3.scale = 1.2\n        objetsCorrection.push(txt, txt3)\n      } else if (listeTypeDeQuestions[i] === 'Diamond') {\n        objetsCorrection.push(afficheLongueurSegment(B, A), afficheLongueurSegment(C, B), afficheLongueurSegment(D, C), afficheLongueurSegment(A, D))\n        const txt = texteSurSegment(`${A.nom}${C.nom}=${stringNombre(segment(A, C).longueur, 1)} cm`, milieu(A, C), C)\n        txt.mathOn = false\n        const txt2 = texteSurSegment(`${B.nom}${D.nom}≃${stringNombre(segment(B, D).longueur, 2)} cm`, milieu(B, D), D, 'blue')\n        txt2.mathOn = false\n        txt2.scale = 1.2\n        objetsCorrection.push(txt, txt2)\n      } else if (listeTypeDeQuestions[i] === 'Diamond2diag') {\n        const txt = texteSurSegment(`${A.nom}${C.nom}=${stringNombre(segment(A, C).longueur, 1)} cm`, milieu(A, C), C)\n        txt.mathOn = false\n        const txt2 = texteSurSegment(`${B.nom}${D.nom}=${stringNombre(segment(B, D).longueur, 1)} cm`, milieu(B, D), D)\n        txt2.mathOn = false\n        const txt3 = texteSurSegment(`${D.nom}${C.nom}≃${stringNombre(segment(D, C).longueur, 2)} cm`, D, C, 'blue')\n        txt3.mathOn = false\n        txt3.scale = 1.2\n        objetsCorrection.push(txt, txt2, txt3)\n      } else if (listeTypeDeQuestions[i] === 'Parallelogram') {\n        const txt = texteSurSegment(`${A.nom}${C.nom}=${stringNombre(segment(A, C).longueur, 1)} cm`, milieu(A, C), C)\n        txt.mathOn = false\n        const txt2 = texteSurSegment(`${B.nom}${D.nom}≃${stringNombre(segment(B, D).longueur, 2)} cm`, milieu(A, C), B, 'blue')\n        txt2.mathOn = false\n        txt2.scale = 1.2\n        objetsCorrection.push(txt, afficheLongueurSegment(A, D), afficheLongueurSegment(D, C), txt2)\n      }\n\n      const anim = new Alea2iep()\n      if (listeTypeDeQuestions[i] === 'Rectangle' || listeTypeDeQuestions[i] === 'Square') {\n        anim.recadre(-segment(A, B).longueur, segment(B, C).longueur) // Déplace l'origine du repère (à mettre en premier obligatoirement)\n        anim.pointCreer(A, { dx: -0.5, dy: -0.5, label: nomPoly.charAt(0) }) // On déplace les labels des points avec dx et dy\n        anim.regleMontrer(A)\n        anim.regleSegment(A, B)\n        anim.pointCreer(B, { dx: 0.2, dy: -0.5, label: nomPoly.charAt(1) })\n        anim.regleMasquer()\n        anim.equerreMontrer(B)\n        anim.equerreRotation(90)\n        anim.crayonMontrer(B)\n        anim.tracer(pointAdistance(B, segment(B, C).longueur + 2, 90))\n        anim.equerreMasquer()\n        anim.codageAngleDroit(A, B, C)\n        anim.regleMontrer()\n        anim.regleDeplacer(B)\n        anim.regleRotation(90)\n        anim.crayonMontrer()\n        anim.crayonDeplacer(C)\n        anim.pointCreer(C, { dx: 0.2, dy: 0.8, label: nomPoly.charAt(2), tempo: 10 })\n        anim.crayonMasquer()\n        anim.regleMasquer()\n        anim.equerreRotation(90)\n        anim.equerreMontrer(C)\n        anim.crayonMontrer()\n        anim.tracer(pointAdistance(C, segment(C, D).longueur + 2, -180))\n        anim.codageAngleDroit(B, C, D)\n        anim.equerreMasquer()\n        anim.regleDeplacer(C)\n        anim.regleMontrer()\n        anim.regleRotation(180)\n        anim.crayonDeplacer(D)\n        anim.pointCreer(D, { dx: -0.5, dy: 0.8, label: nomPoly.charAt(3) })\n        anim.regleSegment(D, A)\n        anim.regleMasquer()\n        anim.crayonMasquer()\n      } else if (listeTypeDeQuestions[i] === 'Rectangle1diag') {\n        anim.recadre(-segment(A, B).longueur, segment(B, C).longueur) // Déplace l'origine du repère (à mettre en premier obligatoirement)\n        anim.pointCreer(A, { dx: -0.5, dy: -0.5, label: nomPoly.charAt(0) }) // On déplace les labels des points avec dx et dy\n        anim.regleMontrer(A)\n        anim.regleSegment(A, B)\n        anim.pointCreer(B, { dx: 0.2, dy: -0.5, label: nomPoly.charAt(1) })\n        anim.regleMasquer()\n\n        anim.equerreMontrer(B)\n        anim.equerreRotation(90)\n        anim.crayonMontrer(B)\n        anim.tracer(pointAdistance(B, segment(B, C).longueur + 2, 90))\n        anim.equerreMasquer()\n        anim.codageAngleDroit(A, B, C)\n\n        anim.compasMontrer(A)\n        anim.compasEcarterAvecRegle(segment(A, C).longueur)\n        anim.regleMasquer()\n        anim.compasTracerArcCentrePoint(A, C, 40)\n        anim.compasMasquer()\n\n        anim.crayonMontrer(C)\n        anim.pointCreer(C, { dx: 0.2, dy: +0.5, label: nomPoly.charAt(2) })\n\n        anim.equerreMontrer(C)\n        anim.equerreRotation(90)\n        anim.crayonMontrer(C)\n        anim.tracer(pointAdistance(C, segment(A, C).longueur + 2, 180))\n        anim.equerreMasquer()\n\n        anim.compasMontrer(C)\n        anim.compasEcarterAvecRegle(segment(A, B).longueur)\n        anim.regleMasquer()\n        anim.compasTracerArcCentrePoint(C, D, 40)\n        anim.compasMasquer()\n        anim.codageAngleDroit(B, C, D)\n\n        anim.crayonMontrer(D)\n        anim.pointCreer(D, { dx: -0.2, dy: +0.5, label: nomPoly.charAt(3) })\n        anim.regleSegment(A, D)\n        anim.regleMasquer()\n        anim.crayonMasquer()\n        anim.textePoint(`${nomPoly.charAt(1)}${nomPoly.charAt(2)} ≃ ${stringNombre(segment(B, C).longueur, 3, true)} cm`, milieu(B, C))\n      } else if (listeTypeDeQuestions[i] === 'Diamond' || listeTypeDeQuestions[i] === 'Parallelogram') {\n        anim.recadre(-segment(A, B).longueur, segment(B, D).longueur / 2) // Déplace l'origine du repère (à mettre en premier obligatoirement)\n        anim.pointCreer(A, { dx: -0.5, dy: -0.5, label: nomPoly.charAt(0) }) // On déplace les labels des points avec dx et dy\n        anim.regleMontrer(A)\n        anim.regleSegment(A, C)\n        anim.pointCreer(C, { dx: 0.2, dy: -0.5, label: nomPoly.charAt(2) })\n\n        anim.compasMontrer(A)\n        anim.compasEcarterAvecRegle(segment(A, B).longueur)\n        anim.regleMasquer()\n        anim.compasTracerArcCentrePoint(A, B, 40)\n        anim.compasEcarterAvecRegle(segment(C, B).longueur)\n        anim.regleMasquer()\n        anim.compasTracerArcCentrePoint(C, B, 40)\n        anim.compasMasquer()\n\n        anim.crayonMontrer()\n        anim.pointCreer(B, { dx: 0.2, dy: -0.5, label: nomPoly.charAt(1) })\n        anim.regleSegment(A, B)\n        anim.regleSegment(C, B)\n        anim.crayonMasquer()\n        anim.regleMasquer()\n\n        anim.compasMontrer(A)\n        anim.compasEcarterAvecRegle(segment(A, D).longueur)\n        anim.regleMasquer()\n        anim.compasTracerArcCentrePoint(A, D, 40)\n\n        anim.compasMontrer(C)\n        anim.compasEcarterAvecRegle(segment(C, D).longueur)\n        anim.regleMasquer()\n        anim.compasTracerArcCentrePoint(C, D, 40)\n        anim.compasMasquer()\n\n        anim.crayonMontrer()\n        anim.pointCreer(D, { dx: 0.2, dy: +0.5, label: nomPoly.charAt(3) })\n        anim.regleSegment(A, D)\n        anim.regleSegment(C, D)\n        anim.crayonMasquer()\n        anim.regleMasquer()\n\n        anim.regleSegment(B, D)\n        anim.regleMasquer()\n        anim.textePoint(`${nomPoly.charAt(1)}${nomPoly.charAt(3)} ≃ ${stringNombre(segment(B, D).longueur, 3, true)} cm`, milieu(B, D))\n      } else if (listeTypeDeQuestions[i] === 'Diamond2diag' || listeTypeDeQuestions[i] === 'Square1diag') {\n        anim.recadre(-segment(A, B).longueur, segment(B, D).longueur) // Déplace l'origine du repère (à mettre en premier obligatoirement)\n        anim.pointCreer(A, { dx: -0.5, dy: -0.5, label: nomPoly.charAt(0) }) // On déplace les labels des points avec dx et dy\n        anim.regleMontrer(A)\n        anim.regleSegment(A, C)\n        anim.pointCreer(C, { dx: 0.2, dy: -0.5, label: nomPoly.charAt(2) })\n\n        anim.regleMontrer(A)\n        anim.regleRotation(segment(A, C).angleAvecHorizontale)\n        anim.crayonMontrer(milieu(A, C))\n        anim.pointCreer(milieu(A, C))\n        anim.regleMasquer()\n\n        anim.equerreMontrer(milieu(A, C))\n        anim.equerreRotation(segment(A, C).angleAvecHorizontale)\n        anim.crayonMontrer(milieu(A, C))\n        anim.tracer(pointAdistance(milieu(A, C), segment(B, D).longueur / 2 + 2, segment(A, C).angleAvecHorizontale + 90))\n        anim.equerreMasquer()\n\n        anim.regleMontrer()\n        anim.regleSegment(pointAdistance(milieu(A, C), segment(B, D).longueur / 2 + 2, segment(A, C).angleAvecHorizontale + 270), pointAdistance(milieu(A, C), segment(B, D).longueur / 2 + 2, segment(A, C).angleAvecHorizontale + 90))\n        anim.regleMasquer()\n\n        anim.crayonMontrer(milieu(A, C))\n        anim.codageAngleDroit(C, milieu(A, C), D)\n\n        anim.regleMontrer(milieu(A, C))\n        anim.regleRotation(segment(A, C).angleAvecHorizontale + 90)\n        anim.crayonMontrer(D)\n        anim.pointCreer(D, { dx: 0.2, dy: +0.5, label: nomPoly.charAt(3) })\n\n        anim.regleDeplacer(milieu(A, C))\n        anim.regleRotation(segment(A, C).angleAvecHorizontale + 90 + 180)\n        anim.crayonMontrer(B)\n        anim.pointCreer(B, { dx: 0.2, dy: -0.5, label: nomPoly.charAt(1) })\n\n        anim.regleDeplacer(A)\n        anim.regleSegment(A, B)\n        anim.regleDeplacer(B)\n        anim.regleSegment(B, C)\n        anim.regleDeplacer(D)\n        anim.regleSegment(D, C)\n        anim.regleDeplacer(A)\n        anim.regleSegment(A, D)\n        anim.regleMasquer()\n        anim.crayonMasquer()\n\n        anim.textePoint(`${nomPoly.charAt(3)}${nomPoly.charAt(2)} ≃ ${stringNombre(segment(A, B).longueur, 3, true)} cm`, milieu(D, C))\n      }\n\n      texte = `Construct the ${naturePoly} $${nomPoly}$`\n      if (listeTypeDeQuestions[i] === 'Rectangle' || listeTypeDeQuestions[i] === 'Square') texte += ` with $${A.nom + B.nom} = ${texNombre(segment(A, B).longueur, 2)}~\\\\text{cm}$`\n      if (listeTypeDeQuestions[i] === 'Rectangle') texte += ` and $${B.nom + C.nom} = ${texNombre(segment(B, C).longueur, 2)}~\\\\text{cm}$`\n      if (listeTypeDeQuestions[i] === 'Diamond') texte += ` with $${A.nom + B.nom} = ${texNombre(segment(A, B).longueur, 2)}~\\\\text{cm}$ and $${A.nom + C.nom} = ${texNombre(segment(A, C).longueur, 2)}~\\\\text{cm}$`\n      if (listeTypeDeQuestions[i] === 'Diamond2diag') texte += ` with $${A.nom + C.nom} = ${texNombre(segment(A, C).longueur, 2)}~\\\\text{cm}$ and $${B.nom + D.nom} = ${texNombre(segment(B, D).longueur, 2)}~\\\\text{cm}$`\n      if (listeTypeDeQuestions[i] === 'Square1diag') texte += ` with $${A.nom + C.nom} = ${texNombre(segment(A, C).longueur, 2)}~\\\\text{cm}$`\n      if (listeTypeDeQuestions[i] === 'Rectangle1diag') texte += ` with $${A.nom + B.nom} = ${texNombre(segment(A, B).longueur, 2)}~\\\\text{cm}$ and $${A.nom + C.nom} = ${texNombre(segment(A, C).longueur, 2)}~\\\\text{cm}$`\n      if (listeTypeDeQuestions[i] === 'Parallelogram') texte += ` with $${A.nom + C.nom} = ${texNombre(segment(A, C).longueur, 2)}~\\\\text{cm}$, $${A.nom + D.nom} = ${texNombre(segment(A, D).longueur, 2)}~\\\\text{cm}$ and $${D.nom + C.nom} = ${texNombre(segment(D, C).longueur, 2)}~\\\\text{cm}$`\n      texte += '.'\n      // The lines below allow you to have a display with optimized dimensions\n      const xmin = Math.min(A.x, B.x, C.x, D.x) - 2\n      const xmax = Math.max(A.x, B.x, C.x, D.x) + 2\n      const ymin = Math.min(A.y, B.y, C.y, D.y) - 2\n      const ymax = Math.max(A.y, B.y, C.y, D.y) + 2\n      // Mathalea2d window parameters for normal statement\n      const paramsCorrection = { xmin, ymin, xmax, ymax, pixelsParCm: 20, scale: 1 }\n      // We add to the text of the correction, the figure of the correction\n      texteCorr = mathalea2d(paramsCorrection, objetsCorrection)\n      if (listeTypeDeQuestions[i] === 'Rectangle' || listeTypeDeQuestions[i] === 'Square') texteCorr += `<br><br>${texteEnCouleur(`For self-correction, we can check that $[${A.nom + C.nom}]$ and $[${B.nom + D.nom}]$ both measure $${texNombre(segment(A, C).longueur, 2, true)}~\\\\text{cm}$`)}.<br>`\n      if (listeTypeDeQuestions[i] === 'Diamond') texteCorr += `<br><br>${texteEnCouleur(`For self-correction, we can check that $[${B.nom + D.nom}]$ measures approximately $${texNombre(segment(B, D).longueur, 2, true)}~\\\\text{cm}$`)}.<br>`\n      if (listeTypeDeQuestions[i] === 'Diamond2diag' || listeTypeDeQuestions[i] === 'Square1diag') texteCorr += `<br><br>${texteEnCouleur(`For self-correction, one can check that all sides of the ${naturePoly} measures approximately $${texNombre(segment(A, B).longueur, 2, true)}~\\\\text{cm}$`)}.<br>`\n      if (listeTypeDeQuestions[i] === 'Rectangle1diag') texteCorr += `<br><br>${texteEnCouleur(`For self-correction, we can check that $[${B.nom + C.nom}]$ measures approximately $${texNombre(segment(B, C).longueur, 2, true)}~\\\\text{cm}$`)}.<br>`\n      if (listeTypeDeQuestions[i] === 'Parallelogram') texteCorr += `<br><br>${texteEnCouleur(`For self-correction, we can check that $[${B.nom + D.nom}]$ measures approximately $${texNombre(segment(B, D).longueur, 2, true)}~\\\\text{cm}$`)}.<br>`\n      texteCorr += anim.htmlBouton(numeroExercice, i)\n\n      // If the question has never been asked, we save it\n      if (this.questionJamaisPosee(i, segment(A, B).longueur, segment(B, C).longueur)) { // <- laisser le i et ajouter toutes les variables qui rendent les exercices différents (par exemple a, b, c et d)\n        // In this exercise, we do not use a, b, c and d but A, B, C and D so replace them!\n        this.listeQuestions.push(texte)\n        this.listeCorrections.push(texteCorr)\n        i++\n      }\n      cpt++\n    }\n    listeQuestionsToContenu(this)\n  }\n}\n"],"names":["titre","dateDePublication","uuid","ref","TracerQuadrilatèresParticuliers","Exercice","numeroExercice","typesDeQuestionsDisponibles","listeTypeDeQuestions","combinaisonListes","texte","texteCorr","cpt","objetsCorrection","nomPoly","creerNomDePolygone","A","point","B","C","D","naturePoly","figure","ok","disSave","old","dis","jj","cote","randint","diagonale","m","polygoneRegulier","lAB","kk","lBC","lAC","pointAdistance","polygone","pointIntersectionLC","droiteParPointEtPerpendiculaire","droite","cercle","base","diagonale2","cA","cB","pointIntersectionCC","diagonale1","milieu","cote1","cote2","aA","codageAngleDroit","vide2d","aB","aC","aD","aE","segmentAC","segment","segmentBC","traces2","tracePoint","labels2","labelPoint","afficheLongueurSegment","txt","texteSurSegment","stringNombre","txt2","txt3","anim","Alea2iep","texNombre","xmin","xmax","ymin","ymax","mathalea2d","texteEnCouleur","listeQuestionsToContenu"],"mappings":"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"}