exercices/2e/2G35-7.js

import Exercice from '../Exercice.js'
import { mathalea2d, colorToLatexOrHTML } from '../../modules/2dGeneralites.js'
import { listeQuestionsToContenu, randint, abs, reduireAxPlusB, texFractionReduite, ecritureAlgebrique, pgcd } from '../../modules/outils.js'
import { repere, droite, segment, tracePoint, labelPoint, point } from '../../modules/2d.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import { context } from '../../modules/context.js'
import Decimal from 'decimal.js'
export const titre = "Lecture graphique des coefficients d'une équation réduite "
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCHybride'
/**
 2G35-7, ex 2G50-2

*/
export const uuid = '41e6f'
export const ref = '2G35-7'
export default function Lecturegraphiquedeaetb (numeroExercice) {
  Exercice.call(this)

  this.nbQuestions = 3// On complète le nb de questions
  this.nbCols = 2
  this.nbColsCorr = 2
  this.tailleDiaporama = 3
  this.video = ''
  this.spacing = 1
  this.spacingCorr = 1
  this.spacingCorr = 3
  this.sup = 1

  this.nouvelleVersion = function () {
    this.sup = parseInt(this.sup)
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []
    // let typesDeQuestionsDisponibles = []
    // typesDeQuestionsDisponibles = []// On complète selon le nb de cas dans l'exo (switch)

    // const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)

    for (let i = 0, a, b, r, f, c, d, s1, s2, t, l, texte, texteCorr, cpt = 0;
      i < this.nbQuestions && cpt < 50;) { // on rajoute les variables dont on a besoin
      if (this.sup === 1) {
        a = randint(-4, 4) // coefficient directeur
        b = randint(-5, 5) // ordonnée à l'origine
        if (a === 0 && b === 0) {
          a = 1
        }// On évite la situation de double nullité
        r = repere()// On définit le repère
        c = droite(a, -1, b) // On définit l'objet qui tracera la courbe dans le repère
        c.color = colorToLatexOrHTML('red')
        c.epaisseur = 2
        texte = 'À partir de la représentation graphique de la droite ci-dessous, donner par lecture graphique son équation réduite.<br><br>'
        texte += mathalea2d({
          xmin: -8,
          ymin: -8,
          xmax: 8,
          ymax: 8,
          scale: 0.5
        }, r, f, c)// On trace le graphique
        if (a === 0) {
          texteCorr = 'On observe que la droite est horizontale. '
          texteCorr += `<br>La droite est l'ensemble des points ayant comme ordonnée : $${b}$ `
          texteCorr += `<br>L'équation réduite de cette droite est donc : $y=${b}$`
        } else {
          texteCorr = 'On sait que l\'équation réduite d\'une droite non verticale est de la forme : $y= ax+b$ avec $a$ et $b$ deux réels non tous deux nuls.<br>'
          texteCorr += 'Le premier coefficient à lire graphiquement est $b$, l\'ordonnée à l\'origine de la droite.<br>'
          texteCorr += 'C\'est l\'ordonnée du point d\'intersection de la droite avec l\'axe des ordonnées.<br>'
          texteCorr += `On lit ici que le point $(0;${b}) \\in (d)$.<br>`
          texteCorr += `On peut alors conclure que l'ordonnée à l'origine est : $b=${b}$. <br>`
          texteCorr += 'On peut lire ensuite le coefficient directeur $a$ de la droite $(d)$.<br>'
          texteCorr += 'On sait que $a=\\dfrac{\\text{Dénivelé vertical}}{\\text{Déplacement horizontal}}$'
          texteCorr += `<br>En lisant le déplacement vertical correspondant à un déplacement horizontal d'une unité, on lit : <br>$a=\\dfrac{\\text{Dénivelé vertical}}{1}=${a}$`
          texteCorr += '<br>On peut en déduire que l\'équation réduite de la droite $(d)$ est :'

          texteCorr += `$y=${reduireAxPlusB(a, b)}$`
        }
        if (b + a < -5 || b + a > 5) {
          s1 = segment(-2, b - 2 * a, -1, b - 2 * a, 'blue')
          s2 = segment(-1, b - 2 * a, -1, b - a, 'blue')

          s1.epaisseur = 4
          s2.epaisseur = 4
          const A = point(0, b, 'A')
          t = tracePoint(A, 'blue') // Variable qui trace les points avec une croix
          l = labelPoint(A, 'blue')// Variable qui trace les nom s A et B
          if (a !== 0) {
            texteCorr += mathalea2d({
              xmin: -8,
              ymin: -8,
              xmax: 8,
              ymax: 8,
              scale: 0.5
            }, r, s1, s2, t, l, c)
          }
        } else {
          s1 = segment(0, b, 1, b, 'blue')
          s2 = segment(1, b, 1, b + a, 'blue')

          s1.epaisseur = 4
          s2.epaisseur = 4
          const A = point(0, b, 'A')
          t = tracePoint(A, 'blue') // Variable qui trace les points avec une croix
          l = labelPoint(A, 'blue')// Variable qui trace les nom s A et B
          if (a !== 0) {
            texteCorr += mathalea2d({
              xmin: -8,
              ymin: -8,
              xmax: 8,
              ymax: 8,
              scale: 0.5
            }, r, s1, s2, t, l, c)
          }
        }
        // On trace le graphique
        setReponse(this, i, 'y=' + reduireAxPlusB(a, b))
        if (context.isAmc) {
          this.autoCorrection[i] = {
            enonce: texte + '<br>',
            propositions: [
              {
                type: 'AMCNum',
                propositions: [{
                  texte: texteCorr,
                  statut: '',
                  reponse: {
                    texte: 'coefficient directeur',
                    valeur: a,
                    param: {
                      digits: 1,
                      decimals: 0,
                      signe: true,
                      approx: 0
                    }
                  }
                }]
              },
              {
                type: 'AMCNum',
                propositions: [{
                  statut: '',
                  reponse: {
                    texte: "ordonnée à l'origine",
                    valeur: b,
                    param: {
                      digits: 1,
                      decimals: 0,
                      signe: true,
                      approx: 0
                    }
                  }
                }]
              }
            ]
          }
        }
      } else { // cas du coeff directeur fractionnaire
        a = randint(-5, 5, [0]) // numérateur coefficient directeur non nul
        b = randint(-5, 5) // ordonnée à l'origine
        d = randint(2, 5, 3) // dénominateur coefficient directeur
        if (a === 0 && b === 0) {
          a = 1
          d = 3
        }// On évite la situation de double nullité

        r = repere()// On définit le repère
        c = droite(a / d, -1, b) // On définit l'objet qui tracera la courbe dans le repère
        c.color = colorToLatexOrHTML('red')
        c.epaisseur = 2// On définit l'objet qui tracera la courbe dans le repère

        texte = 'À partir de la représentation graphique de la droite ci-dessous, donner par lecture graphique son équation réduite.<br><br>'
        texte += mathalea2d({
          xmin: -6,
          ymin: -6,
          xmax: 6,
          ymax: 6,
          scale: 0.5
        }, r, c)// On trace le graphique
        if (a === 0) {
          texteCorr = 'On observe que la droite est horizontale. '
          texteCorr += `<br>La droite est l'ensemble des points ayant comme ordonnée : $${b}$ `
          texteCorr += `<br>L'équation réduite de cette droite est donc : $y=${b}$`
        } else {
          texteCorr = 'On sait que l\'équation réduite d\'une droite non verticale est de la forme : $y= ax+b$ avec $a$ et $b$ deux réels non tous deux nuls.<br>'
          texteCorr += 'Le premier coefficient à lire graphiquement est $b$, l\'ordonnée à l\'origine de la droite.<br>'
          texteCorr += 'C\'est l\'ordonnée du point d\'intersection de la droite avec l\'axe des ordonnées.<br>'
          texteCorr += `On lit ici que : $A(0;${b}) \\in (d)$.<br>`
          texteCorr += `On peut alors conclure que l'ordonnée à l'origine est : $b=${b}$. <br>`
          texteCorr += 'On peut lire ensuite le coefficient directeur $a$ de la droite $(d)$.<br>'
          texteCorr += 'On sait que $a=\\dfrac{\\text{Dénivelé vertical}}{\\text{Déplacement horizontal}}$'
          texteCorr += '<br>On cherche un déplacement horizontal correspondant à un déplacement vertical entier.'
          texteCorr += `<br>On lit que pour un déplacement vers la droite de ${d} unités, il faut `

          if (a > 0) { texteCorr += 'monter de ' }
          if (a < 0) { texteCorr += 'descendre de ' }
          texteCorr += `${abs(a)} unités.`
          texteCorr += `<br>Il vient : $a=\\dfrac{${a}}{${d}}`
          if (pgcd(a, d) !== 1) {
            texteCorr += `=${texFractionReduite(a, d)}`
          }
          texteCorr += '$'

          texteCorr += '<br>On peut en déduire que l\'équation réduite de la droite $(d)$ est : $y= '
          if (a === d) {
            texteCorr += `x${b !== 0 ? ecritureAlgebrique(b) : ''}`
          } else if (a === -d) {
            texteCorr += `-x${b !== 0 ? ecritureAlgebrique(b) : ''}`
          } else {
            texteCorr += `${texFractionReduite(a, d)}x`
            if (b !== 0) { texteCorr += `${ecritureAlgebrique(b)}=${reduireAxPlusB(new Decimal(a).div(d), b)}` }
          }

          texteCorr += '$.'

          if (a > 0) {
            s1 = segment(0, b - a, -d, b - a, 'blue')
            s1.epaisseur = 4
            s2 = segment(0, b - a, 0, b, 'blue')
          }
          if (a < 0) {
            s1 = segment(0, b, d, b, 'blue')
            s1.epaisseur = 4
            s2 = segment(d, b - abs(a), d, b, 'blue')
          }
          s2.epaisseur = 4
          const A = point(0, b, 'A')
          t = tracePoint(A, 'red') // Variable qui trace les points avec une croix
          l = labelPoint(A, 'red')// Variable qui trace les nom s A et B
          if (a !== 0) {
            texteCorr += mathalea2d({
              xmin: -6,
              ymin: -10,
              xmax: 6,
              ymax: 10,
              scale: 0.5
            }, r, s1, s2, t, l, c)
          }// On trace le graphique
          setReponse(this, i, 'y=' + reduireAxPlusB(new Decimal(a).div(d), b))
          if (context.isAmc) {
            this.autoCorrection[i] = {
              enonce: texte + '<br>',
              propositions: [
                {
                  type: 'AMCNum',
                  propositions: [{
                    texte: texteCorr,
                    statut: '',
                    reponse: {
                      texte: 'coefficient directeur',
                      valeur: new Decimal(a).div(d).toString(),
                      param: {
                        digits: 3,
                        decimals: 2,
                        signe: true,
                        approx: 0
                      }
                    }
                  }]
                },
                {
                  type: 'AMCNum',
                  propositions: [{
                    statut: '',
                    reponse: {
                      texte: "ordonnée à l'origine",
                      valeur: b,
                      param: {
                        digits: 1,
                        decimals: 0,
                        signe: true,
                        approx: 0
                      }
                    }
                  }]
                }
              ]
            }
          }
        }
      }
      texte += ajouteChampTexteMathLive(this, i)
      if (this.questionJamaisPosee(i, a, b)) {
        // 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)
  }
  this.besoinFormulaireNumerique = ['Types de question ', 2, '1 : Valeurs entières.\n2 : Valeurs fractionnaires.']
}