exercices/3e/3G10-1.js

import { codageAngleDroit, droiteParPointEtPente, droiteVerticaleParPoint, point, segment, milieu, pointSurDroite, tracePoint, codageSegments, repere, labelPoint, droiteHorizontaleParPoint, afficheMesureAngle, vecteur } from '../../modules/2d.js'
import Exercice from '../Exercice.js'
import { mathalea2d, colorToLatexOrHTML } from '../../modules/2dGeneralites.js'
import { context } from '../../modules/context.js'
import { randint, choice, combinaisonListes, imagePointParTransformation, texFractionReduite, texNombrec, texNombre, contraindreValeur, numAlpha, listeQuestionsToContenu } from '../../modules/outils.js'
import { calcule } from '../../modules/fonctionsMaths.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const titre = 'Trouver les coordonnées de l\'image d\'un point par une rotation et une homothétie'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCHybride'
export const dateDeModifImportante = '28/12/2022'

/**
 * Trouver les coordonnées d'un punto transformé d'un autre par une des transformations du plan
 * @author Jean-Claude Lhote (Modif des paramètres, nbQuestions modifiables par Eric Elter)
 * 3G10-1
 */
export const uuid = 'd4088'
export const ref = '3G10-1'
export default function TransformationsDuPlanEtCoordonnees () {
  'use strict'
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.nbQuestions = 1
  this.nbCols = 1
  this.nbColsCorr = 1
  context.fenetreMathalea2d = [-9, -9, 9, 9]
  this.sup = '4-5-6' //

  context.isHtml ? this.spacingCorr = 2.5 : this.spacingCorr = 1.5
  this.nouvelleVersion = function (numeroExercice) {
    let enonceAmc = ''
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []
    this.listeCorrections = [] // Liste de questions corrigées
    const k = []
    let A, B, C, Aprime, Bprime, Cprime
    const xP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] // ces nombres sont juste là pour compter combien il y en a... ils seront remplacés plus tard par les coordonnées utiles ou pas.
    const yP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] // comme pour t, je n'utiliserai pas le premier élément pour coller aux index.
    const t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] // il y a 14 transformations mais je n'utilise pas t[0] pour coller avec les index.
    const lettre1 = ['A', 'B', 'C']; const lettre2 = ['O\'', 'A', 'B'] // si t[i]=0 alors la transformation concernée n'existe pas, si t[i]=1, on la dessine.
    const punto = [[]]
    const listeTypeDeQuestions = [[1, 2, 3, 4], [7], [8], [5, 6], [9], [10]]
    let typesDeQuestionsDisponibles = []
    if (!this.sup) { // Si aucune liste n'est saisie
      typesDeQuestionsDisponibles = [0]
    } else {
      if (typeof (this.sup) === 'number') {
        typesDeQuestionsDisponibles[0] = contraindreValeur(1, 6, this.sup, 1) - 1
      } else {
        typesDeQuestionsDisponibles = this.sup.split('-')// Sinon on créé un tableau à partir des valeurs séparées par des -
        for (let i = 0; i < typesDeQuestionsDisponibles.length; i++) { // on a un tableau avec des strings : ['1', '1', '2']
          typesDeQuestionsDisponibles[i] = contraindreValeur(1, 6, typesDeQuestionsDisponibles[i], 1) - 1
        }
      }
    }
    typesDeQuestionsDisponibles = combinaisonListes(typesDeQuestionsDisponibles, 3)

    for (let ee = 0, texte, texteCorr, xA, yA, xB, yB, xC, yC, objetsEnonce, objetsCorrection, cpt = 0; ee < this.nbQuestions && cpt < 50;) {
      texte = ''
      texteCorr = ''
      objetsEnonce = []
      objetsCorrection = []
      const choixTransformation = []
      for (let j = 0; j < 3; j++) choixTransformation.push(choice(listeTypeDeQuestions[typesDeQuestionsDisponibles[j]]))
      for (let j = 0; j < 3; j++) {
        if (choixTransformation[j] === 10) {
          k[j] = choice([2, 2, 2, 2, 4, 4, 4, 4, 5, 10]) * randint(-1, 1, [0]) // rapport d'homothétie < 1 (plus ou moins  0.5, 0.25, 0.2 ou 0,1 ) avec une fréquence divisée par 4 pour 0.2 et 0.1
        } else { k[j] = choice([1, 2, 2, 3, 3, 2.5]) * randint(-1, 1, [0]) }
      } // rapport d'homothétie >=1 (plus ou - 1,2,2.5, 3 avec des fréquences divisées par 2 pour 1 et 2.5)

      const xO = randint(-3, 3, [0, -1]) // Point O' (origine du repère dans lequel les transformations sont simples (centre des rotations et punto d'intersection des axes))
      const yO = randint(-3, 3, [0, -1])
      const pointO = point(0, 0, 'O', 'above right')

      const O = point(xO, yO, "O'", 'above left') // on crée le point O'
      const droited1 = droiteParPointEtPente(O, 1, '$(d_1)$') // et les trois axes passant par O'
      const droited = droiteHorizontaleParPoint(O, '$(d)$')
      const droited2 = droiteParPointEtPente(O, -1, '$(d_2)$')
      const droitedprime = droiteVerticaleParPoint(O, "$(d')$")
      droited1.isVisible = true
      droited2.isVisible = true
      droited.isVisible = true
      droitedprime.isVisible = true
      droited1.epaisseur = 2
      droited2.epaisseur = 2
      droited.epaisseur = 2
      droitedprime.epaisseur = 2
      droited1.color = colorToLatexOrHTML('green')
      droited2.color = colorToLatexOrHTML('green')
      droited.color = colorToLatexOrHTML('green')
      droitedprime.color = colorToLatexOrHTML('green')
      droited1.opacite = 0.5
      droited1.nom = '$(d_1)$'
      droited2.opacite = 0.5
      droited.opacite = 0.5
      droitedprime.opacite = 0.5
      let trouve = false
      let compteur = 0
      while (trouve === false) {
        xA = randint(-7, 7, 0) // Point A
        yA = randint(-7, 7, -1)
        xB = randint(-7, 7, [xA, 0]) // Point B
        yB = randint(-7, 7, -1)
        xC = randint(-7, 7, 0) // Point C
        yC = randint(-7, 7, [yA, yB, -1])

        punto[0] = imagePointParTransformation(choixTransformation[0], [xA, yA], [xO, yO], [xO, yO], k[0])
        while ((punto[0][0] < -9 || punto[0][0] > 9 || punto[0][1] < -9 || punto[0][1] > 9) && compteur < 20) { // on teste si A est dans la fenêtre sinon on en choisit un autre
          xA = randint(-7, 7) // Point A
          yA = randint(-7, 7, -1)
          punto[0] = imagePointParTransformation(choixTransformation[0], [xA, yA], [xO, yO], [xO, yO], k[0])
          compteur++
        }
        if (compteur < 20) {
          compteur = 0
        } else {
          compteur = 100
        }
        A = point(xA, yA, 'A')
        Aprime = point(punto[0][0], punto[0][1], "A'")
        if (choixTransformation[1] > 4) { punto[1] = imagePointParTransformation(choixTransformation[1], [xB, yB], [xA, yA], [xA, yA], k[1]) } else { punto[1] = imagePointParTransformation(choixTransformation[1], [xB, yB], [xO, yO]) } // si c'est une symétrie, l'axe passe par O'
        while ((punto[1][0] < -9 || punto[1][0] > 9 || punto[1][1] < -9 || punto[1][1] > 9) && compteur < 20) { // on teste si on est dans les clous, sinon on choisit un autre punto B
          xB = randint(-7, 7, [xA]) // Point B
          yB = randint(-7, 7, -1)
          if (choixTransformation[1] > 4) { punto[1] = imagePointParTransformation(choixTransformation[1], [xB, yB], [xA, yA], [xA, yA], k[1]) } else { punto[1] = imagePointParTransformation(choixTransformation[1], [xB, yB], [xO, yO]) } // si c'est une symétrie, l'axe passe par O'
          compteur++
        }
        if (compteur < 20) {
          compteur = 0
        } else {
          compteur = 100
        }

        B = point(xB, yB, 'B')
        Bprime = point(punto[1][0], punto[1][1], "B'")

        if (choixTransformation[2] > 4) { punto[2] = imagePointParTransformation(choixTransformation[2], [xC, yC], [xB, yB], [xB, yB], k[2]) } else { punto[2] = imagePointParTransformation(choixTransformation[2], [xC, yC], [xO, yO]) } // si c'est une symétrie, l'axe passe par O'
        while ((punto[2][0] < -9 || punto[2][0] > 9 || punto[2][1] < -9 || punto[2][1] > 9) && compteur < 20) { // on vérifie que C est dans le repère sinon on change le punto C.
          xC = randint(-7, 7) // Point C
          yC = randint(-7, 7, [yA, yB, -1])
          if (choixTransformation[2] > 4) { punto[2] = imagePointParTransformation(choixTransformation[2], [xC, yC], [xB, yB], [xB, yB], k[2]) } else { punto[2] = imagePointParTransformation(choixTransformation[2], [xC, yC], [xO, yO]) } // si c'est une symétrie, l'axe passe par O'
          compteur++
        }
        if (compteur < 20) {
          trouve = true
        }
        C = point(xC, yC, 'C')
        Cprime = point(punto[2][0], punto[2][1], "C'")
      }
      console.log(xA, yA, xB, yB, xC, yC)
      // les puntos sont choisis, on écrit l'énoncé
      for (let i = 0; i < 3; i++) {
        switch (choixTransformation[i]) {
          case 1: // symétrie axiale
            t[1] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A), labelPoint(A))
              objetsCorrection.push(tracePoint(A, Aprime), labelPoint(A, Aprime), segment(A, Aprime, 'blue'), codageAngleDroit(A, milieu(A, Aprime), pointSurDroite(droited1, -15)), codageSegments('||', 'red', A, milieu(A, Aprime), milieu(A, Aprime), Aprime))
              xP[1] = xA
              yP[1] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B), labelPoint(B))
              objetsCorrection.push(tracePoint(B, Bprime), labelPoint(B, Bprime), segment(B, Bprime, 'blue'), codageAngleDroit(B, milieu(B, Bprime), pointSurDroite(droited1, -15)), codageSegments('O', 'red', B, milieu(B, Bprime), milieu(B, Bprime), Bprime))
              xP[1] = xB
              yP[1] = yB
            } else {
              objetsEnonce.push(tracePoint(C), labelPoint(C))
              objetsCorrection.push(tracePoint(C, Cprime), labelPoint(C, Cprime), segment(C, Cprime, 'blue'), codageAngleDroit(C, milieu(C, Cprime), pointSurDroite(droited1, -15)), codageSegments('X', 'red', C, milieu(C, Cprime), milieu(C, Cprime), Cprime))
              xP[1] = xC
              yP[1] = yC
            }
            objetsEnonce.push(droited1)
            objetsCorrection.push(droited1)

            texte += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d_1)$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d_1)$.`
            }
            texteCorr += numAlpha(i) + ` Le symétrique de $${lettre1[i]}$ par rapport à $(d_1)$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 2: // symétrie axiale
            t[2] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A), labelPoint(A))
              objetsCorrection.push(tracePoint(A, Aprime), labelPoint(A, Aprime), segment(A, Aprime, 'blue'), codageAngleDroit(A, milieu(A, Aprime), pointSurDroite(droited2, -15)), codageSegments('||', 'red', A, milieu(A, Aprime), milieu(A, Aprime), Aprime))
              xP[2] = xA
              yP[2] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B), labelPoint(B))
              objetsCorrection.push(tracePoint(B, Bprime), labelPoint(B, Bprime), segment(B, Bprime, 'blue'), codageAngleDroit(B, milieu(B, Bprime), pointSurDroite(droited2, -15)), codageSegments('O', 'red', B, milieu(B, Bprime), milieu(B, Bprime), Bprime))
              xP[2] = xB
              yP[2] = yB
            } else {
              objetsEnonce.push(tracePoint(C), labelPoint(C))
              objetsCorrection.push(tracePoint(C, Cprime), labelPoint(C, Cprime), segment(C, Cprime, 'blue'), codageAngleDroit(C, milieu(C, Cprime), pointSurDroite(droited2, -15)), codageSegments('X', 'red', C, milieu(C, Cprime), milieu(C, Cprime), Cprime))
              xP[2] = xC
              yP[2] = yC
            }
            objetsEnonce.push(droited2)
            objetsCorrection.push(droited2)
            texte += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d_2)$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d_2)$.`
            }
            texteCorr += numAlpha(i) + ` Le symétrique de $${lettre1[i]}$ par rapport à $(d_2)$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 3: // symétrie axiale
            t[3] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A), labelPoint(A))
              objetsCorrection.push(tracePoint(A, Aprime), labelPoint(A, Aprime), segment(A, Aprime, 'blue'), codageAngleDroit(A, milieu(A, Aprime), pointSurDroite(droited, -15)), codageSegments('||', 'red', A, milieu(A, Aprime), milieu(A, Aprime), Aprime))
              xP[3] = xA
              yP[3] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B), labelPoint(B))
              objetsCorrection.push(tracePoint(B, Bprime), labelPoint(B, Bprime), segment(B, Bprime, 'blue'), codageAngleDroit(B, milieu(B, Bprime), pointSurDroite(droited, -15)), codageSegments('O', 'red', B, milieu(B, Bprime), milieu(B, Bprime), Bprime))
              xP[3] = xB
              yP[3] = yB
            } else {
              objetsEnonce.push(tracePoint(C), labelPoint(C))
              objetsCorrection.push(tracePoint(C, Cprime), labelPoint(C, Cprime), segment(C, Cprime, 'blue'), codageAngleDroit(C, milieu(C, Cprime), pointSurDroite(droited, -15)), codageSegments('X', 'red', C, milieu(C, Cprime), milieu(C, Cprime), Cprime))
              xP[3] = xC
              yP[3] = yC
            }
            objetsEnonce.push(droited)
            objetsCorrection.push(droited)
            texte += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d)$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d)$.`
            }
            texteCorr += numAlpha(i) + ` Le symétrique de $${lettre1[i]}$ par rapport à $(d)$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 4: // symétrie axiale
            t[4] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A), labelPoint(A))
              objetsCorrection.push(tracePoint(A, Aprime), labelPoint(A, Aprime), segment(A, Aprime, 'blue'), codageAngleDroit(A, milieu(A, Aprime), pointSurDroite(droitedprime, -15)), codageSegments('||', 'red', A, milieu(A, Aprime), milieu(A, Aprime), Aprime))
              xP[4] = xA
              yP[4] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B), labelPoint(B))
              objetsCorrection.push(tracePoint(B, Bprime), labelPoint(B, Bprime), segment(B, Bprime, 'blue'), codageAngleDroit(B, milieu(B, Bprime), pointSurDroite(droitedprime, -15)), codageSegments('O', 'red', B, milieu(B, Bprime), milieu(B, Bprime), Bprime))
              xP[4] = xB
              yP[4] = yB
            } else {
              objetsEnonce.push(tracePoint(C), labelPoint(C))
              objetsCorrection.push(tracePoint(C, Cprime), labelPoint(C, Cprime), segment(C, Cprime, 'blue'), codageAngleDroit(C, milieu(C, Cprime), pointSurDroite(droitedprime, -15)), codageSegments('X', 'red', C, milieu(C, Cprime), milieu(C, Cprime), Cprime))
              xP[4] = xC
              yP[4] = yC
            }
            objetsEnonce.push(droitedprime)
            objetsCorrection.push(droitedprime)
            texte += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d')$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées du symétrique de $${lettre1[i]}$ par rapport à la droite $(d')$.`
            }
            texteCorr += numAlpha(i) + ` Le symétrique de $${lettre1[i]}$ par rapport à $(d')$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 5: // rotation de 90°

            t[5] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), afficheMesureAngle(A, O, Aprime), codageSegments('//', 'red', O, A, O, Aprime)
              )
              xP[5] = xA
              yP[5] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), afficheMesureAngle(B, A, Bprime), codageSegments('O', 'red', A, B, A, Bprime))
              xP[5] = xB
              yP[5] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), afficheMesureAngle(C, B, Cprime), codageSegments('X', 'red', B, C, B, Cprime))
              xP[5] = xC
              yP[5] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 90° dans le sens anti-horaire.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 90° dans le sens anti-horaire.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 90° dans le sens anti-horaire a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 6: // rotation de 90°

            t[6] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), afficheMesureAngle(A, O, Aprime), codageSegments('//', 'red', O, A, O, Aprime))
              xP[6] = xA
              yP[6] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), afficheMesureAngle(B, A, Bprime), codageSegments('O', 'red', A, B, A, Bprime))
              xP[6] = xB
              yP[6] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), afficheMesureAngle(C, B, Cprime), codageSegments('X', 'red', B, C, B, Cprime))
              xP[6] = xC
              yP[6] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 90° dans le sens horaire.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 90° dans le sens horaire.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 90° dans le sens horaire a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 7: // symétrie centrale

            t[7] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), codageSegments('//', 'red', O, A, O, Aprime))
              xP[7] = xA
              yP[7] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), codageSegments('O', 'red', A, B, A, Bprime))
              xP[7] = xB
              yP[7] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), codageSegments('X', 'red', B, C, B, Cprime))
              xP[7] = xC
              yP[7] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la symétrie de centre $${lettre2[i]}$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la symétrie de centre $${lettre2[i]}$.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la symétrie de centre $${lettre2[i]}$ a pour coordonnées ($${texNombrec(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break
          case 8: // translation

            t[8] = 1
            O.positionLabel = 'right'
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O, pointO), labelPoint(A, O, pointO), vecteur(pointO, O).representant(pointO))
              objetsCorrection.push(tracePoint(A, Aprime, O, pointO), labelPoint(A, Aprime, O, pointO),
                vecteur(pointO, O).representant(A), vecteur(pointO, O).representant(pointO))
              xP[8] = xA
              yP[8] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A, pointO), labelPoint(B, A, pointO), vecteur(pointO, A).representant(pointO))
              objetsCorrection.push(tracePoint(B, Bprime, A, pointO), labelPoint(B, Bprime, A, pointO),
                vecteur(pointO, A).representant(B), vecteur(pointO, A).representant(pointO))
              xP[8] = xB
              yP[8] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B, pointO), labelPoint(C, B, pointO), vecteur(pointO, B).representant(pointO))
              objetsCorrection.push(tracePoint(C, Cprime, B, pointO), labelPoint(C, Cprime, B, pointO),
                vecteur(pointO, B).representant(C), vecteur(pointO, B).representant(pointO))
              xP[8] = xC
              yP[8] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la translation qui transforme $O$ en $${lettre2[i]}$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la translation qui transforme $O$ en $${lettre2[i]}$.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la translation qui transforme $O$ en $${lettre2[i]}$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 9: // homothétie de rapport entier

            t[9] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, '#f15929'))
              xP[9] = xA
              yP[9] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, '#f15929'))

              xP[9] = xB
              yP[9] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, '#f15929'))

              xP[9] = xC
              yP[9] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par l'homothétie de centre $${lettre2[i]}$ et de rapport $${texNombre(k[i])}$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par l'homothétie de centre $${lettre2[i]}$ et de rapport $${texNombre(k[i])}$.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par l'homothétie de centre $${lettre2[i]}$ et de rapport $${texNombre(k[i])}$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 10: // homothétie de rapport fractionnaire

            t[10] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, '#f15929'))
              xP[10] = xA
              yP[10] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, '#f15929'))
              xP[10] = xB
              yP[10] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, '#f15929'))
              xP[10] = xC
              yP[10] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par l'homothétie de centre $${lettre2[i]}$ et de rapport $${texFractionReduite(1, k[i])}$.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par l'homothétie de centre $${lettre2[i]}$ et de rapport $${texFractionReduite(1, k[i])}$.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par l'homothétie de centre $${lettre2[i]}$ et de rapport $${texFractionReduite(1, k[i])}$ a pour coordonnées ($${texNombre(punto[i][0])};${texNombre(punto[i][1])}$).<br>`
            break

          case 11: // rotation de 60°

            t[11] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), afficheMesureAngle(A, O, Aprime), codageSegments('//', 'red', O, A, O, Aprime))
              xP[11] = xA
              yP[11] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), afficheMesureAngle(B, A, Bprime), codageSegments('O', 'red', A, B, A, Bprime))
              xP[11] = xB
              yP[11] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), afficheMesureAngle(C, B, Cprime), codageSegments('X', 'red', B, C, B, Cprime))
              xP[11] = xC
              yP[11] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 60° dans le sens anti-horaire.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 60° dans le sens anti-horaire.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 60° dans le sens anti-horaire a pour coordonnées ($${texNombre(calcule(punto[i][0], 2))};${texNombre(calcule(punto[i][1], 2))}$).<br>`
            break
          case 12: // rotation de 60°

            t[12] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), afficheMesureAngle(A, O, Aprime), codageSegments('//', 'red', O, A, O, Aprime))
              xP[12] = xA
              yP[12] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), afficheMesureAngle(B, A, Bprime), codageSegments('O', 'red', A, B, A, Bprime))
              xP[12] = xB
              yP[12] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), afficheMesureAngle(C, B, Cprime), codageSegments('X', 'red', B, C, B, Cprime))
              xP[12] = xC
              yP[12] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 60° dans le sens horaire.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 60° dans le sens horaire.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 60° dans le sens horaire a pour coordonnées ($${texNombre(calcule(punto[i][0], 2))};${texNombre(calcule(punto[i][1], 2))}$).<br>`
            break

          case 13: // rotation de 120°

            t[13] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), afficheMesureAngle(A, O, Aprime), codageSegments('//', 'red', O, A, O, Aprime))
              xP[13] = xA
              yP[13] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), afficheMesureAngle(B, A, Bprime), codageSegments('O', 'red', A, B, A, Bprime))
              xP[13] = xB
              yP[13] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), afficheMesureAngle(C, B, Cprime), codageSegments('X', 'red', B, C, B, Cprime))
              xP[13] = xC
              yP[13] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 120° dans le sens anti-horaire.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 120° dans le sens anti-horaire.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 120° dans le sens anti-horaire a pour coordonnées ($${texNombre(calcule(punto[i][0], 2))};${texNombre(calcule(punto[i][1], 2))}$).<br>`
            break

          case 14: // rotation de 120°

            t[14] = 1
            if (i === 0) {
              objetsEnonce.push(tracePoint(A, O), labelPoint(A, O))
              objetsCorrection.push(tracePoint(A, Aprime, O), labelPoint(A, Aprime, O),
                segment(O, A, 'blue'), segment(O, Aprime, 'blue'), afficheMesureAngle(A, O, Aprime), codageSegments('//', 'red', O, A, O, Aprime))
              xP[14] = xA
              yP[14] = yA
            } else if (i === 1) {
              objetsEnonce.push(tracePoint(B, A), labelPoint(B, A))
              objetsCorrection.push(tracePoint(B, Bprime, A), labelPoint(B, Bprime, A),
                segment(A, B, 'blue'), segment(A, Bprime, 'blue'), afficheMesureAngle(B, A, Bprime), codageSegments('O', 'red', A, B, A, Bprime))
              xP[14] = xB
              yP[14] = yB
            } else {
              objetsEnonce.push(tracePoint(C, B), labelPoint(C, B))
              objetsCorrection.push(tracePoint(C, Cprime, B), labelPoint(C, Cprime, B),
                segment(B, C, 'blue'), segment(B, Cprime, 'blue'), afficheMesureAngle(C, B, Cprime), codageSegments('X', 'red', B, C, B, Cprime))
              xP[14] = xC
              yP[14] = yC
            }
            texte += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 120° dans le sens horaire.`
            if (context.isAmc) {
              enonceAmc += numAlpha(i) + ` Donner les coordonnées de l'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 120° dans le sens horaire.`
            }
            texteCorr += numAlpha(i) + ` L'image de $${lettre1[i]}$ par la rotation de centre $${lettre2[i]}$ et d'angle 120° dans le sens horaire a pour coordonnées ($${texNombre(calcule(punto[i][0], 2))};${texNombre(calcule(punto[i][1], 2))}$).<br>`
            break
        }
        if (this.interactif) {
          texte += ajouteChampTexteMathLive(this, i, 'largeur25 inline')
        }
        texte += '<br>'
        setReponse(this, i, [`${punto[i][0]};${punto[i][1]}`, `(${punto[i][0]};${punto[i][1]})`])
        if (context.isAmc) {
          enonceAmc += '<br>'
        }
      }
      objetsEnonce.push(repere({ xMin: -10, yMin: -10, xMax: 10, yMax: 10, grilleOpacite: 0.2 }))
      objetsCorrection.push(repere({ xMin: -10, yMin: -10, xMax: 10, yMax: 10, grilleOpacite: 0.2 }))
      if (context.isAmc) {
        this.autoCorrection[0] = {
          enonce: '\\begin{center}' + mathalea2d({ xmin: -10, ymin: -10, xmax: 10, ymax: 10, pixelsParCm: 20, scale: 0.5, mainlevee: false }, objetsEnonce) + '\\\\' + '\\end{center}' + enonceAmc,
          enonceAvant: false,
          enonceApresNumQuestion: true,
          options: { barreseparation: false },
          propositions: [
            {
              type: 'AMCNum',
              propositions: [{
                texte: '',
                statut: '',
                multicolsBegin: true,
                reponse: {
                  texte: numAlpha(0) + ' Abscisse de A',
                  valeur: punto[0][0],
                  param: {
                    digits: 1,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: `A(${punto[0][0]};${punto[0][1]})`,
                statut: '',
                multicolsEnd: true,
                reponse: {
                  texte: 'Ordonnée de A',
                  valeur: punto[0][1],
                  param: {
                    digits: 1,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: '',
                statut: '',
                multicolsBegin: true,
                reponse: {
                  texte: numAlpha(1) + ' Abscisse de B',
                  valeur: punto[1][0],
                  param: {
                    digits: 1,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: `B(${punto[1][0]};${punto[1][1]})`,
                statut: '',
                multicolsEnd: true,
                reponse: {
                  texte: 'Ordonnée de B',
                  valeur: punto[1][1],
                  param: {
                    digits: 1,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: '',
                statut: '',
                multicolsBegin: true,
                reponse: {
                  texte: numAlpha(2) + ' Abscisse de C',
                  valeur: punto[2][0],
                  param: {
                    digits: 1,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: `C(${punto[2][0]};${punto[2][1]})`,
                statut: '',
                multicolsEnd: true,
                reponse: {
                  texte: 'Ordonnée de C',
                  valeur: punto[2][1],
                  param: {
                    digits: 1,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            }]
        }
      }

      if (this.questionJamaisPosee(ee, xA, yA, xB, yB, xC, yC)) {
        this.listeQuestions.push(texte + '<br>' + mathalea2d({ xmin: -10, ymin: -10, xmax: 10, ymax: 10, pixelsParCm: 20, scale: 0.4, mainlevee: false }, objetsEnonce))
        this.listeCorrections.push(texteCorr + '<br>' + mathalea2d({ xmin: -10, ymin: -10, xmax: 10, ymax: 10, pixelsParCm: 20, scale: 0.4, mainlevee: false }, objetsCorrection))
        ee++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireTexte = ['Choix des transformations ', 'Choix séparés par des tirets (3 maximum) \n1 : Symétrie axiale\n 2 : Symétrie centrale\n 3 : Translation\n 4 : Rotation\n 5 : Homothétie de rapport entier\n 6 : Homothétie de rapport fractionnaire']
}