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.
- package/lib/exercises/math/dataRepresentations/barChartReading.d.ts.map +1 -1
- package/lib/exercises/math/dataRepresentations/barChartReading.js +0 -1
- package/lib/exercises/math/dataRepresentations/functionGraphReading.d.ts +9 -0
- package/lib/exercises/math/dataRepresentations/functionGraphReading.d.ts.map +1 -0
- package/lib/exercises/math/dataRepresentations/functionGraphReading.js +174 -0
- package/lib/exercises/math/dataRepresentations/index.js +1 -0
- package/lib/exercises/math/derivation/derivative/inflexionPointQuadrinomials.d.ts.map +1 -1
- package/lib/exercises/math/derivation/derivative/inflexionPointQuadrinomials.js +68 -14
- package/lib/exercises/math/functions/exponential/expFactorization.d.ts +13 -0
- package/lib/exercises/math/functions/exponential/expFactorization.d.ts.map +1 -0
- package/lib/exercises/math/functions/exponential/expFactorization.js +147 -0
- package/lib/exercises/math/functions/exponential/index.d.ts +1 -0
- package/lib/exercises/math/functions/exponential/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/exponential/index.js +1 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.js +1 -1
- package/lib/exercises/math/geometry/euclidian/index.js +1 -0
- package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.d.ts +2 -0
- package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.d.ts.map +1 -0
- package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.js +187 -0
- package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromAxialSymetry.d.ts.map +1 -1
- package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromAxialSymetry.js +2 -1
- package/lib/exercises/math/geometry/index.d.ts +1 -0
- package/lib/exercises/math/geometry/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/index.js +2 -1
- package/lib/exercises/math/geometry/lines/index.d.ts +2 -0
- package/lib/exercises/math/geometry/lines/index.d.ts.map +1 -0
- package/lib/exercises/math/geometry/lines/index.js +1 -0
- package/lib/exercises/math/geometry/lines/linesRelativePositions.d.ts +12 -0
- package/lib/exercises/math/geometry/lines/linesRelativePositions.d.ts.map +1 -0
- package/lib/exercises/math/geometry/lines/linesRelativePositions.js +140 -0
- package/lib/exercises/math/geometry/shapes/basicShapesNaming.js +1 -1
- package/lib/exercises/math/geometry/shapes/basicShapesRecognition.js +1 -1
- package/lib/exercises/math/geometry/vectors/scalarProduct/index.d.ts +2 -0
- package/lib/exercises/math/geometry/vectors/scalarProduct/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/vectors/scalarProduct/index.js +2 -1
- package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.d.ts +6 -2
- package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.d.ts.map +1 -1
- package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.js +99 -67
- package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.d.ts +8 -0
- package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.d.ts.map +1 -0
- package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductViaNorms.js +147 -0
- package/lib/exercises/math/probaStat/basicStats/calculateFrequency.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/basicStats/calculateFrequency.js +19 -10
- package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
- package/lib/geogebra/geogebraConstructor.js +12 -4
- package/lib/index.d.ts +25 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/math/geometry/point.d.ts +2 -1
- package/lib/math/geometry/point.d.ts.map +1 -1
- package/lib/math/geometry/point.js +3 -3
- package/lib/math/geometry/triangle.d.ts +2 -7
- package/lib/math/geometry/triangle.d.ts.map +1 -1
- package/lib/math/geometry/triangle.js +7 -12
- package/lib/math/geometry/vector.d.ts +2 -0
- package/lib/math/geometry/vector.d.ts.map +1 -1
- package/lib/math/geometry/vector.js +3 -0
- package/lib/playground.d.ts.map +1 -1
- package/lib/playground.js +1 -3
- package/lib/tree/nodes/numbers/numberNode.d.ts +1 -0
- package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
- package/lib/tree/nodes/numbers/numberNode.js +3 -0
- package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/fractionNode.js +1 -1
- package/lib/tree/nodes/operators/scalarProductNode.d.ts +11 -0
- package/lib/tree/nodes/operators/scalarProductNode.d.ts.map +1 -0
- package/lib/tree/nodes/operators/scalarProductNode.js +16 -0
- package/lib/tree/parsers/powerParser.d.ts +1 -1
- 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
|
-
|
|
9
|
-
|
|
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
|
|
20
|
+
const center = new Point("O", zeroTree, zeroTree);
|
|
12
21
|
const points = [
|
|
13
|
-
{ name: "A", x:
|
|
14
|
-
{ name: "I", x:
|
|
15
|
-
{ name: "B", x:
|
|
16
|
-
{ name: "J", x:
|
|
17
|
-
{ name: "C", x:
|
|
18
|
-
{ name: "K", x:
|
|
19
|
-
{ name: "D", x:
|
|
20
|
-
{ name: "L", x:
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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{${
|
|
64
|
+
\\overrightarrow{${vec1Name}}\\cdot \\overrightarrow{${vec2Name}}
|
|
42
65
|
$$`;
|
|
43
66
|
};
|
|
44
|
-
const
|
|
45
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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;
|
|
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,
|
|
16
|
+
tryToAddWrongProp(propositions, round(k / 100, 2).frenchify());
|
|
15
17
|
while (propositions.length < n) {
|
|
16
|
-
tryToAddWrongProp(propositions, RationalConstructor.randomIrreductible().toTree().
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
33
|
+
instruction = `On lance un dé à $6$ faces $${nbEssais}$ fois. On tombe $${k}$ fois sur ${caracType}.`;
|
|
31
34
|
case 2: // dé X faces
|
|
32
|
-
|
|
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
|
-
|
|
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).
|
|
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,
|
|
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;
|
|
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
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,QAAA,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAA+B,CAAC;AACnD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAA6B,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -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(
|
|
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;
|
|
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(
|
|
32
|
+
static onSegment(segment, name, { spacing = 0.1, coefficient, } = {}) {
|
|
33
33
|
const coeff = coefficient ?? randfloat(spacing, 1 - spacing);
|
|
34
|
-
const vector = VectorConstructor.
|
|
35
|
-
const point = vector.getEndPoint(
|
|
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;
|
|
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"}
|