exercices/5e/5G42.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { listeQuestionsToContenu, randint, combinaisonListes, choisitLettresDifferentes } from '../../modules/outils.js'
import { point, rotation, codageSegments, segment, polygoneAvecNom, codageAngleDroit, labelPoint, similitude } from '../../modules/2d.js'
export const titre = 'Nature de parallélogrammes'

/**
 * Description didactique de l'exercice
 * @author
 * Référence 5G42
*/
export const uuid = '8812e'
export const ref = '5G42'
export default function DemonstrationsParallelogrammes () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.nbQuestions = 7
  this.nbCols = 1 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 1 // Uniquement pour la sortie LaTeX
  this.video = '' // Id YouTube ou url

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

    const typesDeQuestionsDisponibles = ['type1', 'type2', 'type3', 'type4', 'type5', 'type6', 'type7'] // On créé 3 types de questions
    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posés mais l'ordre diffère à chaque "cycle"
    for (let i = 0, objets, O, A, B, C, D, p, t1, t2, t3, t4, s1, s2, s3, s4, d1, d2, texte, texteCorr, noms, nom, prop1, prop2, type, def, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      noms = choisitLettresDifferentes(5, 'Q')
      nom = `$${noms[0] + noms[1] + noms[2] + noms[3]}$`
      objets = []
      O = point(0, 0, noms[4], 'above left')
      A = rotation(point(3, 0), O, randint(0, 90), noms[0])
      B = similitude(A, O, 80 + randint(0, 20), 0.8 + randint(1, 40) / 100, noms[1])
      C = similitude(A, O, 180, 0.9 + randint(1, 20) / 100, noms[2])
      D = similitude(B, O, 180, 0.9 + randint(1, 20) / 100, noms[3])
      p = polygoneAvecNom(A, B, C, D)
      s1 = segment(A, B, 'blue')
      s2 = segment(B, C, 'red')
      s3 = segment(C, D, 'blue')
      s4 = segment(D, A, 'red')
      d1 = segment(A, C)
      d2 = segment(B, D)
      objets.push(s1, s2, s3, s4, p[1])
      // Boucle principale où i+1 correspond au numéro de la question
      switch (listeTypeDeQuestions[i]) { // Suivant le type de question, le contenu sera différent
        case 'type1': // rectangle 1
          def = `ses diagonales $[${noms[0] + noms[2]}]$ et $[${noms[1] + noms[3]}]$ ont la même longueur`
          prop1 = 'a des diagonales de même longueur'
          prop2 = `$${noms[0] + noms[2]}=${noms[1] + noms[3]}$`
          type = 'rectangle'
          t2 = codageSegments('||', 'red', B, O, O, D)
          t1 = codageSegments('||', 'red', A, O, O, C)
          objets.push(t1, t2, d1, d2)
          break
        case 'type2': // losange 1
          def = `ses diagonales $[${noms[0] + noms[2]}]$ et $[${noms[1] + noms[3]}]$ sont perpendiculaires`
          prop1 = 'a des diagonales perpendiculaires'
          prop2 = `$[${noms[0] + noms[2]}]\\perp[${noms[1] + noms[3]}]$`
          type = 'losange'
          t1 = codageSegments('||', 'red', A, O, O, C)
          t2 = codageAngleDroit(A, O, D)
          t3 = codageSegments('|||', 'blue', B, O, O, D)
          t4 = labelPoint(O)
          objets.push(t1, t2, t3, t4, d1, d2)
          break
        case 'type3': // carré 1
          prop2 = `$[${noms[0] + noms[2]}]\\perp[${noms[1] + noms[3]}]$ et $${noms[0] + noms[2]}=${noms[1] + noms[3]}$`
          def = `ses diagonales $[${noms[0] + noms[2]}]$ et $[${noms[1] + noms[3]}]$ ont la même longueur et sont perpendiculaires`
          prop1 = 'a des diagonales perpendiculaires et de même longueur'
          t1 = codageSegments('||', 'red', A, O, O, C)
          t2 = codageAngleDroit(A, O, D)
          t3 = codageSegments('||', 'red', B, O, O, D)
          t4 = labelPoint(O)
          objets.push(t1, t2, t3, t4, d1, d2)
          type = 'carré'
          break
        case 'type4': // losange 2
          prop2 = `$${noms[0] + noms[1]}=${noms[1] + noms[2]}$`
          def = `ses côtés $[${noms[0] + noms[1]}]$ et $[${noms[1] + noms[2]}]$ ont la même longueur`
          prop1 = 'a deux côtés consécutifs de même longueur'
          type = 'losange'
          t3 = codageSegments('O', 'green', A, B, B, C)
          objets.push(t3)
          break
        case 'type5': // rectangle 2
          prop2 = `$[${noms[0] + noms[1]}]\\perp[${noms[1] + noms[2]}]$`
          def = `ses côtés $[${noms[0] + noms[1]}]$ et $[${noms[1] + noms[2]}]$ sont perpendiculaires`
          prop1 = 'a deux côtés consécutifs perpendiculaires'
          t3 = codageAngleDroit(A, B, C)
          objets.push(t3)
          type = 'rectangle'
          break
        case 'type6': // carré 2
          prop2 = `$[${noms[0] + noms[1]}]\\perp[${noms[1] + noms[2]}]$ et $${noms[0] + noms[1]}=${noms[1] + noms[2]}$`
          def = `ses côtés $[${noms[0] + noms[1]}]$ et $[${noms[1] + noms[2]}]$ sont perpendiculaires et de même longueur`
          prop1 = 'a deux côtés consécutifs perpendiculaires et de même longueur'
          t2 = codageSegments('O', 'green', A, B, B, C)
          t3 = codageAngleDroit(A, B, C)
          objets.push(t2, t3)
          type = 'carré'
          break
        case 'type7': // carré 3
          prop2 = `$[${noms[0] + noms[1]}]\\perp[${noms[1] + noms[2]}]$ et $[${noms[0] + noms[2]}]\\perp[${noms[1] + noms[3]}]$`
          def = `ses côtés $[${noms[0] + noms[1]}]$ et $[${noms[1] + noms[2]}]$ sont perpendiculaires et ses diagonales $[${noms[0] + noms[2]}]$ et $[${noms[1] + noms[3]}]$ aussi`
          prop1 = 'a deux côtés consécutifs perpendiculaires et des diagonales perpendiculaires'
          type = 'carré'
          t1 = codageAngleDroit(A, O, B)
          t2 = codageAngleDroit(A, B, C)
          t4 = labelPoint(O)
          objets.push(t1, t2, t4, d1, d2)
          break
      }
      texte = `${nom} est un parallélogramme tel que ${def}.<br>`
      texte += `Déterminer la nature de ${nom} en justifiant la réponse.`
      texteCorr = 'Les segments de même couleur sont parallèles sur le schéma suivant :<br>'
      texteCorr += mathalea2d({ xmin: -5, ymin: -4.5, xmax: 5, ymax: 4.5, pixelsParCm: 20, scale: 0.5, mainlevee: true, amplitude: 0.3 }, objets) + '<br>'
      texteCorr += `On sait que ${prop2}.<br>`
      texteCorr += `Si un parallélogramme ${prop1}, alors c'est un ${type}.<br>`
      texteCorr += `${nom} est donc un ${type}.`

      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é',3];
}