exercices/5e/5G30-1.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, arrondi, choisitLettresDifferentes, miseEnEvidence, numAlpha } from '../../modules/outils.js'
import { point, pointSurSegment, pointIntersectionDD, labelPoint, droite, droiteParPointEtParallele, rotation, similitude, codageAngle, longueur, angle } from '../../modules/2d.js'

export const titre = 'Déterminer des angles en utilisant les cas d\'égalité'

/**
 * Déterminer des angles en utilisant les cas d'égalités : opposés par le sommet, alternes-internes, correspondants...
 * ref 5G30-1
 * publié le 14/11/2020
 * @author Jean-Claude Lhote Inspiré d'exercices du manuel sésamath.
 */
export const uuid = 'd12db'
export const ref = '5G30-1'
export default function EgaliteDAngles () {
  'use strict'
  Exercice.call(this)
  this.sup = 1
  this.nbQuestions = 1
  if (context.isHtml) {
    this.spacing = 2
    this.spacingCorr = 3
  } else {
    this.spacing = 2
    this.spacingCorr = 2
  }
  this.nbCols = 1
  this.nbColsCorr = 1
  this.titre = titre
  this.nouvelleVersion = function () {
    this.sup = parseInt(this.sup)
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []
    // this.consigne = "Cet exercice est inspiré d'un exercice du manuel sésamath 5e"
    let figure = []; let choix
    const fig1 = function () {
      const objets = []; let enonce; let correction
      const noms = choisitLettresDifferentes(5, 'Q', true); let gras
      context.isHtml ? gras = '#f15929' : gras = 'black'
      const A = point(0, 0, noms[0], 'above left')
      let a = randint(45, 85)
      const ac = randint(8, 10)
      const ce = randint(7, 10, ac)
      const C = similitude(rotation(point(1, 0), A, randint(-45, 45)), A, a, ac, noms[2], 'left')
      const c = randint(45, 70)
      const E = similitude(A, C, c, ce / ac, noms[4], 'above right')
      const CA = droite(C, A)
      const CE = droite(C, E)
      const AE = droite(A, E, '', '#f15929')
      // const AE = droite(A, E, '', 'gray')
      // AE.epaisseur = 2
      const B = pointSurSegment(A, C, randint(3, ac - 4), noms[1], 'above left')
      const BD = droiteParPointEtParallele(B, AE, '', '#f15929')
      // const BD = droiteParPointEtParallele(B, AE, '', 'gray')
      // BD.epaisseur = 2
      const D = pointIntersectionDD(BD, CE, noms[3], 'above right')
      const m1 = codageAngle(E, A, C, 1, '', 'black', 2, 1, 'black', 0.1, true)
      const m2 = codageAngle(A, C, E, 1, '', 'black', 2, 1, 'black', 0.1, true)
      const l1 = labelPoint(A, B, C, D, E)
      const c1 = codageAngle(D, B, A, 1, '', 'blue', 2, 1, 'blue')
      const c2 = codageAngle(B, D, E, 1, '', '#f15929', 2, 1, '#f15929')
      const c3 = codageAngle(D, E, A, 1, '', 'green', 2, 1, 'green')
      const c4 = codageAngle(D, B, C, 1, '', 'pink', 2, 1, 'pink')
      const c5 = codageAngle(C, D, B, 1, '', 'red', 2, 1, 'red')
      objets.push(CA, CE, AE, BD, m1, m2, c1, c2, c3, c4, c5, l1)
      a = Math.round(angle(E, A, C))
      enonce = `Dans la figure ci-dessous,  les droites $(${noms[0]}${noms[4]})$ et $(${noms[1]}${noms[3]})$ sont parallèles.<br>`
      enonce += `On veut déterminer la mesure des angles du quadrilatère $${noms[0]}${noms[1]}${noms[3]}${noms[4]}$ (toutes les réponses doivent être justifiées).<br>`
      enonce += `${numAlpha(0)} Déterminer la mesure de l'angle $\\widehat{${noms[3]}${noms[1]}${noms[2]}}$.<br>`
      enonce += `${numAlpha(1)} En déduire la mesure de l'angle $\\widehat{${noms[0]}${noms[1]}${noms[3]}}$.<br>`
      enonce += `${numAlpha(2)} En utilisant la question ${numAlpha(0)}, déterminer la mesure de l'angle $\\widehat{${noms[1]}${noms[3]}${noms[2]}}$.<br>`
      enonce += `${numAlpha(3)} En déduire la mesure de l'angle $\\widehat{${noms[1]}${noms[3]}${noms[4]}}$.<br>`
      enonce += `${numAlpha(4)} En utilisant la question ${numAlpha(2)} déterminer la mesure de l'angle $\\widehat{${noms[3]}${noms[4]}${noms[0]}}$.<br>`
      enonce += `${numAlpha(5)} Vérifier la conjecture suivante : « La somme des angles d'un quadrilatère vaut 360°.»<br>`
      correction = `${numAlpha(0)} Comme les droites $(${noms[0]}${noms[4]})$ et $(${noms[1]}${noms[3]})$ sont parallèles, les angles correspondants $\\widehat{${noms[4]}${noms[0]}${noms[1]}}$ et $\\widehat{${noms[3]}${noms[1]}${noms[2]}}$ sont égaux, donc $\\widehat{${noms[3]}${noms[1]}${noms[2]}}$ mesure $${a}\\degree$.<br>`
      correction += `${numAlpha(1)} Les angles $\\widehat{${noms[0]}${noms[1]}${noms[3]}}$ et $\\widehat{${noms[3]}${noms[1]}${noms[2]}}$ sont adjacents supplémentaires, donc $\\widehat{${noms[0]}${noms[1]}${noms[3]}}$ mesure $180\\degree-${a}\\degree=${miseEnEvidence(180 - a, gras)}\\degree$.<br>`
      correction += `${numAlpha(2)} Dans un triangle, la somme des angles vaut $180\\degree$ donc $\\widehat{${noms[1]}${noms[3]}${noms[2]}}=180\\degree-\\widehat{${noms[3]}${noms[1]}${noms[2]}}-\\widehat{${noms[1]}${noms[2]}${noms[3]}}=180\\degree-${a}\\degree-${c}\\degree=${180 - a - c}\\degree$.<br>`
      correction += `${numAlpha(3)} Les angles $\\widehat{${noms[1]}${noms[3]}${noms[2]}}$ et $\\widehat{${noms[1]}${noms[3]}${noms[4]}}$ sont adjacents supplémentaires, donc $\\widehat{${noms[1]}${noms[3]}${noms[4]}}$ mesure $180\\degree-${180 - a - c}\\degree=${miseEnEvidence(a + c, gras)}\\degree$.<br>`
      correction += `${numAlpha(4)} Comme les droites $(${noms[0]}${noms[4]})$ et $(${noms[1]}${noms[3]})$ sont parallèles, les angles correspondants $\\widehat{${noms[1]}${noms[3]}${noms[2]}}$ et $\\widehat{${noms[3]}${noms[4]}${noms[0]}}$ sont égaux, donc $\\widehat{${noms[3]}${noms[4]}${noms[0]}}$ mesure $${miseEnEvidence(180 - a - c, gras)}\\degree$.<br>`
      correction += `${numAlpha(5)} La somme des angles du quadrilatère vaut donc : $${a}\\degree+${miseEnEvidence(180 - a, gras)}\\degree+${miseEnEvidence(a + c, gras)}\\degree+${miseEnEvidence(180 - a - c, gras)}\\degree=180\\degree+180\\degree=360\\degree$.<br>`
      correction += '$\\phantom{f}$ La conjecture est finalement vraie.'
      const params = { xmin: Math.min(A.x - 8, C.x - 8, E.x - 8), ymin: Math.min(A.y - 1, E.y - 1, C.y - 1), xmax: Math.max(E.x + 2, A.x + 2, C.x + 2), ymax: Math.max(C.y + 2, A.y + 2, E.y + 2), scale: 0.7 }

      return [objets, params, enonce, correction]
    }
    const fig2 = function () {
      const objets = []; let enonce; let correction
      const noms = choisitLettresDifferentes(5, 'Q', true)
      const A = point(0, 0, noms[0], 'above left')
      const B = rotation(point(randint(8, 10), randint(1, 3)), A, randint(-40, 40), noms[1], 'right')
      const ab = longueur(A, B)
      const ac = randint(6, 8)
      const a = randint(40, 60)
      const C = similitude(B, A, a, ac / ab, noms[2], 'above left')
      const CA = droite(C, A)
      const AB = droite(A, B)
      const D = pointSurSegment(A, B, ab / 2 + randint(-1, 1, 0) / 10, noms[3], 'below')
      const CE = droite(C, D)
      const cd = longueur(C, D)
      const ad = longueur(A, D)
      const E = pointSurSegment(C, D, cd * ab / ad, noms[4], 'below right')
      const BE = droite(B, E)
      const d = arrondi(angle(C, D, B), 0)
      const cA = codageAngle(D, A, C, 1, '', 'black', 2, 1, 'black', 0.2, true)
      const cD = codageAngle(C, D, B, 1, '', 'red', 2, 1, 'red', 0.2, true)
      const cE = codageAngle(D, E, B, 1, '', 'blue', 2, 1, 'blue', 0.2, true)
      const c4 = codageAngle(A, C, D, 1, '', 'green', 2, 1, 'green', 0.2)
      const c5 = codageAngle(B, D, E, 1, '', '#f15929', 2, 1, '#f15929', 0.2)
      const c6 = codageAngle(E, B, D, 1, '', 'pink', 2, 1, 'pink', 0.2)
      const c3 = codageAngle(A, D, C, 1, '', 'gray', 2, 1, 'gray', 0.2)
      const l1 = labelPoint(A, B, C, D, E)
      objets.push(CA, AB, CE, BE, cA, cD, cE, c3, c4, c5, c6, l1)
      enonce = 'La figure n\'est pas en vraie grandeur. Toutes les réponses devront être justifiées.<br>'
      enonce += `${numAlpha(0)} Déterminer la mesure de l'angle $\\widehat{${noms[0]}${noms[3]}${noms[2]}}$.<br>`
      enonce += `${numAlpha(1)} En déduire la mesure de l'angle $\\widehat{${noms[3]}${noms[2]}${noms[0]}}$.<br>`
      enonce += `${numAlpha(2)} Déterminer si les droites $(${noms[0]}${noms[2]})$ et $(${noms[4]}${noms[1]})$ sont parallèles.<br>`
      enonce += `${numAlpha(3)} Si on considère que les segments $[${noms[0]}${noms[2]}]$ et $[${noms[4]}${noms[1]}]$ sont de même longueur, Déterminer la nature du quadrilatère $${noms[0]}${noms[2]}${noms[1]}${noms[4]}$.<br>`
      correction = `${numAlpha(0)} Les angles $\\widehat{${noms[0]}${noms[3]}${noms[2]}}$ et $\\widehat{${noms[2]}${noms[3]}${noms[1]}}$ sont adjacents supplémentaires, donc $\\widehat{${noms[0]}${noms[3]}${noms[2]}}$ mesure $180\\degree-${d}\\degree=${180 - d}\\degree$.<br>`
      correction += `${numAlpha(1)} Dans un triangle, la somme des angles vaut $180\\degree$ donc $\\widehat{${noms[0]}${noms[2]}${noms[3]}}=180-\\widehat{${noms[3]}${noms[0]}${noms[2]}}-\\widehat{${noms[0]}${noms[3]}${noms[2]}}=180\\degree-${a}\\degree-${180 - d}\\degree=${-a + d}\\degree$.<br>`
      correction += `${numAlpha(2)} Pour les droites $(${noms[0]}${noms[2]})$ et $(${noms[4]}${noms[1]})$ coupées par la sécante $(${noms[2]}${noms[4]})$ les angles $\\widehat{${noms[0]}${noms[2]}${noms[3]}}$ et $\\widehat{${noms[1]}${noms[4]}${noms[3]}}$ sont des angles alternes-internes.<br>`
      correction += '$\\phantom{c/}$ Or, si des angles alternes-internes sont égaux, alors cela signifie que les droites coupées par la sécante sont parallèles.<br>'
      correction += `$\\phantom{c/}$ Les droites $(${noms[0]}${noms[2]})$ et $(${noms[4]}${noms[1]})$ sont donc parallèles.<br>`
      correction += `${numAlpha(3)} Les droites $(${noms[0]}${noms[2]})$ et $(${noms[4]}${noms[1]})$ sont parallèles et les segments $[${noms[0]}${noms[2]}]$ et $[${noms[4]}${noms[1]}]$ sont de même longueur.<br>`
      correction += '$\\phantom{c/}$ Or, un quadrilatère qui possède des côtés opposés parallèles et de même longueur est un parallèlogramme.<br>'
      correction += `$\\phantom{c/}$ Donc $${noms[0]}${noms[2]}${noms[1]}${noms[4]}$ est un parallèlogramme et $${noms[3]}$ est son centre.`
      const params = { xmin: Math.min(A.x, B.x, C.x, D.x, E.x) - 1, ymin: Math.min(A.y, B.y, C.y, D.y, E.y) - 1, xmax: Math.max(A.x, B.x, C.x, D.x, E.x) + 2, ymax: Math.max(A.y, B.y, C.y, D.y, E.y) + 2 }

      return [objets, params, enonce, correction]
    }
    if (this.sup === 3) { choix = randint(1, 2) } else { choix = parseInt(this.sup) }
    switch (choix) {
      case 1:
        figure = fig1()
        figure[2] += mathalea2d(figure[1], figure[0])
        break
      case 2:
        figure = fig2()
        figure[2] += mathalea2d(figure[1], figure[0])
        break
    }
    this.listeQuestions.push(figure[2])
    this.listeCorrections.push(figure[3])
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireNumerique = ['Numéro de figure', 3, '1 : Le trapèze\n2 : Le papillon\n3 : Au hasard']
}