math-exercises 3.0.19 → 3.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/lib/exercises/math/dataRepresentations/barChartReading.d.ts.map +1 -1
  2. package/lib/exercises/math/dataRepresentations/barChartReading.js +0 -1
  3. package/lib/exercises/math/dataRepresentations/functionGraphReading.d.ts +9 -0
  4. package/lib/exercises/math/dataRepresentations/functionGraphReading.d.ts.map +1 -0
  5. package/lib/exercises/math/dataRepresentations/functionGraphReading.js +174 -0
  6. package/lib/exercises/math/dataRepresentations/index.js +1 -0
  7. package/lib/exercises/math/derivation/derivative/inflexionPointQuadrinomials.d.ts.map +1 -1
  8. package/lib/exercises/math/derivation/derivative/inflexionPointQuadrinomials.js +68 -14
  9. package/lib/exercises/math/functions/exponential/expFactorization.d.ts +13 -0
  10. package/lib/exercises/math/functions/exponential/expFactorization.d.ts.map +1 -0
  11. package/lib/exercises/math/functions/exponential/expFactorization.js +147 -0
  12. package/lib/exercises/math/functions/exponential/index.d.ts +1 -0
  13. package/lib/exercises/math/functions/exponential/index.d.ts.map +1 -1
  14. package/lib/exercises/math/functions/exponential/index.js +1 -0
  15. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +1 -1
  16. package/lib/exercises/math/geometry/euclidian/index.js +1 -0
  17. package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.d.ts +2 -0
  18. package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.d.ts.map +1 -0
  19. package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.js +187 -0
  20. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromAxialSymetry.d.ts.map +1 -1
  21. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromAxialSymetry.js +2 -1
  22. package/lib/exercises/math/geometry/index.d.ts +1 -0
  23. package/lib/exercises/math/geometry/index.d.ts.map +1 -1
  24. package/lib/exercises/math/geometry/index.js +2 -1
  25. package/lib/exercises/math/geometry/lines/index.d.ts +2 -0
  26. package/lib/exercises/math/geometry/lines/index.d.ts.map +1 -0
  27. package/lib/exercises/math/geometry/lines/index.js +1 -0
  28. package/lib/exercises/math/geometry/lines/linesRelativePositions.d.ts +12 -0
  29. package/lib/exercises/math/geometry/lines/linesRelativePositions.d.ts.map +1 -0
  30. package/lib/exercises/math/geometry/lines/linesRelativePositions.js +140 -0
  31. package/lib/exercises/math/geometry/shapes/basicShapesNaming.js +1 -1
  32. package/lib/exercises/math/geometry/shapes/basicShapesRecognition.js +1 -1
  33. package/lib/exercises/math/geometry/vectors/scalarProduct/index.d.ts +2 -0
  34. package/lib/exercises/math/geometry/vectors/scalarProduct/index.d.ts.map +1 -1
  35. package/lib/exercises/math/geometry/vectors/scalarProduct/index.js +2 -1
  36. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.d.ts +6 -2
  37. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.d.ts.map +1 -1
  38. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.js +99 -67
  39. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.d.ts +8 -0
  40. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.d.ts.map +1 -0
  41. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.js +147 -0
  42. package/lib/exercises/math/probaStat/basicStats/calculateFrequency.d.ts.map +1 -1
  43. package/lib/exercises/math/probaStat/basicStats/calculateFrequency.js +19 -10
  44. package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
  45. package/lib/geogebra/geogebraConstructor.js +12 -4
  46. package/lib/index.d.ts +25 -0
  47. package/lib/index.d.ts.map +1 -1
  48. package/lib/math/geometry/point.d.ts +2 -1
  49. package/lib/math/geometry/point.d.ts.map +1 -1
  50. package/lib/math/geometry/point.js +3 -3
  51. package/lib/math/geometry/triangle.d.ts +2 -7
  52. package/lib/math/geometry/triangle.d.ts.map +1 -1
  53. package/lib/math/geometry/triangle.js +7 -12
  54. package/lib/math/geometry/vector.d.ts +2 -0
  55. package/lib/math/geometry/vector.d.ts.map +1 -1
  56. package/lib/math/geometry/vector.js +3 -0
  57. package/lib/playground.d.ts.map +1 -1
  58. package/lib/playground.js +1 -3
  59. package/lib/tree/nodes/numbers/numberNode.d.ts +1 -0
  60. package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
  61. package/lib/tree/nodes/numbers/numberNode.js +3 -0
  62. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  63. package/lib/tree/nodes/operators/fractionNode.js +1 -1
  64. package/lib/tree/nodes/operators/scalarProductNode.d.ts +11 -0
  65. package/lib/tree/nodes/operators/scalarProductNode.d.ts.map +1 -0
  66. package/lib/tree/nodes/operators/scalarProductNode.js +16 -0
  67. package/lib/tree/parsers/powerParser.d.ts +1 -1
  68. package/package.json +2 -2
@@ -1,57 +1,75 @@
1
- import { addValidProp, shuffleProps, } from "../../../../../exercises/exercise.js";
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../../exercises/exercise.js";
2
2
  import { getDistinctQuestions } from "../../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { rationalVEA } from "../../../../../exercises/vea/rationalVEA.js";
3
4
  import { GeogebraConstructor } from "../../../../../geogebra/geogebraConstructor.js";
4
5
  import { Point } from "../../../../../math/geometry/point.js";
5
- import { Rational } from "../../../../../math/numbers/rationals/rational.js";
6
6
  import { randint } from "../../../../../math/utils/random/randint.js";
7
+ import { opposite } from "../../../../../tree/nodes/functions/oppositeNode.js";
8
+ import { NumberNode } from "../../../../../tree/nodes/numbers/numberNode.js";
9
+ import { frac } from "../../../../../tree/nodes/operators/fractionNode.js";
10
+ import { multiply } from "../../../../../tree/nodes/operators/multiplyNode.js";
11
+ import { coinFlip } from "../../../../../utils/alea/coinFlip.js";
7
12
  import { random } from "../../../../../utils/alea/random.js";
8
- const getPoints = (c) => {
9
- const midC = new Rational(c, 2).simplify().toTree();
13
+ import { handleVEAError } from "../../../../../utils/errors/handleVEAError.js";
14
+ const getPoints = (identifiers) => {
15
+ const { c, rotationAngle } = identifiers;
16
+ // const midC = new Rational(c, 2).simplify().toTree();
17
+ const midC = c / 2;
18
+ const oppMidC = -c / 2;
10
19
  const zeroTree = (0).toTree();
11
- const cTree = c.toTree();
20
+ const center = new Point("O", zeroTree, zeroTree);
12
21
  const points = [
13
- { name: "A", x: zeroTree, y: zeroTree },
14
- { name: "I", x: midC, y: zeroTree },
15
- { name: "B", x: cTree, y: zeroTree },
16
- { name: "J", x: cTree, y: midC },
17
- { name: "C", x: cTree, y: cTree },
18
- { name: "K", x: midC, y: cTree },
19
- { name: "D", x: zeroTree, y: cTree },
20
- { name: "L", x: zeroTree, y: midC },
21
- { name: "O", x: midC, y: midC },
22
- ];
23
- return points;
22
+ { name: "A", x: oppMidC, y: oppMidC },
23
+ { name: "I", x: zeroTree, y: oppMidC },
24
+ { name: "B", x: midC, y: oppMidC },
25
+ { name: "J", x: midC, y: zeroTree },
26
+ { name: "C", x: midC, y: midC },
27
+ { name: "K", x: zeroTree, y: midC },
28
+ { name: "D", x: oppMidC, y: midC },
29
+ { name: "L", x: oppMidC, y: zeroTree },
30
+ ].map((d) => new Point(d.name, d.x, d.y).rotate(rotationAngle, center));
31
+ return [...points, center];
24
32
  };
25
33
  const buildFromIdentifiers = (identifiers) => { };
26
- const getPropositions = (n, { answer }) => {
34
+ const getPropositions = (n, { answer, c }) => {
27
35
  const propositions = [];
28
36
  addValidProp(propositions, answer);
37
+ const wrongAnswers = [
38
+ c.toTree(),
39
+ frac(c, 2),
40
+ (c * c).toTree(),
41
+ frac(c ** 2, 4),
42
+ ];
29
43
  while (propositions.length < n) {
30
- throw Error("QCM not implemented");
44
+ let wrongItem = random(wrongAnswers);
45
+ if (coinFlip())
46
+ wrongItem = opposite(wrongItem);
47
+ tryToAddWrongProp(propositions, wrongItem.simplify().toTex());
31
48
  }
32
49
  return shuffleProps(propositions, n);
33
50
  };
34
51
  const getAnswer = (identifiers) => {
35
- return Math.random() + "";
52
+ const { areSameDirection, c, vec1Name, vec1ProjLength, vec2Name, vec2ProjLength, } = identifiers;
53
+ const frac1 = new NumberNode(vec1ProjLength).toFrac();
54
+ const frac2 = new NumberNode(vec2ProjLength).toFrac();
55
+ if (areSameDirection) {
56
+ return multiply(frac1, frac2).simplify().toTex();
57
+ }
58
+ return opposite(multiply(frac1, frac2)).simplify().toTex();
36
59
  };
37
- const getInstruction = ({ c, vector1Name, vector2Name, }) => {
60
+ const getInstruction = ({ c, vec1Name, vec2Name, }) => {
38
61
  return `$ABCD$ est un carré de côté $${c}$ et de centre $O$. Les points $I$,$J$,$K$ et $L$ sont les milieux respectifs des segments $[AB]$, $[BC]$, $[CD]$ et $[AD]$. Calculer :
39
62
 
40
63
  $$
41
- \\overrightarrow{${vector1Name}}\\cdot \\overrightarrow{${vector2Name}}
64
+ \\overrightarrow{${vec1Name}}\\cdot \\overrightarrow{${vec2Name}}
42
65
  $$`;
43
66
  };
44
- const getHint = (identifiers) => {
45
- return "";
46
- };
47
- const getCorrection = (identifiers) => {
48
- return "";
49
- };
50
- const getGGBOptions = ({ c }) => {
51
- const points = getPoints(c).map((d) => new Point(d.name, d.x, d.y));
67
+ const getGGBOptions = (identifiers) => {
68
+ const { c } = identifiers;
69
+ const points = getPoints(identifiers);
52
70
  const ggb = new GeogebraConstructor({
53
71
  commands: [
54
- ...points.flatMap((p) => p.toGGBCommand()),
72
+ ...points.flatMap((p) => p.toGGBCommand({ style: 1 })),
55
73
  `Polygon(A,B,C,D)`,
56
74
  `Segment(A,C)`,
57
75
  `Segment(B,D)`,
@@ -60,56 +78,70 @@ const getGGBOptions = ({ c }) => {
60
78
  hideGrid: true,
61
79
  });
62
80
  return ggb.getOptions({
63
- coords: [-1, c + 1, -1, c + 1],
81
+ coords: ggb.getCoordsForPoints(points),
64
82
  });
65
83
  };
66
84
  const getKeys = (identifiers) => {
67
85
  return [];
68
86
  };
69
87
  const isAnswerValid = (ans, { answer }) => {
70
- throw Error("VEA not implemented");
88
+ try {
89
+ return rationalVEA(ans, answer);
90
+ }
91
+ catch (err) {
92
+ return handleVEAError(err);
93
+ }
71
94
  };
72
95
  const getScalarProductOrthoInSquareQuestion = () => {
73
96
  const c = randint(1, 10);
74
- // AB AO
75
- // AB AK
76
- // AB AJ
77
- // AB AC
78
- //ou
79
- // AI AO
80
- // AI AK
81
- // AI AC
82
- // AI AJ
83
- //ou
84
- // AB IJ
85
- // AB OC
86
- // AB LK
87
- // AB OJ
88
- // AB LO
89
- //ou
90
- // AI IJ
91
- // AI OC
92
- // AI LK
93
- // AI OJ
94
- // AI LO
95
- // puis on shuffle dans tous les sens
96
- const firstPointIndex = random([0, 2, 4, 6]); //A,B,C,D
97
- const isD = firstPointIndex === 6;
98
- const delta = isD ? 3 : 2;
99
- const secondPointIndex = random([
100
- (firstPointIndex + delta) % 8,
101
- (firstPointIndex + 1) % 8,
102
- ]); //si first=A alors B ou I, idem par translation pour les autres
103
- const thirdPointIndex = random([(1 + delta) % 8, (7 + delta * 8) % 8, 8]);
104
- const identifiers = { c, vector1Name: "BC", vector2Name: "AC" };
97
+ // A(B,I) * A(J,C,O,K)
98
+ // A(D,L) * A(J,C,O,K)
99
+ //puis on reverse tout possiblement
100
+ const isFirstVecOnAB = coinFlip();
101
+ const vecs = {
102
+ AB: { projLength: c, reps: ["AB", "DC"] },
103
+ AC: { projLength: c, reps: ["AC"] },
104
+ AD: { projLength: c, reps: ["AD", "IK", "BC"] },
105
+ AJ: { projLength: isFirstVecOnAB ? c : c / 2, reps: ["AJ", "LC"] },
106
+ AO: { projLength: c / 2, reps: ["AO", "LK", "OC", "IJ"] },
107
+ AK: { projLength: isFirstVecOnAB ? c / 2 : c, reps: ["AK", "IC"] },
108
+ AI: {
109
+ projLength: c / 2,
110
+ reps: ["AI", "IB", "LO", "OJ", "DK", "KC"],
111
+ },
112
+ AL: {
113
+ projLength: c / 2,
114
+ reps: ["AL", "LD", "IO", "OK", "BJ", "BC"],
115
+ },
116
+ };
117
+ const vec1Choices = random(isFirstVecOnAB ? ["AB", "AI"] : ["AD", "AL"]);
118
+ const vec2Choices = random(["AJ", "AC", "AO", "AK"]);
119
+ let vec1 = random(vecs[vec1Choices].reps);
120
+ let vec2 = random(vecs[vec2Choices].reps);
121
+ let inversionsCount = 0;
122
+ if (coinFlip()) {
123
+ inversionsCount++;
124
+ vec1 = vec1.split("").reverse().join("");
125
+ }
126
+ if (coinFlip()) {
127
+ inversionsCount++;
128
+ vec2 = vec2.split("").reverse().join("");
129
+ }
130
+ const identifiers = {
131
+ c,
132
+ vec1Name: vec1,
133
+ vec2Name: vec2,
134
+ areSameDirection: inversionsCount % 2 === 0,
135
+ vec1ProjLength: vecs[vec1Choices].projLength,
136
+ vec2ProjLength: vecs[vec2Choices].projLength,
137
+ rotationAngle: Math.random() * 2 * Math.PI,
138
+ };
105
139
  const question = {
106
140
  answer: getAnswer(identifiers),
107
141
  instruction: getInstruction(identifiers),
108
142
  keys: getKeys(identifiers),
109
143
  answerFormat: "tex",
110
144
  identifiers,
111
- hint: getHint(identifiers),
112
- correction: getCorrection(identifiers),
113
145
  ggbOptions: getGGBOptions(identifiers),
114
146
  };
115
147
  return question;
@@ -126,8 +158,8 @@ export const scalarProductOrthoInSquare = {
126
158
  getPropositions,
127
159
  isAnswerValid,
128
160
  subject: "Mathématiques",
129
- getHint,
130
- getCorrection,
131
161
  getAnswer,
132
162
  getGGBOptions,
163
+ getInstruction,
164
+ hasGeogebra: true,
133
165
  };
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../../../exercises/exercise.js";
2
+ import { TriangleIdentifiers } from "../../../../../math/geometry/triangle.js";
3
+ type Identifiers = {
4
+ triangleIdentifiers: TriangleIdentifiers;
5
+ };
6
+ export declare const scalarProductViaNorms: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=scalarProductViaNorms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalarProductViaNorms.d.ts","sourceRoot":"","sources":["../../../../../../src/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAWzC,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AA8IF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,WAAW,CAkBvD,CAAC"}
@@ -0,0 +1,147 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { rationalVEA } from "../../../../../exercises/vea/rationalVEA.js";
4
+ import { GeogebraConstructor } from "../../../../../geogebra/geogebraConstructor.js";
5
+ import { TriangleConstructor, } from "../../../../../math/geometry/triangle.js";
6
+ import { randint } from "../../../../../math/utils/random/randint.js";
7
+ import { add } from "../../../../../tree/nodes/operators/addNode.js";
8
+ import { frac } from "../../../../../tree/nodes/operators/fractionNode.js";
9
+ import { multiply } from "../../../../../tree/nodes/operators/multiplyNode.js";
10
+ import { cdot } from "../../../../../tree/nodes/operators/scalarProductNode.js";
11
+ import { substract } from "../../../../../tree/nodes/operators/substractNode.js";
12
+ import { handleVEAError } from "../../../../../utils/errors/handleVEAError.js";
13
+ import { alignTex } from "../../../../../utils/latex/alignTex.js";
14
+ const getPropositions = (n, { answer, triangleIdentifiers }) => {
15
+ const propositions = [];
16
+ addValidProp(propositions, answer);
17
+ const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
18
+ const A = triangle.sides[0].getLength();
19
+ const B = triangle.sides[1].getLength();
20
+ const C = triangle.sides[2].getLength();
21
+ // return multiply(frac(1, 2), substract(add(C, B), A));
22
+ tryToAddWrongProp(propositions, substract(add(C ** 2, B ** 2), A ** 2)
23
+ .simplify()
24
+ .toTex());
25
+ tryToAddWrongProp(propositions, multiply(frac(1, 2), substract(add(C, B), A))
26
+ .simplify()
27
+ .toTex());
28
+ tryToAddWrongProp(propositions, multiply(frac(1, 2), substract(add(A ** 2, B ** 2), C ** 2))
29
+ .simplify()
30
+ .toTex());
31
+ while (propositions.length < n) {
32
+ tryToAddWrongProp(propositions, randint(-50, 50).frenchify());
33
+ }
34
+ return shuffleProps(propositions, n);
35
+ };
36
+ const getAnswerNode = (identifiers) => {
37
+ const { triangleIdentifiers } = identifiers;
38
+ const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
39
+ const A = triangle.sides[0].getLength() ** 2;
40
+ const B = triangle.sides[1].getLength() ** 2;
41
+ const C = triangle.sides[2].getLength() ** 2;
42
+ return multiply(frac(1, 2), substract(add(C, B), A));
43
+ };
44
+ const getAnswer = (identifiers) => {
45
+ return getAnswerNode(identifiers).simplify().toTex();
46
+ };
47
+ const getInstruction = (identifiers) => {
48
+ const { triangleIdentifiers } = identifiers;
49
+ const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
50
+ const sides = triangle.sides.map((e) => e.toLengthTex()).reverse();
51
+ const vectors = triangle.sides.map((e) => e.toVector()).reverse();
52
+ return `Le triangle $${triangle.name}$ est tel que $${sides[0]}$, $${sides[1]}$ et $${sides[2]}$.
53
+
54
+ Calculer $${cdot(vectors[0], vectors[1]).toTex()}$.`;
55
+ };
56
+ const getHint = (identifiers) => {
57
+ return `Si $A$, $B$ et $C$ sont trois points du plan, alors :
58
+
59
+ $$
60
+ \\overrightarrow{AB}\\cdot \\overrightarrow{AC} = \\frac{1}{2}\\left(AB^2 + AC^2 - BC^2 \\right)
61
+ $$`;
62
+ };
63
+ const getCorrection = (identifiers) => {
64
+ const { triangleIdentifiers } = identifiers;
65
+ const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
66
+ const sidesInsideNames = triangle.sides
67
+ .map((e) => e.toInsideName())
68
+ .reverse();
69
+ const answerNode = getAnswerNode(identifiers);
70
+ return `D'après le cours, on a :
71
+
72
+ ${alignTex([
73
+ [
74
+ "",
75
+ `\\overrightarrow{${sidesInsideNames[0]}}\\cdot \\overrightarrow{${sidesInsideNames[1]}}`,
76
+ ],
77
+ [
78
+ "=",
79
+ `\\frac{1}{2}\\left(${sidesInsideNames[0]}^2 + ${sidesInsideNames[1]}^2 - ${sidesInsideNames[2]}^2 \\right)`,
80
+ ],
81
+ ["=", answerNode.toTex()],
82
+ ["=", answerNode.simplify().toTex()],
83
+ ])}
84
+ `;
85
+ };
86
+ const getKeys = (identifiers) => {
87
+ return [];
88
+ };
89
+ const isAnswerValid = (ans, { answer }) => {
90
+ try {
91
+ return rationalVEA(ans, answer);
92
+ }
93
+ catch (err) {
94
+ return handleVEAError(err);
95
+ }
96
+ };
97
+ const getGGBOptions = (identifiers) => {
98
+ const { triangleIdentifiers } = identifiers;
99
+ const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
100
+ triangle.showSidesLength();
101
+ const ggb = new GeogebraConstructor({
102
+ commands: triangle.commands,
103
+ hideAxes: true,
104
+ hideGrid: true,
105
+ });
106
+ return ggb.getOptions({
107
+ coords: triangle.generateCoords(),
108
+ });
109
+ };
110
+ const getScalarProductViaNormsQuestion = (ops) => {
111
+ const triangle = TriangleConstructor.randomNiceSides({
112
+ randomName: true,
113
+ intSides: true,
114
+ });
115
+ const identifiers = {
116
+ triangleIdentifiers: triangle.toIdentifiers(),
117
+ };
118
+ const question = {
119
+ answer: getAnswer(identifiers),
120
+ instruction: getInstruction(identifiers),
121
+ keys: getKeys(identifiers),
122
+ answerFormat: "tex",
123
+ identifiers,
124
+ hint: getHint(identifiers),
125
+ correction: getCorrection(identifiers),
126
+ ggbOptions: getGGBOptions(identifiers),
127
+ };
128
+ return question;
129
+ };
130
+ export const scalarProductViaNorms = {
131
+ id: "scalarProductViaNorms",
132
+ connector: "=",
133
+ label: "Calculer un produit scalaire (formule des normes)",
134
+ isSingleStep: true,
135
+ generator: (nb, opts) => getDistinctQuestions(() => getScalarProductViaNormsQuestion(opts), nb),
136
+ qcmTimer: 60,
137
+ freeTimer: 60,
138
+ getPropositions,
139
+ isAnswerValid,
140
+ subject: "Mathématiques",
141
+ getInstruction,
142
+ getHint,
143
+ getCorrection,
144
+ getAnswer,
145
+ hasHintAndCorrection: true,
146
+ hasGeogebra: true,
147
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"calculateFrequency.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/probaStat/basicStats/calculateFrequency.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA+FF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAiBpD,CAAC"}
1
+ {"version":3,"file":"calculateFrequency.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/probaStat/basicStats/calculateFrequency.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAyGF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAiBpD,CAAC"}
@@ -3,37 +3,44 @@ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQue
3
3
  import { rationalVEA } from "../../../../exercises/vea/rationalVEA.js";
4
4
  import { RationalConstructor } from "../../../../math/numbers/rationals/rational.js";
5
5
  import { randint } from "../../../../math/utils/random/randint.js";
6
+ import { round } from "../../../../math/utils/round.js";
6
7
  import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
7
8
  import { random } from "../../../../utils/alea/random.js";
8
9
  import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
10
+ import { approxOrEqual } from "../../../../utils/latex/approxOrEqual.js";
9
11
  const getPropositions = (n, { answer, ...identifiers }) => {
10
12
  const propositions = [];
11
13
  const { k, nbEssais } = identifiers;
12
14
  addValidProp(propositions, answer);
13
15
  tryToAddWrongProp(propositions, k + "");
14
- tryToAddWrongProp(propositions, frac(k, 100).toTex());
16
+ tryToAddWrongProp(propositions, round(k / 100, 2).frenchify());
15
17
  while (propositions.length < n) {
16
- tryToAddWrongProp(propositions, RationalConstructor.randomIrreductible().toTree().toTex());
18
+ tryToAddWrongProp(propositions, round(RationalConstructor.randomIrreductible().toTree().evaluate(), 2).frenchify());
17
19
  }
18
20
  return shuffleProps(propositions, n);
19
21
  };
20
22
  const getAnswer = (identifiers) => {
21
23
  const { k, nbEssais } = identifiers;
22
- return frac(k, nbEssais).simplify().toTex();
24
+ return round(k / nbEssais, 2).frenchify();
23
25
  };
24
26
  const getInstruction = (identifiers) => {
25
27
  const { type, k, nbEssais, caracType } = identifiers;
28
+ let instruction = ";";
26
29
  switch (type) {
27
30
  case 0: //pièce
28
- return `On lance une pièce de monnaie $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}. Quelle est la fréquence d'apparition de ${caracType} ?`;
31
+ instruction = `On lance une pièce de monnaie $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}.`;
29
32
  case 1: //dé 6 faces
30
- return `On lance un dé à $6$ faces $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}. Quelle est la fréquence d'apparition de ${caracType} ?`;
33
+ instruction = `On lance un dé à $6$ faces $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}.`;
31
34
  case 2: // dé X faces
32
- return `On lance un dé à $12$ faces $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}. Quelle est la fréquence d'apparition de ${caracType} ?`;
35
+ instruction = `On lance un dé à $12$ faces $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}.`;
33
36
  case 3:
34
37
  default: //deux dés 6 faces
35
- return `On lance deux dés à $6$ faces $${nbEssais}$ fois. On note la somme obtenue. On tombe $${k}$ fois sur ${caracType}. Quelle est la fréquence d'apparition de ${caracType} ?`;
38
+ instruction = `On lance deux dés à $6$ faces $${nbEssais}$ fois. On note la somme obtenue. On tombe $${k}$ fois sur ${caracType}.`;
36
39
  }
40
+ instruction += `
41
+
42
+ Quelle est la fréquence d'apparition de ${caracType} ? Arrondir au centième près.`;
43
+ return instruction;
37
44
  };
38
45
  const getHint = (identifiers) => {
39
46
  const { type, k, nbEssais, caracType } = identifiers;
@@ -44,15 +51,17 @@ const getCorrection = (identifiers) => {
44
51
  return `On a obtenu $${k}$ fois ${caracType} sur les $${nbEssais}$ lancers. La fréquence d'apparition de ${caracType} est donc :
45
52
 
46
53
  $$
47
- ${frac(k, nbEssais).toSimplificationString()}
54
+ ${frac(k, nbEssais).toTex()} ${approxOrEqual(k / nbEssais, 2).join("")}
48
55
  $$`;
49
56
  };
50
57
  const getKeys = (identifiers) => {
51
58
  return [];
52
59
  };
53
- const isAnswerValid = (ans, { answer }) => {
60
+ const isAnswerValid = (ans, { answer, k, nbEssais }) => {
54
61
  try {
55
- return rationalVEA(ans, answer, { decimalPrecision: 2 });
62
+ return rationalVEA(ans, frac(k, nbEssais).simplify().toTex(), {
63
+ decimalPrecision: 2,
64
+ });
56
65
  }
57
66
  catch (err) {
58
67
  return handleVEAError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"geogebraConstructor.d.ts","sourceRoot":"","sources":["../../src/geogebra/geogebraConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAErD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AACF,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AACF,qBAAa,mBAAmB;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;gBAEhB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;IAcpD,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE;IAOlC,gBAAgB,CAAC,EACf,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,aAAa,GACd,EAAE,gBAAgB;IAyCnB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,eAAe;CAiBzD"}
1
+ {"version":3,"file":"geogebraConstructor.d.ts","sourceRoot":"","sources":["../../src/geogebra/geogebraConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAErD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AACF,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AACF,qBAAa,mBAAmB;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;gBAEhB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;IAcpD,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE;IAOlC,gBAAgB,CAAC,EACf,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,aAAa,GACd,EAAE,gBAAgB;IAiDnB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,eAAe;CAiBzD"}
@@ -60,10 +60,18 @@ export class GeogebraConstructor {
60
60
  }
61
61
  else {
62
62
  const coords = [
63
- xMin === xMax ? xMin - 1 : xMin - Math.max(1, coeff * Math.abs(xDelta)),
64
- xMin === xMax ? xMax + 1 : xMax + Math.max(1, coeff * Math.abs(xDelta)),
65
- yMin === yMax ? yMin - 1 : yMin - Math.max(1, coeff * Math.abs(yDelta)),
66
- yMin === yMax ? yMax + 1 : yMax + Math.max(1, coeff * Math.abs(yDelta)),
63
+ xMin === xMax
64
+ ? xMin - 1
65
+ : xMin - Math.max(0.5, coeff * Math.abs(xDelta)),
66
+ xMin === xMax
67
+ ? xMax + 1
68
+ : xMax + Math.max(0.5, coeff * Math.abs(xDelta)),
69
+ yMin === yMax
70
+ ? yMin - 1
71
+ : yMin - Math.max(0.5, coeff * Math.abs(yDelta)),
72
+ yMin === yMax
73
+ ? yMax + 1
74
+ : yMax + Math.max(0.5, coeff * Math.abs(yDelta)),
67
75
  ];
68
76
  if (showAxes) {
69
77
  coords[0] = Math.min(-1, coords[0]);
package/lib/index.d.ts CHANGED
@@ -864,6 +864,14 @@ declare const mathExercises: (Exercise<{
864
864
  a?: number;
865
865
  uCoeffs: number[];
866
866
  vCoeffs: number[];
867
+ }, {}> | Exercise<{
868
+ a: number;
869
+ b: number;
870
+ c: number;
871
+ d: number;
872
+ e: number;
873
+ f: number;
874
+ uA: number;
867
875
  }, {}> | Exercise<{
868
876
  a: number;
869
877
  k: number;
@@ -1165,6 +1173,16 @@ declare const mathExercises: (Exercise<{
1165
1173
  AB: number;
1166
1174
  AC: number;
1167
1175
  trigoPoint: string;
1176
+ }, {}> | Exercise<{
1177
+ c: number;
1178
+ vec1Name: string;
1179
+ vec2Name: string;
1180
+ areSameDirection: boolean;
1181
+ vec1ProjLength: number;
1182
+ vec2ProjLength: number;
1183
+ rotationAngle: number;
1184
+ }, {}> | Exercise<{
1185
+ triangleIdentifiers: import("./math/geometry/triangle.js").TriangleIdentifiers;
1168
1186
  }, {}> | Exercise<{
1169
1187
  points: import("./math/geometry/point.js").PointIdentifiers[];
1170
1188
  startPointIndex: number;
@@ -1265,6 +1283,13 @@ declare const mathExercises: (Exercise<{
1265
1283
  angleType: string;
1266
1284
  angleIndex: number;
1267
1285
  apexIndex: number;
1286
+ }, {}> | Exercise<{
1287
+ lines: {
1288
+ pointA: number[];
1289
+ pointB: number[];
1290
+ label: string;
1291
+ }[];
1292
+ coupleAsked: number;
1268
1293
  }, {}> | Exercise<{
1269
1294
  coeffs: number[];
1270
1295
  to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { AlgebraicNode } from "../../tree/nodes/algebraicNode.js";
2
2
  import { ToGGBCommandsProps } from "../../exercises/utils/geogebra/toGGBCommandsProps.js";
3
3
  import { NodeIdentifiers } from "../../tree/nodes/nodeConstructor.js";
4
4
  import { Line } from "./line.js";
5
+ import { Segment } from "./segment.js";
5
6
  export type PointIdentifiers = {
6
7
  id: "point";
7
8
  name: string;
@@ -14,7 +15,7 @@ export declare abstract class PointConstructor {
14
15
  static origin(name?: string): Point;
15
16
  static random(name: string, min?: number, max?: number): Point;
16
17
  static fromIdentifiers(identifiers: PointIdentifiers): Point;
17
- static onSegment(A: Point, B: Point, name: string, { spacing, coefficient, }?: {
18
+ static onSegment(segment: Segment, name: string, { spacing, coefficient, }?: {
18
19
  spacing?: number;
19
20
  coefficient?: number;
20
21
  }): Point;
@@ -1 +1 @@
1
- {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/math/geometry/point.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,eAAe,CAAC;IACnB,CAAC,EAAE,eAAe,CAAC;CACpB,CAAC;AACF,8BAAsB,gBAAgB;IACpC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE;IAGrC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM;IAKhC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAM;IAGxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,EAAE,GAAG,SAAK,GAAG,KAAK;IAMvD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,gBAAgB;IAQpD,MAAM,CAAC,SAAS,CACd,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,KAAK,EACR,IAAI,EAAE,MAAM,EACZ,EACE,OAAa,EACb,WAAW,GACZ,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAQpD,MAAM,CAAC,eAAe,CACpB,KAAK,EAAE,MAAM,EACb,EACE,KAAK,EACL,WAAW,EACX,mBAAmB,GACpB,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B;IA4BH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM;CAclC;AAED,qBAAa,KAAK;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;gBAEf,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,CAAC,EAAE,aAAa,GAAG,MAAM;IAO3B,KAAK,IAAI,MAAM;IAGf,aAAa,IAAI,gBAAgB;IAQjC,eAAe,IAAI,MAAM;IAGzB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,MAAM;IAIpB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,SAAM,GAAG,KAAK;IAQrC,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;IAM5B,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO;IAGzB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK;IAK5B,YAAY;IAGZ,YAAY,CAAC,EACX,OAAc,EACd,SAAgB,EAChB,KAAK,EACL,IAAI,EACJ,KAAK,GACN,GAAE,kBAAuB;IAiB1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IAiBnC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,SAAkB;IAIrD,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAkB;IAI1C,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAkB;CAIjD"}
1
+ {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/math/geometry/point.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,eAAe,CAAC;IACnB,CAAC,EAAE,eAAe,CAAC;CACpB,CAAC;AACF,8BAAsB,gBAAgB;IACpC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE;IAGrC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM;IAKhC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAM;IAGxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,EAAE,GAAG,SAAK,GAAG,KAAK;IAMvD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,gBAAgB;IAQpD,MAAM,CAAC,SAAS,CACd,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,EACE,OAAa,EACb,WAAW,GACZ,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAQpD,MAAM,CAAC,eAAe,CACpB,KAAK,EAAE,MAAM,EACb,EACE,KAAK,EACL,WAAW,EACX,mBAAmB,GACpB,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B;IA4BH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM;CAclC;AAED,qBAAa,KAAK;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;gBAEf,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,CAAC,EAAE,aAAa,GAAG,MAAM;IAO3B,KAAK,IAAI,MAAM;IAGf,aAAa,IAAI,gBAAgB;IAQjC,eAAe,IAAI,MAAM;IAGzB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,MAAM;IAIpB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,SAAM,GAAG,KAAK;IAQrC,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;IAM5B,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO;IAGzB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK;IAK5B,YAAY;IAGZ,YAAY,CAAC,EACX,OAAc,EACd,SAAgB,EAChB,KAAK,EACL,IAAI,EACJ,KAAK,GACN,GAAE,kBAAuB;IAiB1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IAiBnC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,SAAkB;IAIrD,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAkB;IAI1C,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAkB;CAIjD"}
@@ -29,10 +29,10 @@ export class PointConstructor {
29
29
  static fromIdentifiers(identifiers) {
30
30
  return new Point(identifiers.name, NodeConstructor.fromIdentifiers(identifiers.x), NodeConstructor.fromIdentifiers(identifiers.y));
31
31
  }
32
- static onSegment(A, B, name, { spacing = 0.1, coefficient, } = {}) {
32
+ static onSegment(segment, name, { spacing = 0.1, coefficient, } = {}) {
33
33
  const coeff = coefficient ?? randfloat(spacing, 1 - spacing);
34
- const vector = VectorConstructor.fromPoints(A, B).times(coeff.toTree());
35
- const point = vector.getEndPoint(A, name);
34
+ const vector = VectorConstructor.fromSegment(segment).times(coeff.toTree());
35
+ const point = vector.getEndPoint(segment.pointA, name);
36
36
  return point;
37
37
  }
38
38
  static randomDifferent(count, { names, minDistance, minDistanceToOrigin, }) {
@@ -9,9 +9,10 @@ export type TriangleIdentifiers = {
9
9
  };
10
10
  export declare abstract class TriangleConstructor {
11
11
  static fromIdentifiers(identifiers: TriangleIdentifiers): Triangle;
12
- static randomNiceSides({ names, randomName, }: {
12
+ static randomNiceSides({ names, randomName, intSides, }: {
13
13
  names?: string[] | undefined;
14
14
  randomName?: boolean | undefined;
15
+ intSides?: boolean | undefined;
15
16
  }): Triangle;
16
17
  static randomName(): string[];
17
18
  }
@@ -35,12 +36,6 @@ export declare class Triangle {
35
36
  props?: TriangleProps;
36
37
  constructor(points: Point[], props?: TriangleProps);
37
38
  toIdentifiers(): TriangleIdentifiers;
38
- /************* ✨ Codeium Command ⭐ *************/
39
- /**
40
- * Returns the perimeter of the triangle.
41
- * @returns {number} the perimeter of the triangle.
42
- */
43
- /****** fbb7c5d7-3919-4ef2-b5ba-db0d6770666d *******/
44
39
  getPerimeter(): number;
45
40
  getArea(): number;
46
41
  isRight(): Boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"triangle.d.ts","sourceRoot":"","sources":["../../../src/math/geometry/triangle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAEL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAE7C,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAEF,8BAAsB,mBAAmB;IACvC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,QAAQ;IAgBlE,MAAM,CAAC,eAAe,CAAC,EACrB,KAAuB,EACvB,UAAkB,GACnB;;;KAAA,GAAG,QAAQ;IA8BZ,MAAM,CAAC,UAAU;CAQlB;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,CAAC,EAAE,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE,CAAC;IAC/C,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAC;CACxC,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC;IAC7C,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;CACtC,CAAC;AACF,qBAAa,QAAQ;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;gBACV,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa;IAyClD,aAAa,IAAI,mBAAmB;IAepC,mDAAmD;IACnD;;;OAGG;IACH,uDAAuD;IACvD,YAAY,IAAI,MAAM;IAItB,OAAO,IAAI,MAAM;IASjB,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,OAAO;IAMxB,WAAW,IAAI,OAAO;IAUtB,SAAS,IAAI,OAAO;IASpB,aAAa,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAWH,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAKH,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;IAQtC,SAAS,CACP,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAYH,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,KAAK,CAAC;KACnB;IAoCH,cAAc,IAAI,MAAM,EAAE;CAkB3B"}
1
+ {"version":3,"file":"triangle.d.ts","sourceRoot":"","sources":["../../../src/math/geometry/triangle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAEL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAEF,8BAAsB,mBAAmB;IACvC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,QAAQ;IAgBlE,MAAM,CAAC,eAAe,CAAC,EACrB,KAAuB,EACvB,UAAkB,EAClB,QAAgB,GACjB;;;;KAAA,GAAG,QAAQ;IA8BZ,MAAM,CAAC,UAAU;CAQlB;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,CAAC,EAAE,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE,CAAC;IAC/C,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAC;CACxC,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC;IAC7C,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;CACtC,CAAC;AACF,qBAAa,QAAQ;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;gBACV,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa;IAyClD,aAAa,IAAI,mBAAmB;IAepC,YAAY,IAAI,MAAM;IAItB,OAAO,IAAI,MAAM;IASjB,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,OAAO;IAMxB,WAAW,IAAI,OAAO;IAUtB,SAAS,IAAI,OAAO;IASpB,aAAa,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAWH,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAKH,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;IAQtC,SAAS,CACP,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAYH,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,KAAK,CAAC;KACnB;IAoCH,cAAc,IAAI,MAAM,EAAE;CAkB3B"}