exercices/5e/5G24-2.js

  1. import Exercice from '../Exercice.js'
  2. import { mathalea2d } from '../../modules/2dGeneralites.js'
  3. import { point, pointAdistance, rotation, translation, vecteur, barycentre, codageSegment, codageAngle, nommePolygone, triangle2points2longueurs } from '../../modules/2d.js'
  4. import { listeQuestionsToContenu, combinaisonListes, randint, creerNomDePolygone, texteEnCouleur } from '../../modules/outils.js'
  5. export const titre = 'Justifier que deux triangles sont égaux'
  6. /**
  7. * Deux triangles égaux sont codés, il faut reconnaître les côtés homologues
  8. * @author Rémi Angot
  9. * Référence 5G24-1
  10. */
  11. export const uuid = 'b9a52'
  12. export const ref = '5G24-2'
  13. export default function TrianglesEgaux () {
  14. Exercice.call(this) // Héritage de la classe Exercice()
  15. this.titre = titre
  16. this.consigne = 'Les triangles sont-ils égaux ? S\'ils sont égaux, justifier la réponse.'
  17. this.nbQuestions = 4
  18. this.nbCols = 1 // Uniquement pour la sortie LaTeX
  19. this.nbColsCorr = 1 // Uniquement pour la sortie LaTeX
  20. this.sup = 1 // Niveau de difficulté
  21. this.video = '' // Id YouTube ou url
  22. this.spacing = 2
  23. this.nouvelleVersion = function () {
  24. this.listeQuestions = [] // Liste de questions
  25. this.listeCorrections = [] // Liste de questions corrigées
  26. this.autoCorrection = []
  27. const typeQuestionsDisponibles = ['CCC', 'CAC', 'ACA', 'AAA', 'CC']
  28. const listeTypeQuestions = combinaisonListes(typeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posés mais l'ordre diffère à chaque "cycle"
  29. let listeDeNomsDePolygones
  30. for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
  31. if (i % 3 === 0) listeDeNomsDePolygones = ['QD']
  32. // Boucle principale où i+1 correspond au numéro de la question
  33. let l1 = randint(40, 70)
  34. let l2 = randint(40, 80, l1)
  35. let l3 = randint(40, l1 + l2 - 10, [l1, l2])
  36. l1 /= 10
  37. l2 /= 10
  38. l3 /= 10
  39. const A = point(0, 0)
  40. const B = pointAdistance(A, l1)
  41. const p1 = triangle2points2longueurs(A, B, l2, l3)
  42. const C = p1.listePoints[2]
  43. const O = barycentre(p1)
  44. const v = vecteur(Math.max(Math.abs(A.x - B.x), Math.abs(C.x - B.x), Math.abs(A.x - C.x)) + 4, 0)
  45. const O2 = translation(O, v)
  46. const temp = translation(p1, v)
  47. temp.isVisible = false
  48. const p2 = rotation(temp, O2, randint(0, 360))
  49. const D = p2.listePoints[0]
  50. const E = p2.listePoints[1]
  51. const F = p2.listePoints[2]
  52. const code1 = codageSegment(A, B, '|')
  53. const code2 = codageSegment(D, E, '|')
  54. const code3 = codageSegment(B, C, '||')
  55. const code4 = codageSegment(E, F, '||')
  56. const code5 = codageSegment(C, A, '|||')
  57. const code6 = codageSegment(F, D, '|||')
  58. const codeA1 = codageAngle(A, B, C)
  59. const codeA2 = codageAngle(D, E, F)
  60. const codeA3 = codageAngle(B, C, A, 0.8, 'X')
  61. const codeA4 = codageAngle(E, F, D, 0.8, 'X')
  62. const codeA5 = codageAngle(C, A, B, 0.8, '||')
  63. const codeA6 = codageAngle(F, D, E, 0.8, '||')
  64. const nom1 = creerNomDePolygone(3, listeDeNomsDePolygones)
  65. listeDeNomsDePolygones.push(nom1)
  66. const nom2 = creerNomDePolygone(3, listeDeNomsDePolygones)
  67. listeDeNomsDePolygones.push(nom2)
  68. const nommeP1 = nommePolygone(p1, nom1)
  69. const nommeP2 = nommePolygone(p2, nom2)
  70. switch (listeTypeQuestions[i]) { // Suivant le type de question, le contenu sera différent
  71. case 'CCC':
  72. texte = '<br>' + mathalea2d({
  73. xmin: Math.min(A.x, B.x, C.x, D.x, E.x, F.x) - 3,
  74. ymin: Math.min(A.y, B.y, C.y, D.y, E.y, F.y) - 3,
  75. xmax: Math.max(A.x, B.x, C.x, D.x, E.x, F.x) + 3,
  76. ymax: Math.max(A.y, B.y, C.y, D.y, E.y, F.y) + 3,
  77. scale: 0.5
  78. },
  79. p1, p2, code1, code2, code3, code4, code5, code6, nommeP1, nommeP2)
  80. texteCorr = 'Ces deux triangles sont égaux car ils ont leurs trois côtés de même longueur 2 à 2.'
  81. break
  82. case 'CAC':
  83. texte = '<br>' + mathalea2d({
  84. xmin: Math.min(A.x, B.x, C.x, D.x, E.x, F.x) - 3,
  85. ymin: Math.min(A.y, B.y, C.y, D.y, E.y, F.y) - 3,
  86. xmax: Math.max(A.x, B.x, C.x, D.x, E.x, F.x) + 3,
  87. ymax: Math.max(A.y, B.y, C.y, D.y, E.y, F.y) + 3,
  88. scale: 0.5
  89. },
  90. p1, p2, code1, code2, code3, code4, codeA1, codeA2, nommeP1, nommeP2)
  91. texteCorr = 'Ces deux triangles sont égaux car ils ont ont un angle de même mesure compris entre deux côtés de même longueur 2 à 2. '
  92. break
  93. case 'ACA':
  94. texte = '<br>' + mathalea2d({
  95. xmin: Math.min(A.x, B.x, C.x, D.x, E.x, F.x) - 3,
  96. ymin: Math.min(A.y, B.y, C.y, D.y, E.y, F.y) - 3,
  97. xmax: Math.max(A.x, B.x, C.x, D.x, E.x, F.x) + 3,
  98. ymax: Math.max(A.y, B.y, C.y, D.y, E.y, F.y) + 3,
  99. scale: 0.5
  100. },
  101. p1, p2, code1, code2, codeA1, codeA2, codeA5, codeA6, nommeP1, nommeP2)
  102. texteCorr = 'Ces deux triangles sont égaux car ils ont un côté de même longueur compris entre deux angles de même mesure 2 à 2. '
  103. break
  104. case 'AAA':
  105. texte = '<br>' + mathalea2d({
  106. xmin: Math.min(A.x, B.x, C.x, D.x, E.x, F.x) - 3,
  107. ymin: Math.min(A.y, B.y, C.y, D.y, E.y, F.y) - 3,
  108. xmax: Math.max(A.x, B.x, C.x, D.x, E.x, F.x) + 3,
  109. ymax: Math.max(A.y, B.y, C.y, D.y, E.y, F.y) + 3,
  110. scale: 0.5
  111. },
  112. p1, p2, codeA1, codeA2, codeA3, codeA4, codeA5, codeA6, nommeP1, nommeP2)
  113. texteCorr = `On ne peut pas déterminer si ces triangles sont égaux. Ils ont la même forme mais leurs longueurs peuvent être différentes. On dit qu'ils sont ${texteEnCouleur('semblables')}.`
  114. break
  115. case 'CC':
  116. texte = '<br>' + mathalea2d({
  117. xmin: Math.min(A.x, B.x, C.x, D.x, E.x, F.x) - 3,
  118. ymin: Math.min(A.y, B.y, C.y, D.y, E.y, F.y) - 3,
  119. xmax: Math.max(A.x, B.x, C.x, D.x, E.x, F.x) + 3,
  120. ymax: Math.max(A.y, B.y, C.y, D.y, E.y, F.y) + 3,
  121. scale: 0.5
  122. },
  123. p1, p2, code1, code2, code5, code6, nommeP1, nommeP2)
  124. texteCorr = 'On ne peut pas déterminer si ces triangles sont égaux.'
  125. break
  126. }
  127. if (this.listeQuestions.indexOf(texte) === -1) {
  128. // Si la question n'a jamais été posée, on en crée une autre
  129. this.listeQuestions.push(texte)
  130. this.listeCorrections.push(texteCorr)
  131. i++
  132. }
  133. cpt++
  134. }
  135. listeQuestionsToContenu(this)
  136. }
  137. // this.besoinFormulaireNumerique = ['Niveau de difficulté', 2,'1 : Facile\n2 : Difficile'];
  138. }