exercices/3e/3G41-1.js

  1. import Exercice from '../Exercice.js'
  2. import { context } from '../../modules/context.js'
  3. import { listeQuestionsToContenu, randint, choisitLettresDifferentes, choice } from '../../modules/outils.js'
  4. import { pave3d, point3d } from '../../modules/3d.js'
  5. import { fixeBordures, mathalea2d } from '../../modules/2dGeneralites.js'
  6. import { labelPoint, longueur, pointSurSegment, segment, tracePoint, translation, vecteur } from '../../modules/2d.js'
  7. export const titre = 'Construire la section d\'un plan dans un un pavé droit'
  8. export const amcReady = true
  9. export const amcType = 'AMCOpen' // type de question AMC
  10. export const dateDePublication = '07/11/2022'
  11. /**
  12. * Construire une section dans un un pavé droit
  13. * @author Eric Elter
  14. */
  15. export const uuid = 'a3cb9'
  16. export const ref = '3G41-1'
  17. export default function ConstruireSectionPaveDroit () {
  18. 'use strict'
  19. Exercice.call(this) // Héritage de la classe Exercice()
  20. this.titre = titre
  21. this.nbQuestions = 3
  22. this.nouvelleVersion = function () {
  23. this.listeQuestions = [] // Liste de questions
  24. this.listeCorrections = [] // Liste de questions corrigées
  25. this.autoCorrection = []
  26. for (let i = 0, texte, texteCorr, objetsEnonce, A, B, D, E, Y, Z, YCorr, ZCorr, areteY, areteZ, s1, s2, s3, s4, s5, solideDessine, nomSolide, placeDuPoint1, placeDuPoint2, enonceFigure, sommetsPave, areteParallele,
  27. L, p, choixProfondeur, choixAreteParallele, h, traceTesPoints, choix, cpt = 0; i < this.nbQuestions && cpt < 50;) {
  28. texte = ''
  29. texteCorr = ''
  30. objetsEnonce = []
  31. context.anglePerspective = choice([-30, -60, 30, 60])
  32. // context.anglePerspective = -30
  33. L = randint(5, 20)
  34. h = randint(5, 20, [L])
  35. p = randint(5, 20, [L, h])
  36. A = point3d(0, 0, 0)
  37. B = point3d(L, 0, 0)
  38. D = point3d(0, 0, h)
  39. choixProfondeur = choice([p, -p])
  40. E = point3d(0, choixProfondeur, 0)
  41. nomSolide = choisitLettresDifferentes(8, 'OQWXD').join('')
  42. solideDessine = pave3d(A, B, D, E, 'blue', true, nomSolide)
  43. objetsEnonce.push(...solideDessine.c2d)
  44. sommetsPave = solideDessine.sommets
  45. placeDuPoint1 = (5 + randint(2, 3) * choixProfondeur / p) / 10
  46. placeDuPoint2 = (5 - randint(2, 3) * choixProfondeur / p) / 10
  47. choix = randint(1, 3)
  48. choix = 3
  49. switch (choix) {
  50. case 1 : // Parallèle à arête verticale - Cas 1
  51. Z = pointSurSegment(sommetsPave[2].c2d, sommetsPave[3].c2d, placeDuPoint1 * longueur(sommetsPave[2].c2d, sommetsPave[3].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide))
  52. areteZ = nomSolide[3] + nomSolide[2]
  53. Y = pointSurSegment(sommetsPave[6].c2d, sommetsPave[7].c2d, placeDuPoint2 * longueur(sommetsPave[6].c2d, sommetsPave[7].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide + Z.nom))
  54. areteY = nomSolide[7] + nomSolide[6]
  55. ZCorr = translation(Z, vecteur(sommetsPave[2].c2d, sommetsPave[1].c2d))
  56. YCorr = translation(Y, vecteur(sommetsPave[2].c2d, sommetsPave[1].c2d))
  57. if (choice([false, true])) choixAreteParallele = [1, 2]
  58. else choixAreteParallele = [0, 3]
  59. break
  60. case 2 : // Parallèle à arête verticale - Cas 2
  61. Z = pointSurSegment(sommetsPave[2].c2d, sommetsPave[3].c2d, placeDuPoint1 * longueur(sommetsPave[2].c2d, sommetsPave[3].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide))
  62. areteZ = nomSolide[3] + nomSolide[2]
  63. placeDuPoint2 = randint(2, 8) / 10
  64. if (placeDuPoint1 > 0.5) {
  65. Y = pointSurSegment(sommetsPave[2].c2d, sommetsPave[6].c2d, placeDuPoint2 * longueur(sommetsPave[2].c2d, sommetsPave[6].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide + Z.nom))
  66. areteY = nomSolide[2] + nomSolide[6]
  67. } else {
  68. Y = pointSurSegment(sommetsPave[3].c2d, sommetsPave[7].c2d, placeDuPoint2 * longueur(sommetsPave[3].c2d, sommetsPave[7].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide + Z.nom))
  69. areteY = nomSolide[7] + nomSolide[3]
  70. }
  71. ZCorr = translation(Z, vecteur(sommetsPave[2].c2d, sommetsPave[1].c2d))
  72. YCorr = translation(Y, vecteur(sommetsPave[2].c2d, sommetsPave[1].c2d))
  73. if (choice([false, true])) choixAreteParallele = [1, 2]
  74. else choixAreteParallele = [0, 3]
  75. break
  76. case 3 : // Parallèle à l'arête horizontale de la face de devant - Cas 1
  77. placeDuPoint2 = randint(2, 8) / 10
  78. Z = pointSurSegment(sommetsPave[1].c2d, sommetsPave[2].c2d, placeDuPoint1 * longueur(sommetsPave[1].c2d, sommetsPave[2].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide), 'right')
  79. areteZ = nomSolide[1] + nomSolide[2]
  80. Y = pointSurSegment(sommetsPave[2].c2d, sommetsPave[6].c2d, placeDuPoint2 * longueur(sommetsPave[2].c2d, sommetsPave[6].c2d), choisitLettresDifferentes(1, 'OQWXD' + nomSolide + Z.nom), 'right')
  81. areteY = nomSolide[2] + nomSolide[6]
  82. ZCorr = translation(Z, vecteur(sommetsPave[1].c2d, sommetsPave[0].c2d))
  83. YCorr = translation(Y, vecteur(sommetsPave[1].c2d, sommetsPave[0].c2d))
  84. if (choice([false, true])) choixAreteParallele = [0, 1]
  85. else choixAreteParallele = [2, 3]
  86. break
  87. }
  88. areteParallele = nomSolide[choixAreteParallele[1]] + nomSolide[choixAreteParallele[0]]
  89. traceTesPoints = tracePoint(Z, Y, '#f15929')
  90. traceTesPoints.epaisseur = 2
  91. traceTesPoints.taille = 5
  92. enonceFigure = (context.isAmc ? '' : '<br>') + mathalea2d(Object.assign({}, fixeBordures(objetsEnonce), { scale: context.isHtml ? 0.7 : 0.3, style: 'block' }), objetsEnonce, traceTesPoints, labelPoint(Z, Y)) + '<br>'
  93. texte += enonceFigure
  94. texte += context.isAmc ? '' : 'Reproduire cette figure. '
  95. texte += `Sachant que ${Z.nom} est sur l'arête [${areteZ}] et que ${Y.nom} est sur l'arête [${areteY}], `
  96. texte += `tracer la section du pavé droit ${nomSolide} par un plan passant par les points ${Z.nom} et ${Y.nom} et parallèle à l'arête [${areteParallele}].`
  97. s1 = segment(Z, Y, '#f15929')
  98. s1.epaisseur = 2
  99. s2 = segment(Z, ZCorr, '#f15929')
  100. s2.epaisseur = 2
  101. s3 = segment(ZCorr, YCorr, '#f15929')
  102. s2.epaisseur = 2
  103. s4 = segment(YCorr, Y, '#f15929')
  104. s4.epaisseur = 2
  105. s5 = segment(sommetsPave[choixAreteParallele[0]].c2d, sommetsPave[choixAreteParallele[1]].c2d, 'green')
  106. s5.epaisseur = 3
  107. switch (choix) {
  108. case 1 : // Parallèle à arête verticale - Cas 1
  109. if (!sommetsPave[7].visible || !sommetsPave[6].visible) {
  110. s1.pointilles = 2
  111. s4.pointilles = 2
  112. } else {
  113. s3.pointilles = 2
  114. s4.pointilles = 2
  115. }
  116. break
  117. case 2 : // Parallèle à arête verticale - Cas 2
  118. if (!sommetsPave[6].visible) {
  119. s1.pointilles = 2
  120. } else if (!sommetsPave[7].visible) {
  121. s2.pointilles = 2
  122. s1.pointilles = 2
  123. } else {
  124. s3.pointilles = 2
  125. }
  126. break
  127. case 3 : // Parallèle à l'arête horizontale de la face de devant - Cas 1
  128. if (!sommetsPave[6].visible || !sommetsPave[5].visible) {
  129. s1.pointilles = 2
  130. } else if (!sommetsPave[7].visible) {
  131. s3.pointilles = 2
  132. s4.pointilles = 2
  133. } else {
  134. s3.pointilles = 2
  135. }
  136. break
  137. }
  138. enonceFigure = (context.isAmc ? '' : '<br>') + mathalea2d(Object.assign({}, fixeBordures(objetsEnonce), { scale: context.isHtml ? 0.7 : 0.3, style: 'block' }), objetsEnonce, traceTesPoints, labelPoint(Z, Y, ZCorr, YCorr), s1, s2, s3, s4, s5) + '<br>'
  139. texteCorr += enonceFigure
  140. if (this.questionJamaisPosee(i, nomSolide)) {
  141. // Si la question n'a jamais été posée, on en crée une autre
  142. this.listeQuestions.push(texte)
  143. this.listeCorrections.push(texteCorr)
  144. if (context.isAmc) {
  145. this.autoCorrection[i] = {
  146. enonce: texte,
  147. propositions: [{
  148. texte: texteCorr,
  149. statut: 0,
  150. sanscadre: true
  151. }
  152. ]
  153. }
  154. }
  155. i++
  156. }
  157. cpt++
  158. }
  159. listeQuestionsToContenu(this)
  160. }
  161. }