exercices/5e/5G40-2.js

import { point, polygone, segment, milieu, nommePolygone, codageSegment, codageAngle, latexParPoint } from '../../modules/2d.js'
import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { creerNomDePolygone, listeQuestionsToContenu, combinaisonListes } from '../../modules/outils.js'
export const titre = 'Reconnaître un parallélogramme à partir du codage d\'une figure'

export const dateDeModifImportante = '08/05/2022'
/**
 * On doit justifier qu'un quadrilatère est un parallélogramme en citant la bonne propriété
 * @author Rémi Angot
 * Référence 5G40-2
 * Ajout de la possibilité de choisir le nombre de questions par Guillaume Valmont le 08/05/2022
 * Publié le 5/4/2021
*/
export const uuid = '588fe'
export const ref = '5G40-2'
export default function ParallelogrammeAPartirDUneFigure () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = "Pour chacune des figures suivantes, tracées à main levée, préciser s'il s'agit d'un parallélogramme."
  this.nbCols = 2 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 1 // Uniquement pour la sortie LaTeX
  // this.sup = 1
  this.tailleDiaporama = 3 // Pour les exercices chronométrés. 50 par défaut pour les exercices avec du texte
  this.video = '' // Id YouTube ou url

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    // this.introduction = ''

    const A = point(0, 0)
    const B = point(5, 0)
    const C = point(6.5, -3)
    const D = point(1.5, -3)
    const O = milieu(A, C)
    O.nom = 'O'
    const p = polygone(A, B, C, D)
    const sAC = segment(A, C)
    sAC.pointilles = 5
    const sBD = segment(B, D)
    sBD.pointilles = 5
    const sABcodage = codageSegment(A, B, 'X', 'blue')
    const sCDcodage = codageSegment(C, D, 'X', 'blue')
    const sADcodage = codageSegment(A, D, '▼', 'blue')
    const sBCcodage = codageSegment(B, C, '▼', 'blue')
    const sAOcodage = codageSegment(A, O, '|', 'blue')
    const sCOcodage = codageSegment(O, C, '|', 'blue')
    const sBOcodage = codageSegment(B, O, '||', 'blue')
    const sDOcodage = codageSegment(O, D, '||', 'blue')
    const aDABcodage = codageAngle(D, A, B, 0.8, '|', 'black', 1, 1)
    const aBCDcodage = codageAngle(B, C, D, 0.8, '|', 'black', 1, 1)
    const aABCcodage = codageAngle(A, B, C, 0.8, '|||', 'black', 1, 1)
    const aCDAcodage = codageAngle(C, D, A, 0.8, '|||', 'black', 1, 1)
    const sAB = segment(A, B, 'blue')
    const sBC = segment(B, C, 'green')
    const sCD = segment(C, D, 'blue')
    const sAD = segment(A, D, 'green')
    sAB.epaisseur = 2
    sCD.epaisseur = 2
    sBC.epaisseur = 2
    sAD.epaisseur = 2

    // Cerf-volant
    const M1 = point(0, 0)
    const N1 = point(-1, -2)
    const O1 = point(0, -6)
    const P1 = point(1, -2)
    const p1 = polygone(M1, N1, O1, P1)

    const codecerf1 = codageSegment(M1, N1, 'X', 'blue')
    const codecerf2 = codageSegment(M1, P1, 'X', 'blue')
    const codecerf3 = codageSegment(O1, P1, '▼', 'blue')
    const codecerf4 = codageSegment(O1, N1, '▼', 'blue')

    const paramsEnonce = { xmin: -1, ymin: -4, xmax: 7.5, ymax: 0.8, pixelsParCm: 20, scale: 0.5, mainlevee: true, amplitude: 0.5 }

    let nomsDejaUtilises
    let nom
    function gestionNom (i) {
      if (i % 4 === 0) nomsDejaUtilises = ['OQD']
      nom = creerNomDePolygone(4, nomsDejaUtilises)
      nomsDejaUtilises.push(nom)
      A.nom = nom[0]
      B.nom = nom[1]
      C.nom = nom[2]
      D.nom = nom[3]
    }

    const typeQuestionsDisponibles = ['cotesOpposesMemeLongueur', 'cotesConsecutifsMemeLongueur', 'diagonalesMemeLongueur', '2cotesOpposesMemeLongueur', '2cotesOpposesMemeLongueurv2', '2cotesOpposesMemeLongueurEtParallele', '2cotesOpposesMemeLongueurEtParallelev2', '2cotesOpposesEtParalleles', 'anglesOpposesEgaux'] // On créé 3 types de questions
    const listeTypeQuestions = combinaisonListes(typeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posés mais l'ordre diffère à chaque "cycle"
    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // Boucle principale où i+1 correspond au numéro de la question
      switch (listeTypeQuestions[i]) { // Suivant le type de question, le contenu sera différent
        case 'cotesOpposesMemeLongueur':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sABcodage, sBCcodage, sCDcodage, sADcodage, nommePolygone(p, nom)])
          texteCorr = `On sait que $${A.nom + B.nom} = ${C.nom + D.nom}$ et $${B.nom + C.nom} = ${D.nom + A.nom}$.`
          texteCorr += '<br>Or « Si un quadrilatère a ses côtés opposés de même longueur alors c\'est un parallélogramme ».'
          texteCorr += `<br>Donc $${nom}$ est un parallélogramme.`
          break
        case 'cotesConsecutifsMemeLongueur':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, codageSegment(A, B, 'X', 'blue'), codageSegment(B, C, 'X', 'blue'), codageSegment(C, D, '||', 'blue'), codageSegment(D, A, '||', 'blue'), nommePolygone(p, nom)])

          texteCorr = `Les côtés consécutifs de $${nom}$ sont de même longueur, ce n'est pas forcément un parallélogramme comme le montre le contre-exemple suivant. (Il s'agit d'un cerf-volant).`

          texteCorr += '<br>' + mathalea2d({ xmin: -1.5, ymin: -6.5, xmax: 1.5, ymax: 0.5, pixelsParCm: 20, scale: 1 }, [p1, codecerf1, codecerf2, codecerf3, codecerf4])
          break
        case 'diagonalesMemeLongueur':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sAOcodage, sBOcodage, sCOcodage, sDOcodage, sAC, sBD, nommePolygone(p, nom), latexParPoint('O', O, 'black', 200, 12, '')])
          texteCorr = `On sait que $${A.nom + 'O'} = ${'O' + C.nom}$ et $${B.nom + 'O'} = ${'O' + D.nom}$.`
          texteCorr += '<br>Or « Si un quadrilatère a ses diagonales qui se coupent en leur milieu alors c\'est un parallélogramme ».'
          texteCorr += `<br>Donc $${nom}$ est un parallélogramme.`
          break
        case '2cotesOpposesMemeLongueur':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sABcodage, sCDcodage, nommePolygone(p, nom)])
          texteCorr = `Seulement deux côtés opposés sont de même longueur, ce n'est pas suffisant pour que $${nom}$ soit un parallélogramme.`
          break
        case '2cotesOpposesMemeLongueurv2':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sBCcodage, sADcodage, nommePolygone(p, nom)])
          texteCorr = `Seulement deux côtés opposés sont de même longueur, ce n'est pas suffisant pour que $${nom}$ soit un parallélogramme.`
          break
        case '2cotesOpposesMemeLongueurEtParallele':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sAB, sCD, sABcodage, sCDcodage, nommePolygone(p, nom)]) + `$(${A.nom + B.nom}) // (${C.nom + D.nom})$`
          texteCorr = `On sait que $${A.nom + B.nom} = ${C.nom + D.nom}$ et $(${A.nom + B.nom}) // (${C.nom + D.nom})$.`
          texteCorr += '<br>Or « Si un quadrilatère a deux côtés opposés parallèles et de même longueur alors c\'est un parallélogramme ».'
          texteCorr += `<br>Donc $${nom}$ est un parallélogramme.`
          break
        case '2cotesOpposesMemeLongueurEtParallelev2':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sBC, sAD, sBCcodage, sADcodage, nommePolygone(p, nom)]) + `$(${B.nom + C.nom}) // (${A.nom + D.nom})$`
          texteCorr = `On sait que $${B.nom + C.nom} = ${A.nom + D.nom}$ et $(${B.nom + C.nom}) // (${A.nom + D.nom})$.`
          texteCorr += '<br>Or « Si un quadrilatère a deux côtés opposés parallèles et de même longueur alors c\'est un parallélogramme ».'
          texteCorr += `<br>Donc $${nom}$ est un parallélogramme.`
          break
        case '2cotesOpposesEtParalleles':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, sAB, sCD, nommePolygone(p, nom)]) + `$(${A.nom + B.nom}) // (${C.nom + D.nom})$`
          texteCorr = `$${nom}$ a deux côtés opposés parallèles, c'est donc un trapèze et pas forcément un parallélogramme.`
          break
        case 'anglesOpposesEgaux':
          gestionNom(i)
          texte = mathalea2d(paramsEnonce, [p, nommePolygone(p, nom), aABCcodage, aBCDcodage, aCDAcodage, aDABcodage])
          texteCorr = `On sait que $\\widehat{${A.nom + B.nom + C.nom}} = \\widehat{${C.nom + D.nom + A.nom}}$ et $\\widehat{${B.nom + C.nom + D.nom}} = \\widehat{${D.nom + A.nom + B.nom}}$.`
          texteCorr += '<br>Or « Si un quadrilatère a ses angles opposés égaux alors c\'est un parallélogramme ».'
          texteCorr += `<br>Donc $${nom}$ est un parallélogramme.`
          break
      }
      if (this.listeQuestions.indexOf(texte) === -1) {
        // Si la question n'a jamais été posée, on en crée une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  // this.besoinFormulaireNumerique = ['Niveau de difficulté', 2,'1 : Facile\n2 : Difficile'];
}