exercices/2e/2G12-3.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { listeQuestionsToContenu, randint, choice, combinaisonListes, abs, ecritureParentheseSiNegatif, fractionSimplifiee, texNombre } from '../../modules/outils.js'
import { point, tracePoint, codageSegments, labelPoint, segment, axes, grille } from '../../modules/2d.js'

export const titre = 'Démontrer qu\'un quadrilatère est ou non un parallélogramme'

/**
 * 2G12-3
 * @author Stéphane Guyon
 */
export const uuid = '31760'
export const ref = '2G12-3'
export default function Parallélogramme () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.sup = parseInt(this.sup)
  this.nbQuestions = 2
  this.nbCols = 2
  this.nbColsCorr = 2
  this.sup = 1 //

  this.nouvelleVersion = function () {
    this.sup = parseInt(this.sup)
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    const typesDeQuestionsDisponibles = [1, 2]; let typesDeQuestions

    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
    for (let i = 0, a, ux, uy, g, test, s1, s2, s3, s4, s5, s6, xA, yA, xB, yB, xC, yC, xD, yD, xI0, xI1, yI0, yI1, xJ0, xJ1, yJ0, yJ1, A, B, C, D, T, L, M, N, I, J, O, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      typesDeQuestions = listeTypeDeQuestions[i]
      switch (typesDeQuestions) {
      // Cas par cas, on définit le type de nombres que l'on souhaite
      // Combien de chiffres ? Quelles valeurs ?
        case 1: // Dq ABDC parallélogramme
          xA = randint(0, 4) * choice([-1, 1])
          yA = randint(0, 4) * choice([-1, 1])
          xC = randint(0, 4) * choice([-1, 1])
          yC = randint(0, 4) * choice([-1, 1])
          while (abs(xC - xA) < 4) {
            xA = randint(0, 4) * choice([-1, 1])
            xC = randint(0, 4) * choice([-1, 1])
          }
          while (abs(yC - yA) < 4) {
            yA = randint(0, 4) * choice([-1, 1])
            yC = randint(0, 4) * choice([-1, 1])
          }
          uy = randint(3, 5) * choice([-1, 1])
          ux = randint(3, 5) * choice([-1, 1])

          if (abs(yC - yA) / (xC - xA) === abs((uy) / (ux))) {
            uy = uy + 2
          }
          yB = yA + uy
          xB = xA + ux
          xD = xC + ux
          yD = yC + uy

          xI0 = fractionSimplifiee(xA + xD, 2)[0]
          xI1 = fractionSimplifiee(xA + xD, 2)[1]
          yI0 = fractionSimplifiee(yA + yD, 2)[0]
          yI1 = fractionSimplifiee(yA + yD, 2)[1]
          xJ0 = fractionSimplifiee(xB + xC, 2)[0]
          xJ1 = fractionSimplifiee(xB + xC, 2)[1]
          yJ0 = fractionSimplifiee(yB + yC, 2)[0]
          yJ1 = fractionSimplifiee(yB + yC, 2)[1]
          g = grille(-9, -9, 9, 9)
          A = point(xA, yA, 'A', 'red')
          B = point(xB, yB, 'B', 'red')
          C = point(xC, yC, 'C', 'red')
          D = point(xD, yD, 'D', 'red')
          I = point(1, 0, 'I')
          J = point(0, 1, 'J')
          O = point(0, 0, 'O')
          M = point((xA + xD) / 2, (yA + yD) / 2, 'M')

          a = axes(-9, -9, 9, 9)
          s1 = segment(A, B, 'blue')
          s2 = segment(D, B, 'blue')
          s3 = segment(C, D, 'blue')
          s4 = segment(A, C, 'blue')
          s5 = segment(A, D, 'red')
          s6 = segment(B, C, 'red')
          s1.epaisseur = 2
          s2.epaisseur = 2
          s3.epaisseur = 2
          s4.epaisseur = 2
          s5.epaisseur = 2
          s6.epaisseur = 2
          codageSegments('X', 'red', s5, s6) // Code les segments s5 et s6
          T = tracePoint(A, B, C, D, M, I, J, O) // Repère les points avec une croix
          L = labelPoint(A, B, C, D, M, I, J, O)

          texte = 'Dans un repère orthonormé $(O,I,J)$, on donne les 4 points suivants :<br>'
          texte += ` $A\\left(${xA};${yA}\\right)$ ; $B\\left(${xB};${yB}\\right).$`
          texte += ` $C\\left(${xC};${yC}\\right)$ ; $D\\left(${xD};${yD}\\right).$`
          texte += '<br>Déterminer si le quadrilatère $ABDC$ est un parallélogramme.'

          texteCorr = mathalea2d({
            xmin: -9,
            ymin: -9,
            xmax: 9,
            ymax: 9
          }, T, L, g, a, s1, s2, s3, s4, s5, s6)

          texteCorr += '<br>On sait que $ABDC$ est un parallélogramme si et seulement si ses diagonales se coupent en leur milieu.'
          texteCorr += '<br>On cherche donc les coordonnées du milieu de chacune des deux diagonales du quadrilatère.'
          texteCorr += '<br>On sait d\'après le cours, que si $A(x_A;y_A)$ et $D(x_D;y_D)$ sont deux points d\'un repère ,'
          texteCorr += '<br> alors les coordonnées du point $M$ milieu de $[AD]$ sont '
          texteCorr += '$M\\left(\\dfrac{x_A+x_D}{2};\\dfrac{y_A+y_D}{2}\\right)$ <br>'
          texteCorr += 'On applique la relation à l\'énoncé : '
          texteCorr += `$\\begin{cases}x_M=\\dfrac{${xA}+${ecritureParentheseSiNegatif(xD)}}{2} \\\\ y_M=\\dfrac{${yA}+${ecritureParentheseSiNegatif(yD)}}{2}\\end{cases}$`
          texteCorr += `<br>On en déduit :  $\\begin{cases}x_M=\\dfrac{${texNombre(xA + xD)}}{2}\\\\y_M=\\dfrac{${texNombre(yA + yD)}}{2}\\end{cases}$`
          if (xI1 !== 1 && yI1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(\\dfrac{${xI0}}{${xI1}};\\dfrac{${yI0}}{${yI1}};\\right)$` }
          if (xI1 === 1 && yI1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(${xI0};\\dfrac{${yI0}}{${yI1}}\\right)$` }
          if (xI1 !== 1 && yI1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(\\dfrac{${xI0}}{${xI1}};${yI0}\\right)$` }
          if (xI1 === 1 && yI1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(${xI0};${yI0}\\right)$` }
          texteCorr += '<br> Les coordonnées du point $N$ milieu de $[BC]$ sont '
          texteCorr += '$N\\left(\\dfrac{x_B+x_C}{2};\\dfrac{y_B+y_C}{2}\\right)$ <br>'
          texteCorr += 'On applique la relation à l\'énoncé : '
          texteCorr += `$\\begin{cases}x_N=\\dfrac{${xB}+${ecritureParentheseSiNegatif(xC)}}{2} \\\\ y_N=\\dfrac{${yB}+${ecritureParentheseSiNegatif(yC)}}{2}\\end{cases}$`
          texteCorr += `<br>On en déduit :  $\\begin{cases}x_N=\\dfrac{${texNombre(xB + xC)}}{2}\\\\y_N=\\dfrac{${texNombre(yB + yC)}}{2}\\end{cases}$`
          if (xJ1 !== 1 && yJ1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(\\dfrac{${xJ0}}{${xJ1}};\\dfrac{${yJ0}}{${yJ1}};\\right)$` }
          if (xJ1 === 1 && yJ1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(${xJ0};\\dfrac{${yJ0}}{${yJ1}}\\right)$` }
          if (xJ1 !== 1 && yJ1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(\\dfrac{${xJ0}}{${xJ1}};${yJ0}\\right)$` }
          if (xJ1 === 1 && yJ1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(${xJ0};${yJ0}\\right)$` }
          texteCorr += '<br>On observe que $M$ et $N$ ont les mêmes coordonnées, donc les deux diagonales du quadrilatère se coupent en leur milieu.'
          texteCorr += '<br>$ABDC$ est donc un parallélogramme.'
          break
        case 2: // Dq ABDC pas un parallélogramme
          xA = randint(0, 4) * choice([-1, 1])
          yA = randint(0, 4) * choice([-1, 1])
          xC = randint(0, 4) * choice([-1, 1])
          yC = randint(0, 4) * choice([-1, 1])

          while (abs(xC - xA) < 3) {
            xA = randint(0, 4) * choice([-1, 1])
            xC = randint(0, 4) * choice([-1, 1])
          }
          while (abs(yC - yA) < 3) {
            yA = randint(0, 4) * choice([-1, 1])
            yC = randint(0, 4) * choice([-1, 1])
          }
          ux = randint(2, 4) * choice([-1, 1])
          uy = randint(2, 4) * choice([-1, 1])
          xB = xA + ux
          yB = yA + uy
          test = choice([-1, 1])

          if (test === -1) {
            xD = xC + ux + randint(1, 2) * choice([-1, 1])
            yD = yC + uy
          }
          if (test === 1) {
            xD = xC + ux
            yD = yC + uy + randint(1, 2) * choice([-1, 1])
          }
          xI0 = fractionSimplifiee(xA + xD, 2)[0]
          xI1 = fractionSimplifiee(xA + xD, 2)[1]
          yI0 = fractionSimplifiee(yA + yD, 2)[0]
          yI1 = fractionSimplifiee(yA + yD, 2)[1]
          xJ0 = fractionSimplifiee(xB + xC, 2)[0]
          xJ1 = fractionSimplifiee(xB + xC, 2)[1]
          yJ0 = fractionSimplifiee(yB + yC, 2)[0]
          yJ1 = fractionSimplifiee(yB + yC, 2)[1]
          g = grille(-9, -9, 9, 9)
          A = point(xA, yA, 'A', 'blue')
          B = point(xB, yB, 'B', 'blue')
          C = point(xC, yC, 'C', 'blue')
          D = point(xD, yD, 'D', 'blue')
          I = point(1, 0, 'I')
          J = point(0, 1, 'J')
          O = point(0, 0, 'O')
          M = point((xA + xD) / 2, (yA + yD) / 2, 'M', 'red')
          N = point((xB + xC) / 2, (yB + yC) / 2, 'N', 'red')
          a = axes(-9, -9, 9, 9)
          s1 = segment(A, B, 'blue')
          s2 = segment(D, B, 'blue')
          s3 = segment(C, D, 'blue')
          s4 = segment(A, C, 'blue')
          s5 = segment(A, D, 'red')
          s6 = segment(B, C, 'red')

          s1.epaisseur = 2
          s2.epaisseur = 2
          s3.epaisseur = 2
          s4.epaisseur = 2
          s5.epaisseur = 2
          s6.epaisseur = 2
          // codageSegments('X', 'red', s1, s2, s3, s4, s5, s6) // Code les segments s5 et s6

          T = tracePoint(A, B, C, D, I, J, M, N, O) // Repère les points avec une croix
          L = labelPoint(A, B, C, D, I, J, M, N, O)

          texte = 'Dans un repère orthonormé $(O,I,J)$, on donne les 4 points suivants :<br>'
          texte += ` $A\\left(${xA};${yA}\\right)$ ; $B\\left(${xB};${yB}\\right).$`
          texte += ` $C\\left(${xC};${yC}\\right)$ ; $D\\left(${xD};${yD}\\right).$`
          texte += '<br>Déterminer si le quadrilatère $ABDC$ est un parallélogramme.'

          texteCorr = mathalea2d({
            xmin: -9,
            ymin: -9,
            xmax: 9,
            ymax: 9
          }, T, L, g, a, s1, s2, s3, s4, s5, s6)

          texteCorr += '<br>On sait que $ABDC$ est un parallélogramme si et seulement si ses diagonales se coupent en leur milieu.'
          texteCorr += '<br>On cherche donc les coordonnées du milieu de chacune des deux diagonales du quadrilatère.'
          texteCorr += '<br>On sait d\'après le cours, que si $A(x_A;y_A)$ et $D(x_D;y_D)$ sont deux points d\'un repère,'
          texteCorr += '<br> alors les coordonnées du point $M$ milieu de $[AD]$ sont '
          texteCorr += '$M\\left(\\dfrac{x_A+x_D}{2};\\dfrac{y_A+y_D}{2}\\right)$ <br>'
          texteCorr += 'On applique la relation à l\'énoncé : '
          texteCorr += `$\\begin{cases}x_M=\\dfrac{${xA}+${ecritureParentheseSiNegatif(xD)}}{2} \\\\ y_M=\\dfrac{${yA}+${ecritureParentheseSiNegatif(yD)}}{2}\\end{cases}$`
          texteCorr += `<br>On en déduit :  $\\begin{cases}x_M=\\dfrac{${texNombre(xA + xD)}}{2}\\\\y_M=\\dfrac{${texNombre(yA + yD)}}{2}\\end{cases}$`
          if (xI1 !== 1 && yI1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(\\dfrac{${xI0}}{${xI1}};\\dfrac{${yI0}}{${yI1}}\\right)$` }
          if (xI1 === 1 && yI1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(${xI0};\\dfrac{${yI0}}{${yI1}}\\right)$` }
          if (xI1 !== 1 && yI1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(\\dfrac{${xI0}}{${xI1}};${yI0}\\right)$` }
          if (xI1 === 1 && yI1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ M\\left(${xI0};${yI0}\\right)$` }
          texteCorr += '<br> Les coordonnées du point $N$ milieu de $[BC]$ sont '
          texteCorr += '$N\\left(\\dfrac{x_B+x_C}{2};\\dfrac{y_B+y_C}{2}\\right)$ <br>'
          texteCorr += 'On applique la relation à l\'énoncé : '
          texteCorr += `$\\begin{cases}x_N=\\dfrac{${xB}+${ecritureParentheseSiNegatif(xC)}}{2} \\\\ y_N=\\dfrac{${yB}+${ecritureParentheseSiNegatif(yC)}}{2}\\end{cases}$`
          texteCorr += `<br>On en déduit :  $\\begin{cases}x_N=\\dfrac{${texNombre(xB + xC)}}{2}\\\\y_N=\\dfrac{${texNombre(yB + yC)}}{2}\\end{cases}$`
          if (xJ1 !== 1 && yJ1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(\\dfrac{${xJ0}}{${xJ1}};\\dfrac{${yJ0}}{${yJ1}}\\right)$` }
          if (xJ1 === 1 && yJ1 !== 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(${xJ0};\\dfrac{${yJ0}}{${yJ1}}\\right)$` }
          if (xJ1 !== 1 && yJ1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(\\dfrac{${xJ0}}{${xJ1}};${yJ0}\\right)$` }
          if (xJ1 === 1 && yJ1 === 1) { texteCorr += `  <br>Ce qui donne au final : $ N\\left(${xJ0};${yJ0}\\right)$` }
          texteCorr += '<br>On observe que $M$ et $N$ n\'ont pas les mêmes coordonnées, donc les deux diagonales du quadrilatère ne se coupent pas en leur milieu.'
          texteCorr += '<br>$ABDC$ n\'est donc pas un parallélogramme.'
          break
      }
      if (this.questionJamaisPosee(i, xA, yA, xB, yB, typesDeQuestions)) { // Si la question n'a jamais été posée, on en créé une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}