exercices/2e/2G30-3.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, combinaisonListes, randint, reduireAxPlusB, ecritureAlgebrique, ecritureParentheseSiNegatif, ecritureAlgebriqueSauf1 } from '../../modules/outils.js'
export const titre = 'Déterminer une équation cartésienne de droite à partir de deux points'
// totoche
/**
 * Description didactique de l'exercice
 * @author Stéphane Guyon
 * Référence 2G30-3, ex 2G51
*/
export const uuid = '1bb30'
export const ref = '2G30-3'
export default function Equationcartesienne () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = 'Déterminer une équation cartésienne de la droite $(AB)$.'
  this.nbQuestions = 3
  this.nbCols = 2 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 2 // Uniquement pour la sortie LaTeX
  this.sup = 2 // Niveau de difficulté
  this.tailleDiaporama = 3 // Pour les exercices chronométrés. 50 par défaut pour les exercices avec du texte
  this.video = '' // Id YouTube ou url

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées

    const typeQuestionsDisponibles = ['cartesienne1']
    const listeTypeQuestions = combinaisonListes(typeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posés mais l'ordre diffère à chaque "cycle"
    for (let i = 0, xA, yA, xB, yB, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // Boucle principale où i+1 correspond au numéro de la question
      switch (listeTypeQuestions[i]) { // Suivant le type de question, le contenu sera différent
        case 'cartesienne1':
          xA = randint(-5, 5)
          yA = randint(-5, 5)
          xB = randint(-5, 5)
          yB = randint(-5, 5)
          if (xA === xB & yA === yB) {
            xB = xB + randint(1, 2)
            yB = yB - randint(1, 2)
          }
          texte = `avec les point $A$ et $B$ de coordonnées : $A(${xA};${yA})$ et $B(${xB};${yB})$ `
          texteCorr = 'On sait qu\'une équation cartésienne de la droite $(AB)$ est de la forme :'
          texteCorr += ' $(AB) : ax+by+c=0$, avec $(a;b)\\neq (0;0)$.'
          texteCorr += '<br>On sait aussi que dans ces conditions, un vecteur directeur de cette droite a pour coordonnées :'
          texteCorr += ' $\\vec {u} \\begin{pmatrix}-b\\\\a\\end{pmatrix}$'
          texteCorr += ' <br>Il suffit donc de trouver un vecteur directeur à cette droite pour déterminer une valeur possible pour les coefficients $a$ et $b$. <br>Or le vecteur $\\overrightarrow{AB}$ est un vecteur directeur directeur de la droite, dont on peut calculer les coordonnées :'
          texteCorr += ' <br>$\\overrightarrow{AB}  \\begin{pmatrix}x_B-x_A\\\\y_B-y_A\\end{pmatrix}$'
          texteCorr += ` $\\iff\\overrightarrow{AB}  \\begin{pmatrix} ${xB}-${ecritureParentheseSiNegatif(xA)}\\\\${yB}-${ecritureParentheseSiNegatif(yA)}\\end{pmatrix}$`
          texteCorr += ` $\\iff\\overrightarrow{AB}  \\begin{pmatrix} ${xB - xA}\\\\${yB - yA}\\end{pmatrix}$`
          texteCorr += ` <br>On en déduit donc que :$-b = ${xB - xA}$ et $a=${yB - yA}$`
          texteCorr += ` <br>L'équation cartésienne est donc de la forme : $ ${yB - yA} x ${ecritureAlgebriqueSauf1(xA - xB)} y + c=0$ `
          texteCorr += `<br>On cherche maintenant la valeur correspondante de $c$. <br>On utilise pour cela que $A(${xA};${yA}) \\in(AB)$ `
          texteCorr += ` <br>$\\iff ${yB - yA} \\times ${ecritureParentheseSiNegatif(xA)} ${ecritureAlgebriqueSauf1(xA - xB)} \\times ${ecritureParentheseSiNegatif(yA)}+ c=0$ `
          texteCorr += ` <br>$\\iff  ${yB * xA - yA * xA} ${ecritureAlgebrique(xA * yA - xB * yA)} + c=0$ `
          texteCorr += ` <br>$\\iff  c= ${-xA * yA + xB * yA - yB * xA + yA * xA}$ `
          if (-xA * yA + xB * yA - yB * xA + yA * xA !== 0) {
            if (xB - xA === 0) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): ${reduireAxPlusB(yB - yA, 0)} ${ecritureAlgebrique(-xA * yA + xB * yA - yB * xA + yA * xA)}=0$ ` } else {
              if (xA - xB === 1) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): ${reduireAxPlusB(yB - yA, 0)} +y ${ecritureAlgebrique(-xA * yA + xB * yA - yB * xA + yA * xA)}=0$ ` }
              if (xA - xB === -1 & yB - yA !== 0) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): ${reduireAxPlusB(yB - yA, 0)} -y ${ecritureAlgebrique(-xA * yA + xB * yA - yB * xA + yA * xA)}=0$ ` }
              if (xA - xB === -1 & yB - yA === 0) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): y ${ecritureAlgebrique(-xA * yA + xB * yA - yB * xA + yA * xA)}=0$ ` }
              if (xA - xB !== 0 & xA - xB !== 1 & xA - xB !== -1) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (AB): ${reduireAxPlusB(yB - yA, xA - xB)}y ${ecritureAlgebrique(-xA * yA + xB * yA - yB * xA + yA * xA)}=0$ ` }
            }
          } else {
            if (xB - xA === 0) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): ${reduireAxPlusB(yB - yA, 0)} =0$ ` } else {
              if (xA - xB === 1) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): ${reduireAxPlusB(yB - yA, 0)} +y =0$ ` }
              if (xA - xB === -1 & yB - yA !== 0) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (d): ${reduireAxPlusB(yB - yA, 0)} -y =0$ ` }
              if (xA - xB === -1 & yB - yA === 0) { texteCorr += ' <br>Une équation cartésienne est donc de la forme : $ (d): y =0$ ' }
              if (xA - xB !== 0 & xA - xB !== 1 & xA - xB !== -1) { texteCorr += ` <br>Une équation cartésienne est donc de la forme : $ (AB): ${reduireAxPlusB(yB - yA, xA - xB)}y =0$ ` }
            }
          }
          break
      }
      if (this.questionJamaisPosee(i, xA, yA, xB, yB)) {
        // 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)
  }
  // this.besoinFormulaireNumerique = ['Niveau de difficulté', 2,'1 : Facile\n2 : Difficile'];
}