exercices/6e/6G23.js

import Exercice from '../Exercice.js'
import { fixeBordures, mathalea2d } from '../../modules/2dGeneralites.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, lettreDepuisChiffre, texNombre, contraindreValeur, combinaisonListes } from '../../modules/outils.js'
import { point, rotation, afficheMesureAngle, sensDeRotation, homothetie, cibleCouronne, texteParPoint, similitude, segment, demiDroite } from '../../modules/2d.js'

export const titre = 'Construire un angle de mesure donnée'
export const amcReady = true
export const amcType = 'AMCOpen'

/**
 * Construire un angle
 * @author Jean-Claude Lhote
 * Référence 6G23
 */
export const uuid = '34e3c'
export const ref = '6G23'
export default function ConstruireUnAngle () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.nbQuestions = 2
  this.nbQuestionsModifiable = true
  this.nbCols = 1
  this.nbColsCorr = 1
  this.sup = 1
  this.video = 'cU80v1p6mMI'

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    this.sup = contraindreValeur(1, 4, this.sup, 1)
    let typeDeQuestions
    if (this.sup < 4) typeDeQuestions = [this.sup]
    else typeDeQuestions = [1, 2, 3]
    const listeTypeDeQuestion = combinaisonListes(typeDeQuestions, this.nbQuestions)
    let angle; let anglerot; let Apos; let Bpos; let Cpos; let fleche; const signe = []; let p; let texte; let texteCorr; let A; let B; let s; let C; let s2
    let secteur, cible, xMin, xMax, yMin, yMax, objetsEnonce, objetsCorrection
    signe[0] = randint(-1, 1, 0)
    for (let i = 1; i < this.nbQuestions; i++) {
      signe.push((-1) * signe[i - 1])
    }
    for (let i = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      switch (listeTypeDeQuestion[i]) {
        case 1 : angle = randint(1, 17, 9) * 10
          break
        case 2 : angle = randint(1, 8) * 10 + randint(0, 1) * 90 + 5
          break
        case 3 : angle = randint(1, 16) * 10 + randint(1, 9)
          break
      }
      angle = angle * signe[i]
      anglerot = randint(-50, 50)
      p = ['x', lettreDepuisChiffre(randint(1, 16)), 'y']
      texte = `Construire l'angle $\\widehat{${p[0] + p[1] + p[2]}}$ de mesure $${texNombre(Math.abs(angle))}\\degree$ en tournant dans le sens `
      if (angle < 0) {
        texte += 'des aiguilles d\'une montre.<br>'
      } else {
        texte += 'inverse des aiguilles d\'une montre.<br>'
      }
      A = point(0, 0)
      B = point(5, 0)
      B = rotation(B, A, anglerot)
      Apos = texteParPoint(p[1], similitude(B, A, -90, 0.1), 'milieu')
      Bpos = texteParPoint(p[0], similitude(A, homothetie(B, A, 0.9), signe[i] * 90, 0.1), 'milieu')

      s = segment(A, B)
      s.styleExtremites = '|-'
      s.epaisseur = 2
      C = rotation(B, A, angle)
      Cpos = texteParPoint(p[2], similitude(A, homothetie(C, A, 0.9), -signe[i] * 90, 0.1), 'milieu')
      fleche = sensDeRotation(B, A, signe[i])
      s2 = demiDroite(A, C, 'black', '|-')
      secteur = afficheMesureAngle(B, A, C)
      texteCorr = ''
      cible = cibleCouronne({ x: 0, y: 0, taille: 3 })
      xMin = Math.min(A.x - 4, C.x)
      xMax = Math.max(B.x, C.x) + 0.5
      yMin = Math.min(A.y - 4, C.y) - 0.5
      yMax = Math.max(A.y + 4, C.y) + 0.5
      context.fenetreMathalea2d = [xMin, yMin, xMax, yMax]
      objetsEnonce = [s, cible, Apos, Bpos, fleche]
      const bordure = fixeBordures(objetsEnonce, { rxmax: 1.5 })
      objetsCorrection = [s, secteur, cible, s2, Apos, Bpos, Cpos, fleche]
      texte += mathalea2d(Object.assign({}, bordure, { pixelsParCm: 20, scale: 0.65 }), objetsEnonce)
      // if ((!context.isHtml) && ((i + 1) % 2 === 0 && !(i + 1) % 4 === 0)) texte += '\\columnbreak '
      if ((!context.isHtml) && ((i + 1) % 4 === 0)) texte += '\\newpage '
      texteCorr = mathalea2d(Object.assign({}, bordure, { pixelsParCm: 20, scale: 0.6 }), objetsCorrection)
      if (this.questionJamaisPosee(i, angle, signe[i])) {
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        if (context.isAmc) {
          this.autoCorrection[i] = {
            enonce: texte,
            propositions: [{
              texte: texteCorr,
              statut: 0,
              sanscadre: true
            }
            ]
          }
        }
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireNumerique = ['Précision de l\'angle', 4, '1 : Angle à 10°\n2 : Angle à 5°\n3 : Angle à 1°\n4 : Mélange']
}