exercices/6e/6G10-3.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { combinaisonListes, enleveElement, lettreDepuisChiffre, listeQuestionsToContenu, randint, shuffle } from '../../modules/outils.js'
import { demiDroite, droite, labelPoint, point, segmentAvecExtremites } from '../../modules/2d.js'
import { context } from '../../modules/context.js'
export const titre = 'Choisir la bonne figure'
export const amcReady = true
export const amcType = 'qcmMono' // type de question AMC
export const interactifReady = true
export const interactifType = ['cliqueFigure']

/**
 * Plusieurs éléments sont proposés, il faut choisir le bon (par clic si interactif, par case à cocher par AMC)
 * @author ANGOT Rémi (Ajout AMC par Eric Elter)
 * Référence
*/
export const uuid = '83763'
export const ref = '6G10-3'
export default function CliqueFigure () {
  Exercice.call(this)
  this.nbQuestions = 3
  this.nbCols = 1
  this.nbColsCorr = 1

  this.nouvelleVersion = function () {
    this.autoCorrection = []
    this.interactifType = 'cliqueFigure'
    this.consigne = (this.interactif) ? 'Cliquer sur la bonne figure.' : context.vue !== 'diap' && !context.isAmc ? 'Entourer la bonne figure.' : 'Choisir la bonne figure représentant : ' /// Penser ici à AMC aussi.
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    this.figures = [] // Liste des objets de toutes les figures sur lesquelles on pourra cliquer avec leur id et un booléen de réponse
    const typesDeQuestions = combinaisonListes(['segment', 'droite', 'demidroite', 'demidroite2'], this.nbQuestions)
    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      const numeroLettre = randint(1, 20)
      const A = point(0, 0)
      const B = point(4, randint(-1, 3, 0))
      A.nom = lettreDepuisChiffre(numeroLettre)
      B.nom = lettreDepuisChiffre(numeroLettre + 1)
      const labels = labelPoint(A, B)
      this.figures[i] = [{ id: `figure0Ex${this.numeroExercice}Q${i}`, solution: false },
        { id: `figure1Ex${this.numeroExercice}Q${i}`, solution: false },
        { id: `figure2Ex${this.numeroExercice}Q${i}`, solution: false },
        { id: `figure3Ex${this.numeroExercice}Q${i}`, solution: false }
      ]
      const figSegment = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.4, id: `figure0Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B))
      const figDroite = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.4, id: `figure1Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), droite(A, B))
      const figDemiDroite = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.4, id: `figure2Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), demiDroite(A, B))
      const figDemiDroite2 = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.4, id: `figure3Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), demiDroite(B, A))
      const figSegmentAMC = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.3, id: `figure0Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B))
      const figDroiteAMC = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.3, id: `figure1Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), droite(A, B))
      const figDemiDroiteAMC = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.3, id: `figure2Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), demiDroite(A, B))
      const figDemiDroite2AMC = mathalea2d({ xmin: -2, xmax: 6, ymin: -2, style: '', scale: 0.3, id: `figure3Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), demiDroite(B, A))
      let figCorr
      let figCorrecteAMC
      const figIncorrectAMC = [figSegmentAMC, figDroiteAMC, figDemiDroiteAMC, figDemiDroite2AMC]
      switch (typesDeQuestions[i]) {
        case 'segment':
          texte = `Le segment d'extrémités $${A.nom}$ et $${B.nom}$.`
          this.figures[i][0].solution = true
          figCorr = {}
          figCorrecteAMC = figSegmentAMC
          break
        case 'droite':
          texte = `La droite passant par les points $${A.nom}$ et $${B.nom}$.`
          this.figures[i][1].solution = true
          figCorr = droite(A, B)
          figCorrecteAMC = figDroiteAMC
          break
        case 'demidroite':
          texte = `La demi-droite d'origine $${A.nom}$ passant par $${B.nom}$.`
          this.figures[i][2].solution = true
          figCorr = demiDroite(A, B)
          figCorrecteAMC = figDemiDroiteAMC
          break
        case 'demidroite2':
          texte = `La demi-droite d'origine $${B.nom}$ passant par $${A.nom}$.`
          this.figures[i][3].solution = true
          figCorr = demiDroite(B, A)
          figCorrecteAMC = figDemiDroite2AMC
          break
      }

      // PROPRE A AMC
      enleveElement(figIncorrectAMC, figCorrecteAMC)
      this.autoCorrection[i] = {}
      this.autoCorrection[i].enonce = this.consigne + texte
      this.autoCorrection[i].propositions = [
        {
          texte: figCorrecteAMC,
          statut: true
        },
        {
          texte: figIncorrectAMC[0],
          statut: false
        },
        {
          texte: figIncorrectAMC[1],
          statut: false
        },
        {
          texte: figIncorrectAMC[2],
          statut: false
        }
      ]
      this.autoCorrection[i].options = {
        ordered: false,
        lastChoice: 4
      }
      // FIN DE AMC

      if (!context.isAmc) {
        texte += '<br>'
        texteCorr = texte + mathalea2d({ xmin: -4, xmax: 6, ymin: -2, style: '', scale: 0.4, id: `figure3Ex${this.numeroExercice}Q${i}` }, labels, segmentAvecExtremites(A, B), figCorr)
        const figures = shuffle([figSegment, figDroite, figDemiDroite, figDemiDroite2])
        texte += figures.join('')
        if (this.interactif && context.isHtml) {
          texte += `<span id="resultatCheckEx${this.numeroExercice}Q${i}"></span>`
        }
      }

      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)
  }
}