exercices/can/2e/can2G19.js

import Exercice from '../../Exercice.js'
import { mathalea2d } from '../../../modules/2dGeneralites.js'
import { randint, ecritureParentheseSiNegatif, miseEnEvidence, choice } from '../../../modules/outils.js'
import {
  repere, texteParPosition,
  point, tracePoint, segment, droite, milieu
} from '../../../modules/2d.js'
import FractionX from '../../../modules/FractionEtendue.js'
export const titre = 'Déterminer le coefficient directeur d\'une droite (graphique)'
export const interactifReady = true
export const interactifType = 'mathLive'
export const dateDePublication = '10/11/2022'
/**
 * Modèle d'exercice très simple pour la course aux nombres
 * @author Gilles Mora
 * Référence can2G19
 *
*/

export const uuid = '6082f'
export const ref = 'can2G19'
export default function CoeffDirDroite () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.typeExercice = 'simple' // Cette ligne est très importante pour faire faire un exercice simple !
  this.formatChampTexte = 'largeur15 inline'
  this.formatInteractif = 'fractionEgale'
  this.nbQuestions = 1
  // Dans un exercice simple, ne pas mettre de this.listeQuestions = [] ni de this.consigne
  this.tailleDiaporama = 2
  this.nouvelleVersion = function () {
    let xA, yA, xB, yB, o, A, B, Bx, sABx, sBBx, m, lA, traceA, lB, lABx, lBBx, traceB, d, r1, xmin, xmax, ymin, ymax, objet, objetC
    switch (choice([1, 2])) { //, 2, 2
      case 1:
        xA = randint(-4, -1)
        yA = randint(0, 4)
        xB = randint(2, 4)
        yB = randint(1, 4)
        o = texteParPosition('O', -0.3, -0.3, 'milieu', 'black', 1)
        A = point(xA, yA)
        B = point(xB, yB)
        Bx = point(B.x, A.y)
        sABx = segment(A, Bx)
        sBBx = segment(B, Bx)
        m = new FractionX(yB - yA, xB - xA)
        sBBx.epaisseur = 2
        sBBx.pointilles = 5
        sABx.epaisseur = 2
        sABx.pointilles = 5
        lA = texteParPosition('A', xA, yA + 0.5, 'milieu', 'black', 1.5)
        traceA = tracePoint(A, 'black') // Variable qui trace les points avec une croix
        lB = texteParPosition('B', xB, yB + 0.5, 'milieu', 'black', 1.5)
        lABx = texteParPosition(`${xB - xA}`, milieu(A, Bx).x, A.y + 0.3, 'milieu', 'red', 1.5)
        lBBx = texteParPosition(`${yB - yA}`, B.x + 0.5, milieu(B, Bx).y, 'milieu', 'blue', 1.5)
        traceB = tracePoint(B, 'black') // Variable qui trace les points avec une croix
        d = droite(A, B, '', 'blue')
        d.epaisseur = 2
        traceA.taille = 3
        traceA.epaisseur = 2
        traceB.taille = 3
        traceB.epaisseur = 2
        xmin = -5
        ymin = -1
        xmax = 5
        ymax = 5
        r1 = repere({
          xMin: xmin,
          xMax: xmax,
          xUnite: 1,
          yMin: ymin,
          yMax: ymax,
          yUnite: 1,
          thickHauteur: 0.1,
          xLabelMin: xmin + 1,
          xLabelMax: xmax - 1,
          yLabelMax: ymax - 1,
          yLabelMin: ymin + 1,
          axeXStyle: '->',
          axeYStyle: '->',
          yLabelDistance: 1,
          yLabelEcart: 0.3,
          grilleSecondaire: true,
          grilleSecondaireYDistance: 1,
          grilleSecondaireXDistance: 1,
          grilleSecondaireYMin: ymin,
          grilleSecondaireYMax: ymax,
          grilleSecondaireXMin: xmin,
          grilleSecondaireXMax: xmax
        })
        objet = mathalea2d({ xmin: xmin, xmax: xmax, ymin: ymin, ymax: ymax + 0.25, pixelsParCm: 30, scale: 0.75, style: 'margin: auto' }, d, r1, traceA, lA, lB, traceB, o)
        objetC = mathalea2d({ xmin: xmin, xmax: xmax, ymin: ymin, ymax: ymax + 0.25, pixelsParCm: 30, scale: 0.75, style: 'margin: auto' }, d, r1, traceA, lA, lB, traceB, o, sABx, sBBx, lABx, lBBx)

        this.question = `Donner le coefficient directeur $m$ de la droite.<br>

        `
        this.question += `${objet}<br>

        `
        if (yB === yA) {
          this.correction = `La droite est horizontale. On en déduit que $m=0$.
       `
        } else {
          this.correction = `Le coefficient directeur $m$ de la droite $(AB)$ est donné par : <br>
    $m=\\dfrac{y_B-y_A}{x_B-x_A}=\\dfrac{${yB}-${yA}}{${xB}-${ecritureParentheseSiNegatif(xA)}}=\\dfrac{${miseEnEvidence(yB - yA, 'blue')}}{${miseEnEvidence(xB - xA, 'red')}}${m.texSimplificationAvecEtapes()}$.
<br>

`
          this.correction += `

          ${objetC}<br>

          `
        }
        break

      case 2:
        xA = randint(-4, 0)
        yA = randint(-5, 5) / 2
        xB = randint(1, 4)
        yB = randint(-5, 5, 0) / 2
        o = texteParPosition('O', -0.3, -0.3, 'milieu', 'black', 1)
        A = point(xA, yA)
        B = point(xB, yB)
        Bx = point(B.x, A.y)
        sABx = segment(A, Bx)
        sBBx = segment(B, Bx)
        m = new FractionX(2 * (yB - yA), xB - xA)
        sBBx.epaisseur = 2
        sBBx.pointilles = 5
        sABx.epaisseur = 2
        sABx.pointilles = 5
        lA = texteParPosition('A', xA, yA + 0.5, 'milieu', 'black', 1.5)
        traceA = tracePoint(A, 'black') // Variable qui trace les points avec une croix
        lB = texteParPosition('B', xB, yB + 0.5, 'milieu', 'black', 1.5)
        if (yA > yB) { lABx = texteParPosition(`${xB - xA}`, milieu(A, Bx).x, A.y + 0.3, 'milieu', 'red', 1.5) } else { lABx = texteParPosition(`${xB - xA}`, milieu(A, Bx).x, A.y - 0.3, 'milieu', 'red', 1.5) }
        lBBx = texteParPosition(`${2 * (yB - yA)}`, B.x + 0.5, milieu(B, Bx).y, 'milieu', 'blue', 1.5)
        traceB = tracePoint(B, 'black') // Variable qui trace les points avec une croix
        d = droite(A, B, '', 'blue')
        d.epaisseur = 2
        traceA.taille = 3
        traceA.epaisseur = 2
        traceB.taille = 3
        traceB.epaisseur = 2
        xmin = -5
        ymin = -3
        xmax = 5
        ymax = 3
        r1 = repere({
          xMin: xmin,
          xMax: xmax,
          xUnite: 1,
          yMin: 2 * ymin,
          yMax: 2 * ymax,
          yUnite: 0.5,
          thickHauteur: 0.1,
          xLabelMin: xmin + 1,
          xLabelMax: xmax - 1,
          yLabelMax: 2 * ymax - 1,
          yLabelMin: 2 * ymin + 1,
          axeXStyle: '->',
          axeYStyle: '->',
          yLabelDistance: 2,
          yLabelEcart: 0.5,
          grilleSecondaire: true,
          grilleSecondaireYDistance: 1,
          grilleSecondaireXDistance: 1,
          grilleSecondaireYMin: 2 * ymin,
          grilleSecondaireYMax: 2 * ymax,
          grilleSecondaireXMin: xmin,
          grilleSecondaireXMax: xmax
        })
        objet = mathalea2d({ xmin: xmin, xmax: xmax, ymin: ymin, ymax: ymax + 0.25, pixelsParCm: 30, scale: 0.75, style: 'margin: auto' }, d, r1, traceA, lA, lB, traceB, o)
        objetC = mathalea2d({ xmin: xmin, xmax: xmax, ymin: ymin, ymax: ymax + 0.25, pixelsParCm: 30, scale: 0.75, style: 'margin: auto' }, d, r1, traceA, lA, lB, traceB, o, sABx, sBBx, lABx, lBBx)

        this.question = `Donner le coefficient directeur $m$ de la droite.<br>

          `
        this.question += `${objet}<br>

          `
        if (yB === yA) {
          this.correction = `La droite est horizontale. On en déduit que $m=0$.
         `
        } else {
          this.correction = `Le coefficient directeur $m$ de la droite $(AB)$ est donné par : <br>
      $m=\\dfrac{y_B-y_A}{x_B-x_A}=\\dfrac{${2 * yB}-${ecritureParentheseSiNegatif(2 * yA)}}{${xB}-${ecritureParentheseSiNegatif(xA)}}=\\dfrac{${miseEnEvidence(2 * (yB - yA), 'blue')}}{${miseEnEvidence(xB - xA, 'red')}}${m.texSimplificationAvecEtapes()}$.
  <br>

  `
          this.correction += `

            ${objetC}<br>

            `
        }
        break
    }
    this.canEnonce = this.question
    this.canReponseACompleter = '$m=\\ldots$'
    this.reponse = m
  }
}