import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, randint, texFraction, texFractionReduite, pgcd, ecritureParentheseSiNegatif } from '../../modules/outils.js'
export const titre = 'Déterminer une équation réduite de droite'
/**
* Description didactique de l'exercice
* @author Stéphane Guyon
* Référence 2G30-2, ex 2G50-1
*/
export const uuid = '0cee9'
export const ref = '2G30-2'
export default function EquationReduiteDeDroites () {
Exercice.call(this) // Héritage de la classe Exercice()
this.titre = titre
this.nbQuestions = 3
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
if (this.sup === 1) this.consigne = 'Soit $\\big(O,\\vec i;\\vec j\\big)$ un repère orthogonal.<br>Déterminer une équation réduite de ' + (this.nbQuestions !== 1 ? 'chaque' : 'la') + ' droite $(AB)$ avec les points $A$ et $B$ de coordonnées suivantes.'
else this.consigne = 'Soit $\\big(O,\\vec i;\\vec j\\big)$ un repère orthogonal.<br>Déterminer une équation réduite de ' + (this.nbQuestions !== 1 ? 'chaque' : 'la') + ' droite $(d)$ passant par le point $A$ et ayant le vecteur $\\vec {u}$ comme vecteur directeur. $A$ et $\\vec {u}$ ont les coordonnées suivantes.'
for (let i = 0, texte, xA, yA, xB, yB, n, d, texteCorr, xu, yu, cpt = 0; i < this.nbQuestions && cpt < 50;) {
if (this.sup === 1) {
// case 'A et B':
xA = randint(-5, 5)
yA = randint(-5, 5)
xB = randint(-5, 5, xA)
yB = randint(-5, 5)
xu = xB - xA
yu = yB - yA
n = yB - yA
d = xB - xA
texte = `$A(${xA};${yA})$ et $B(${xB};${yB})$ `
texteCorr = 'On observe que $ x_B\\neq x_A$.'
texteCorr += '<br>La droite $(AB)$ a donc une équation du type $y=mx+p$.'
texteCorr += '<br>On commence par calculer le coefficient directeur $m$ :'
texteCorr += '<br>On sait d\'après le cours : $m=\\dfrac{y_B-y_A}{x_B-x_A}$.'
texteCorr += `<br>On applique avec les données de l'énoncé : $m=\\dfrac{${yB}-${ecritureParentheseSiNegatif(yA)}}{${xB}-${ecritureParentheseSiNegatif(xA)}}=${texFraction(n, d)}`
if ((pgcd(n, d) !== 1 || d === 1 || d < 0) && n !== 0) {
texteCorr += `=${texFractionReduite(n, d)}`
}
texteCorr += '$'
texteCorr += '<br>L\'équation de la droite $(AB)$ est de la forme : $y='
if ((pgcd(n, d) !== 1 || d === 1 || d < 0) && n !== 0) {
texteCorr += `${texFractionReduite(n, d)}x`
} else {
// eslint-disable-next-line no-empty
if (n === 0) {} else { texteCorr += `${texFraction(n, d)}x` }
}
texteCorr += '+p$.<br>'
texteCorr += 'Comme $A \\in (AB)$, les coordonnées du point $A$ vérifient l\'équation, donc :'
texteCorr += `<br>$${yA}=${texFractionReduite(n, d)} \\times ${ecritureParentheseSiNegatif(xA)} +p$`
texteCorr += `<br>$\\iff p=${yA}-${texFractionReduite(n, d)} \\times ${ecritureParentheseSiNegatif(xA)}$`
texteCorr += `<br>$\\iff p=${texFractionReduite(d * yA - n * xA, d)} .$`
texteCorr += '<br>Au final, $(AB) : y='
if (d * yA - n * xA === 0) { // cas où p=0
if (n === d) { // cas où m=1 et p=0
texteCorr += 'x'
}
if (n === -d) { // cas où m=-1 et p=0
texteCorr += '-x'
}
if ((pgcd(n, d) !== 1 || d === 1) && n !== 0) { // m entier non nul ou fraction réductible
texteCorr += `${texFractionReduite(n, d)}x$`
} else { // m fraction irréductible
if (n !== 0) { texteCorr += `${texFractionReduite(n, d)}x$` }
}
}
// cas ou p!=0 :
if (d * yA - n * xA !== 0) {
// on gère cas particulier ou m=+/-1
if (n === d) { // m =1, on écrit x
texteCorr += 'x' // on écrit x
if (d * d * yA - n * xA * d > 0) { // p>0
texteCorr += '+'
}
}
if (n === -d) { // m=-1
texteCorr += '-x' // on écrit -x
if (d * d * yA - n * xA * d > 0) { // p>0
texteCorr += '+'
}
}
// cas ou m=+/- 1 traités.
// cas général :
if ((pgcd(n, d) !== 1 || d === 1) && n !== 0 && n / d !== 1 && n / d !== -1) {
// m fraction réductible ou entier non nul.
texteCorr += `${texFractionReduite(n, d)}x` // on affiche m
} else {
// m fraction irréductible non nul :
if (n !== 0 && n / d !== 1 && n / d !== -1) { texteCorr += `${texFractionReduite(n, d)}x` }
}
if (d * d * yA - n * xA * d > 0 && n / d !== 1 && n / d !== -1) { // p>0
texteCorr += '+'
}
// tous les cas précédents :
texteCorr += `${texFractionReduite(d * yA - n * xA, d)} .$`
}
// break
}
if (this.sup === 2) {
// case 'A et u':
xA = randint(-5, 5)
yA = randint(-5, 5)
xu = randint(-5, 5, 0)
yu = randint(-5, 5)
n = yu
d = xu
texte = `$A(${xA};${yA})$ et $\\vec {u} \\begin{pmatrix}${xu}\\\\${yu}\\end{pmatrix}$`
texteCorr = 'On observe que $ \\vec u$ n\'est pas colinéaire au vecteur $\\vec j$, puisque son déplacement horizontal est non-nul.'
texteCorr += '<br>La droite $(AB)$ n\'est donc pas verticale. Elle admet donc une équation du type : $(AB) :y=mx+p$.'
texteCorr += '<br>On commence par calculer le coefficient directeur $m$ :'
texteCorr += '<br>On sait d\'après le cours que si $\\vec u \\begin{pmatrix}a\\\\b\\end{pmatrix}$, alors $m=\\dfrac{b}{a}$.'
texteCorr += `<br>On applique avec les données de l'énoncé : $m=\\dfrac{${yu}}{${xu}}`
if ((pgcd(n, d) !== 1 || d === 1 || d < 0) && n !== 0) {
texteCorr += `=${texFractionReduite(n, d)}`
}
texteCorr += '$'
texteCorr += '<br>L\'équation de la droite $(AB)$ est de la forme : $y='
if ((pgcd(n, d) !== 1 || d === 1 || d < 0) && n !== 0) {
texteCorr += `${texFractionReduite(n, d)}x`
} else {
// eslint-disable-next-line no-empty
if (n === 0) {} else { texteCorr += `${texFraction(n, d)}x` }
}
texteCorr += '+p$.<br>'
texteCorr += 'Comme $A \\in (AB)$, les coordonnées du point $A$ vérifient l\'équation, donc :'
texteCorr += `<br>$${yA}=${texFractionReduite(n, d)} \\times ${ecritureParentheseSiNegatif(xA)} +p$`
texteCorr += `<br>$\\iff p=${yA}-${texFractionReduite(n, d)} \\times ${ecritureParentheseSiNegatif(xA)}$`
texteCorr += `<br>$\\iff p=${texFractionReduite(d * yA - n * xA, d)} .$`
texteCorr += '<br>Au final, $(AB) : y=$'
if ((pgcd(n, d) !== 1 || d === 1 || d < 0) && n !== 0) {
texteCorr += `$${texFractionReduite(n, d)}x$`
} else {
if (n !== 0) { texteCorr += `$${texFraction(n, d)}x$` }
}
if (d * d * yA - n * xA * d > 0) { texteCorr += '$+$' }
texteCorr += `$${texFractionReduite(d * yA - n * xA, d)} .$`
}
// }
if (this.questionJamaisPosee(i, xA, yA, xu, yu)) {
// Si la question n'a jamais été posée, on en crée une autre
this.listeQuestions.push(texte)
this.listeCorrections.push(texteCorr)
i++
}
cpt++
}
listeQuestionsToContenu(this)
}
this.besoinFormulaireNumerique = ['Niveau de difficulté', 2, '1 : Détermination équation réduite de droite à partir de 2 points \n2 : Détermination équation réduite à partir d\'un point et d\'un vecteur directeur.']
}