exercices/3e/3F21-3.js

import Exercice from '../Exercice.js'
import { mathalea2d, colorToLatexOrHTML } from '../../modules/2dGeneralites.js'
import { ecritureAlgebrique, listeQuestionsToContenu, randint, rienSi1, texNombre, stringNombre, sp, choice } from '../../modules/outils.js'
import { repere, cercle, point, segment, milieu, texteParPoint, droite } from '../../modules/2d.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import { context } from '../../modules/context.js'
export const titre = "Lire graphiquement les caractéristiques de la courbe représentative d'une fonction affine"
export const interactifReady = true
export const interactifType = 'mathLive'

/**
 * Lire la pente et l'ordonnée à l'origine d'une droite pour en déduire la forme algébrique de la fonction affine
 * @author Rémi Angot
 * Référence
*/
export const uuid = '056fa'
export const ref = '3F21-3'
export default function PenteEtOrdonneeOrigineDroite () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.interactifReady = interactifReady
  this.interactifType = interactifType
  this.consigne = ''
  this.nbQuestionsModifiable = false
  // this.nbQuestions = 10
  this.nbCols = 2 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 2 // Uniquement pour la sortie LaTeX
  // this.sup = 1; // 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 num = randint(-5, 5, 0)
    const den = randint(1, 2)
    const a = num / den
    const b = randint(-4, 4, 0)
    let xMin
    context.isHtml ? xMin = -10 : xMin = -8
    const xMax = -xMin
    const yMin = xMin
    const yMax = -yMin

    const r = repere({ xMin, yMin, xMax, yMax })
    const f = x => a * x + b

    const d = droite(a, -1, b)
    d.color = colorToLatexOrHTML('blue')
    d.epaisseur = 2
    const c = cercle(point(0, b), 0.8, '#f15929')
    c.epaisseur = 2
    let x0 = -7
    while (!Number.isInteger(f(x0)) || f(x0) <= yMin || f(x0) >= yMax || x0 === -2 || x0 === -1 || x0 === 0) {
      x0 += 1
    }
    const A = point(x0, f(x0))
    const B = point(x0 + 1, f(x0))
    const C = point(x0 + 1, f(x0 + 1))
    const s1 = segment(A, B, '#f15929')
    const s2 = segment(B, C, '#f15929')
    const M1 = milieu(A, B)
    const M2 = milieu(B, C)
    const t1 = texteParPoint('$1$', point(M1.x, M1.y + (a > 0 ? -0.4 : 0.4)))
    const t2 = texteParPoint(`$${texNombre(a)}$`, point(M2.x + 0.6, M2.y))
    t1.color = colorToLatexOrHTML('#f15929')
    t2.color = colorToLatexOrHTML('#f15929')

    s1.epaisseur = 3
    s1.pointilles = 5
    s2.epaisseur = 3
    s2.pointilles = 5

    const nomFonction = choice(['f', 'g', 'h', 'f_1', 'f_2', 'f_3'])

    this.introduction = `On a représenté ci-dessous une fonction affine $${nomFonction}$.<br><br>` + mathalea2d({ xmin: xMin, xmax: xMax, ymin: yMin, ymax: yMax }, r, d)
    this.consigneCorrection = mathalea2d({ xmin: xMin, xmax: xMax, ymin: yMin, ymax: yMax }, r, d, c, s1, s2, t1, t2)
    let question1 = `Quelle est l'ordonnée à l'origine de la fonction $${nomFonction}$ ?`
    question1 += ajouteChampTexteMathLive(this, 0, 'largeur15 inline ')
    let question2 = `Quel est le coefficient directeur de $${nomFonction}$ ?`
    question2 += ajouteChampTexteMathLive(this, 1, 'largeur15 inline ')
    let question3 = `En déduire l'expression algébrique de $${nomFonction}$.`
    question3 += ajouteChampTexteMathLive(this, 2, 'largeur15 inline nospacebefore', { texte: `$${sp(10)}${nomFonction} : x \\mapsto $` })

    setReponse(this, 0, b)
    setReponse(this, 1, [a, `\\frac{${num}}{${den}}`])
    setReponse(this, 2, `${stringNombre(a)}x+${b}`)
    if (den === 2) setReponse(this, 2, [`${stringNombre(a)}x+${b}`, `\\frac{${num}}{2}\\times x + ${b}`])

    const correction1 = `La droite coupe l'axe des ordonnées au point de coordonnées $(0;${b})$, l'ordonnée à l'origine est donc $${b}$.`
    let correction2 = `À chaque fois que l'on avance de 1 carreau, on ${a > 0 ? 'monte' : 'descend'} de $${texNombre(Math.abs(a))}$ ${Math.abs(a) >= 2 ? 'carreaux' : 'carreau'},`
    correction2 += ` le coefficient directeur est donc $${texNombre(a)}$.`
    let correction3 = `$${nomFonction}$ étant une fonction affine, on a $${nomFonction} : x \\mapsto ax + b$ avec $a$ le coefficient directeur (ou pente) et $b$ son ordonnée à l'origine.`
    correction3 += `<br>Finalement, $${nomFonction} : x \\mapsto ${rienSi1(a).toString().replace('.', ',')}x ${ecritureAlgebrique(b)}$.`
    this.listeQuestions.push(question1, question2, question3)
    this.listeCorrections.push(correction1, correction2, correction3)

    listeQuestionsToContenu(this)
  }
}