math-exercises 3.0.152 → 3.0.153

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 (116) hide show
  1. package/lib/exercises/exercise.d.ts +2 -0
  2. package/lib/exercises/exercise.d.ts.map +1 -1
  3. package/lib/exercises/math/calculLitteral/equation/index.d.ts +1 -1
  4. package/lib/exercises/math/calculLitteral/equation/index.d.ts.map +1 -1
  5. package/lib/exercises/math/calculLitteral/equation/index.js +1 -1
  6. package/lib/exercises/math/calculLitteral/equation/square/equationSimpleSquare.d.ts +10 -0
  7. package/lib/exercises/math/calculLitteral/equation/square/equationSimpleSquare.d.ts.map +1 -0
  8. package/lib/exercises/math/calculLitteral/equation/square/equationSimpleSquare.js +183 -0
  9. package/lib/exercises/math/calculLitteral/equation/square/equationSquareWithSteps.d.ts +10 -0
  10. package/lib/exercises/math/calculLitteral/equation/square/equationSquareWithSteps.d.ts.map +1 -0
  11. package/lib/exercises/math/calculLitteral/equation/square/equationSquareWithSteps.js +173 -0
  12. package/lib/exercises/math/calculLitteral/equation/square/index.d.ts +3 -0
  13. package/lib/exercises/math/calculLitteral/equation/square/index.d.ts.map +1 -0
  14. package/lib/exercises/math/calculLitteral/equation/square/index.js +2 -0
  15. package/lib/exercises/math/functions/sqrt/squareRootCalculation.d.ts.map +1 -1
  16. package/lib/exercises/math/functions/sqrt/squareRootCalculation.js +4 -2
  17. package/lib/exercises/math/geometry/euclidian/homothetyFactorFromPoints.d.ts +15 -0
  18. package/lib/exercises/math/geometry/euclidian/homothetyFactorFromPoints.d.ts.map +1 -0
  19. package/lib/exercises/math/geometry/euclidian/homothetyFactorFromPoints.js +301 -0
  20. package/lib/exercises/math/geometry/euclidian/index.d.ts +7 -0
  21. package/lib/exercises/math/geometry/euclidian/index.d.ts.map +1 -1
  22. package/lib/exercises/math/geometry/euclidian/index.js +7 -0
  23. package/lib/exercises/math/geometry/euclidian/pinPointFromAxialOrCentralSymmetry.d.ts +21 -0
  24. package/lib/exercises/math/geometry/euclidian/pinPointFromAxialOrCentralSymmetry.d.ts.map +1 -0
  25. package/lib/exercises/math/geometry/euclidian/pinPointFromAxialOrCentralSymmetry.js +406 -0
  26. package/lib/exercises/math/geometry/euclidian/pinPointFromRotation.d.ts +18 -0
  27. package/lib/exercises/math/geometry/euclidian/pinPointFromRotation.d.ts.map +1 -0
  28. package/lib/exercises/math/geometry/euclidian/pinPointFromRotation.js +315 -0
  29. package/lib/exercises/math/geometry/euclidian/pinPointFromTranslation.d.ts +20 -0
  30. package/lib/exercises/math/geometry/euclidian/pinPointFromTranslation.d.ts.map +1 -0
  31. package/lib/exercises/math/geometry/euclidian/pinPointFromTranslation.js +314 -0
  32. package/lib/exercises/math/geometry/euclidian/pinSegmentFromRotation.d.ts +18 -0
  33. package/lib/exercises/math/geometry/euclidian/pinSegmentFromRotation.d.ts.map +1 -0
  34. package/lib/exercises/math/geometry/euclidian/pinSegmentFromRotation.js +387 -0
  35. package/lib/exercises/math/geometry/euclidian/recognizeAngleFromRotation.d.ts +18 -0
  36. package/lib/exercises/math/geometry/euclidian/recognizeAngleFromRotation.d.ts.map +1 -0
  37. package/lib/exercises/math/geometry/euclidian/recognizeAngleFromRotation.js +309 -0
  38. package/lib/exercises/math/geometry/euclidian/recognizeHomothetyCenter.d.ts +17 -0
  39. package/lib/exercises/math/geometry/euclidian/recognizeHomothetyCenter.d.ts.map +1 -0
  40. package/lib/exercises/math/geometry/euclidian/recognizeHomothetyCenter.js +301 -0
  41. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromAxialSymetry.d.ts.map +1 -1
  42. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromAxialSymetry.js +22 -8
  43. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromCentralSymmetry.d.ts +11 -0
  44. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromCentralSymmetry.d.ts.map +1 -0
  45. package/lib/exercises/math/geometry/euclidianConstructions/buildPointFromCentralSymmetry.js +169 -0
  46. package/lib/exercises/math/geometry/euclidianConstructions/index.d.ts +2 -0
  47. package/lib/exercises/math/geometry/euclidianConstructions/index.d.ts.map +1 -1
  48. package/lib/exercises/math/geometry/euclidianConstructions/index.js +2 -0
  49. package/lib/exercises/math/geometry/euclidianConstructions/placeHomothetyCenter.d.ts +16 -0
  50. package/lib/exercises/math/geometry/euclidianConstructions/placeHomothetyCenter.d.ts.map +1 -0
  51. package/lib/exercises/math/geometry/euclidianConstructions/placeHomothetyCenter.js +309 -0
  52. package/lib/exercises/math/probaStat/stats1var/averageWithClasses.d.ts +9 -0
  53. package/lib/exercises/math/probaStat/stats1var/averageWithClasses.d.ts.map +1 -0
  54. package/lib/exercises/math/probaStat/stats1var/averageWithClasses.js +140 -0
  55. package/lib/exercises/math/probaStat/stats1var/averageWithTableWithContext.d.ts +8 -0
  56. package/lib/exercises/math/probaStat/stats1var/averageWithTableWithContext.d.ts.map +1 -0
  57. package/lib/exercises/math/probaStat/stats1var/averageWithTableWithContext.js +113 -0
  58. package/lib/exercises/math/probaStat/stats1var/index.d.ts +2 -0
  59. package/lib/exercises/math/probaStat/stats1var/index.d.ts.map +1 -1
  60. package/lib/exercises/math/probaStat/stats1var/index.js +2 -0
  61. package/lib/exercises/math/scratch/index.d.ts +3 -0
  62. package/lib/exercises/math/scratch/index.d.ts.map +1 -1
  63. package/lib/exercises/math/scratch/index.js +3 -0
  64. package/lib/exercises/math/scratch/scratchListElemAtIndex.d.ts +13 -0
  65. package/lib/exercises/math/scratch/scratchListElemAtIndex.d.ts.map +1 -0
  66. package/lib/exercises/math/scratch/scratchListElemAtIndex.js +189 -0
  67. package/lib/exercises/math/scratch/scratchListElemAtIndex2.d.ts +23 -0
  68. package/lib/exercises/math/scratch/scratchListElemAtIndex2.d.ts.map +1 -0
  69. package/lib/exercises/math/scratch/scratchListElemAtIndex2.js +207 -0
  70. package/lib/exercises/math/scratch/scratchListFilter.d.ts +13 -0
  71. package/lib/exercises/math/scratch/scratchListFilter.d.ts.map +1 -0
  72. package/lib/exercises/math/scratch/scratchListFilter.js +397 -0
  73. package/lib/exercises/math/spaceGeometry/basis/findSpacePointOnRectangularPrism.d.ts +14 -0
  74. package/lib/exercises/math/spaceGeometry/basis/findSpacePointOnRectangularPrism.d.ts.map +1 -0
  75. package/lib/exercises/math/spaceGeometry/basis/findSpacePointOnRectangularPrism.js +347 -0
  76. package/lib/exercises/math/spaceGeometry/basis/index.d.ts +1 -0
  77. package/lib/exercises/math/spaceGeometry/basis/index.d.ts.map +1 -1
  78. package/lib/exercises/math/spaceGeometry/basis/index.js +1 -0
  79. package/lib/exercises/math/spaceGeometry/index.d.ts +2 -0
  80. package/lib/exercises/math/spaceGeometry/index.d.ts.map +1 -1
  81. package/lib/exercises/math/spaceGeometry/index.js +2 -0
  82. package/lib/exercises/math/spaceGeometry/sections/areaOfConeSection.js +3 -3
  83. package/lib/exercises/math/spaceGeometry/solids/index.d.ts +3 -0
  84. package/lib/exercises/math/spaceGeometry/solids/index.d.ts.map +1 -0
  85. package/lib/exercises/math/spaceGeometry/solids/index.js +2 -0
  86. package/lib/exercises/math/spaceGeometry/solids/recognizeSolidFrom3D.d.ts +15 -0
  87. package/lib/exercises/math/spaceGeometry/solids/recognizeSolidFrom3D.d.ts.map +1 -0
  88. package/lib/exercises/math/spaceGeometry/solids/recognizeSolidFrom3D.js +440 -0
  89. package/lib/exercises/math/spaceGeometry/solids/recognizeSolidFromSolidPattern.d.ts +11 -0
  90. package/lib/exercises/math/spaceGeometry/solids/recognizeSolidFromSolidPattern.d.ts.map +1 -0
  91. package/lib/exercises/math/spaceGeometry/solids/recognizeSolidFromSolidPattern.js +1089 -0
  92. package/lib/exercises/math/spaceGeometry/sphere/index.d.ts +3 -0
  93. package/lib/exercises/math/spaceGeometry/sphere/index.d.ts.map +1 -0
  94. package/lib/exercises/math/spaceGeometry/sphere/index.js +2 -0
  95. package/lib/exercises/math/spaceGeometry/sphere/pickIsPointInSphereOrBall.d.ts +9 -0
  96. package/lib/exercises/math/spaceGeometry/sphere/pickIsPointInSphereOrBall.d.ts.map +1 -0
  97. package/lib/exercises/math/spaceGeometry/sphere/pickIsPointInSphereOrBall.js +127 -0
  98. package/lib/exercises/math/spaceGeometry/sphere/sphereLatLonReading.d.ts +14 -0
  99. package/lib/exercises/math/spaceGeometry/sphere/sphereLatLonReading.d.ts.map +1 -0
  100. package/lib/exercises/math/spaceGeometry/sphere/sphereLatLonReading.js +390 -0
  101. package/lib/geogebra/geogebraConstructor.d.ts +2 -0
  102. package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
  103. package/lib/geogebra/geogebraConstructor.js +6 -0
  104. package/lib/index.d.ts +178 -5
  105. package/lib/index.d.ts.map +1 -1
  106. package/lib/math/geometry/point.d.ts +6 -0
  107. package/lib/math/geometry/point.d.ts.map +1 -1
  108. package/lib/math/geometry/point.js +28 -0
  109. package/lib/tree/nodes/equations/equalNode.d.ts +1 -1
  110. package/lib/tree/nodes/equations/equalNode.d.ts.map +1 -1
  111. package/lib/tree/nodes/equations/equalNode.js +0 -1
  112. package/lib/tree/utilities/nodeSimplifier.d.ts +1 -1
  113. package/lib/utils/arrays/arrayZip.d.ts +2 -0
  114. package/lib/utils/arrays/arrayZip.d.ts.map +1 -0
  115. package/lib/utils/arrays/arrayZip.js +12 -0
  116. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ export * from "./pickIsPointInSphereOrBall.js";
2
+ export * from "./sphereLatLonReading.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/spaceGeometry/sphere/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./pickIsPointInSphereOrBall.js";
2
+ export * from "./sphereLatLonReading.js";
@@ -0,0 +1,9 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ type Identifiers = {
3
+ nbs: number[];
4
+ radius: number;
5
+ isSphere: boolean;
6
+ };
7
+ export declare const pickIsPointInSphereOrBall: Exercise<Identifiers>;
8
+ export {};
9
+ //# sourceMappingURL=pickIsPointInSphereOrBall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickIsPointInSphereOrBall.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/spaceGeometry/sphere/pickIsPointInSphereOrBall.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,6BAA6B,CAAC;AAmBrC,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AA6IF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAmB3D,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { addValidProp, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { randint } from "../../../../math/utils/random/randint.js";
4
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
5
+ import { probaFlip } from "../../../../utils/alea/probaFlip.js";
6
+ import { randomMany } from "../../../../utils/alea/random.js";
7
+ import { shuffle } from "../../../../utils/alea/shuffle.js";
8
+ import { joinanded } from "../../../../utils/strings/joinanded.js";
9
+ const namePoints = ["A", "B", "C", "D"];
10
+ const isInSphereOrBall = (rCandidate, rSphere, isSphere) => {
11
+ return isSphere ? rCandidate === rSphere : rCandidate <= rSphere;
12
+ };
13
+ const getPropositions = (_, { nbs, radius, isSphere }) => {
14
+ const propositions = [];
15
+ namePoints.forEach((namePoint, i) => {
16
+ const nb = nbs[i];
17
+ if (isInSphereOrBall(nb, radius, isSphere))
18
+ addValidProp(propositions, namePoint);
19
+ else
20
+ tryToAddWrongProp(propositions, namePoint);
21
+ });
22
+ return propositions;
23
+ };
24
+ const getAnswer = () => {
25
+ return "";
26
+ };
27
+ const getInstruction = (identifiers) => {
28
+ const { nbs, radius, isSphere } = identifiers;
29
+ return `${joinanded([...namePoints, "O"].map((namePoint) => `$${namePoint}$`), ", ", " et ")} sont des points de l'espace tels que
30
+ ${joinanded([...namePoints].map((namePoint, i) => `$O${namePoint} = ${nbs[i].frenchify()} \\ \\textrm{cm}$`), ", ", " et ")}.
31
+
32
+ Parmi les points ci-dessous, lequel ou lesquels appartiennent à la ${isSphere ? `sphère` : `boule`} de centre $O$ et de rayon $${radius.frenchify()} \\ \\textrm{cm}$ ?`;
33
+ };
34
+ const getHint = () => {
35
+ return `- Une sphère de centre $O$ et de rayon $r$ est l'ensemble des points $M$ de l'espace tels que $OM=r$.
36
+
37
+ - Une boule de centre $O$ et de rayon $r$ est l'ensemble des points $M$ de l'espace tels que $OM\\leq r$.`;
38
+ };
39
+ const getCorrection = (identifiers) => {
40
+ const { nbs, radius, isSphere } = identifiers;
41
+ if (isSphere) {
42
+ return `La sphère de centre $O$ et de rayon $${radius.frenchify()}\\ \\textrm{cm}$ est l'ensemble des points dont la distance à $O$ est exactement $${radius.frenchify()}\\ \\textrm{cm}$.
43
+
44
+ C'est une surface.
45
+
46
+ ${namePoints.map((namePoint, i) => `
47
+
48
+ $$
49
+ O${namePoint} = ${nbs[i].frenchify()} \\ \\textrm{cm} ${nbs[i] === radius ? `` : `\\neq ${radius.frenchify()} \\ \\textrm{cm}`}
50
+ $$
51
+
52
+ donc $${namePoint}$ ${isInSphereOrBall(nbs[i], radius, isSphere)
53
+ ? `appartient`
54
+ : `n'appartient pas`} à la sphère de rayon $${radius.frenchify()}\\ \\textrm{cm}$.`).join(`
55
+
56
+ `)}`;
57
+ }
58
+ else {
59
+ return `La boule de centre $O$ et de rayon $${radius.frenchify()}\\ \\textrm{cm}$ est l'ensemble des points dont la distance à $O$ inférieure ou égale à $${radius.frenchify()}\\ \\textrm{cm}$.
60
+
61
+ C'est un solide.
62
+
63
+ ${namePoints.map((namePoint, i) => `
64
+
65
+ $$
66
+ O${namePoint} = ${nbs[i].frenchify()} \\ \\textrm{cm} ${nbs[i] > radius ? `>` : `\\leq`} ${radius.frenchify()} \\ \\textrm{cm}
67
+ $$
68
+
69
+ donc $${namePoint}$ ${isInSphereOrBall(nbs[i], radius, isSphere)
70
+ ? `appartient`
71
+ : `n'appartient pas`} à la boule de rayon $${radius.frenchify()}\\ \\textrm{cm}$.`).join(`
72
+
73
+ `)}`;
74
+ }
75
+ };
76
+ const getPickIsPointInSphereOrBallQuestion = () => {
77
+ const nbPoints = 4;
78
+ const rMin = 1;
79
+ const rMax = 36;
80
+ const radius = randint(1, rMax + 1);
81
+ const isSphere = coinFlip();
82
+ const mandatory = isSphere
83
+ ? probaFlip(0.6)
84
+ ? [radius]
85
+ : [radius, radius]
86
+ : [radius];
87
+ const nbs = shuffle([
88
+ ...randomMany([...Array(rMax - rMin + 1).keys()].map((i) => i + rMin), nbPoints - mandatory.length),
89
+ ...mandatory,
90
+ ]);
91
+ const identifiers = {
92
+ nbs,
93
+ radius,
94
+ isSphere,
95
+ };
96
+ return getQuestionFromIdentifiers(identifiers);
97
+ };
98
+ const getQuestionFromIdentifiers = (identifiers) => {
99
+ return {
100
+ answer: getAnswer(identifiers),
101
+ instruction: getInstruction(identifiers),
102
+ keys: [],
103
+ answerFormat: "tex",
104
+ identifiers,
105
+ hint: getHint(identifiers),
106
+ correction: getCorrection(identifiers),
107
+ };
108
+ };
109
+ export const pickIsPointInSphereOrBall = {
110
+ id: "pickIsPointInSphereOrBall",
111
+ connector: "=",
112
+ label: "Déterminer les points qui appartiennent à une sphère ou à une boule",
113
+ isSingleStep: true,
114
+ generator: (nb, opts) => getDistinctQuestions(() => getPickIsPointInSphereOrBallQuestion(opts), nb),
115
+ qcmTimer: 60,
116
+ freeTimer: 60,
117
+ getPropositions,
118
+ subject: "Mathématiques",
119
+ getInstruction,
120
+ getHint,
121
+ getCorrection,
122
+ getAnswer,
123
+ getQuestionFromIdentifiers,
124
+ hasHintAndCorrection: true,
125
+ answerType: "QCM",
126
+ isQCM: true,
127
+ };
@@ -0,0 +1,14 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { PointIdentifiers } from "../../../../math/geometry/point.js";
3
+ import { SpacePointIdentifiers } from "../../../../math/geometry/spacePoint.js";
4
+ type Identifiers = {
5
+ pointsDict: Record<string, {
6
+ latLon: PointIdentifiers;
7
+ "3d": SpacePointIdentifiers;
8
+ }>;
9
+ isLatitude: boolean;
10
+ namePointTarget: string;
11
+ };
12
+ export declare const sphereLatLonReading: Exercise<Identifiers>;
13
+ export {};
14
+ //# sourceMappingURL=sphereLatLonReading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sphereLatLonReading.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/spaceGeometry/sphere/sphereLatLonReading.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAwO3C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAChB,MAAM,EACN;QACE,MAAM,EAAE,gBAAgB,CAAC;QACzB,IAAI,EAAE,qBAAqB,CAAC;KAC7B,CACF,CAAC;IACF,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAwMF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAgBrD,CAAC"}
@@ -0,0 +1,390 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { greenMain, red } from "../../../../geogebra/colors.js";
4
+ import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
5
+ import { Point, PointConstructor, } from "../../../../math/geometry/point.js";
6
+ import { SpacePoint, SpacePointConstructor, } from "../../../../math/geometry/spacePoint.js";
7
+ import { randint } from "../../../../math/utils/random/randint.js";
8
+ import { cos } from "../../../../tree/nodes/functions/cosNode.js";
9
+ import { sin } from "../../../../tree/nodes/functions/sinNode.js";
10
+ import { PiNode } from "../../../../tree/nodes/numbers/piNode.js";
11
+ import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
12
+ import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
13
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
14
+ import { random } from "../../../../utils/alea/random.js";
15
+ const earthGlobeGGBCommands = () => {
16
+ const radius = 10;
17
+ const radiusMore = 10.5;
18
+ const radiusMoreMore = 11;
19
+ return [
20
+ //hide xOyPlane
21
+ `SetFilling(xOyPlane, 0)`,
22
+ //sphere
23
+ `Sph = Sphere((0,0,0), 0.99 * ${radius})`,
24
+ `SetColor(Sph, "#d3dde6ff")`,
25
+ `SetFilling(Sph, 0.84)`,
26
+ `SetLineThickness(Sph, 1)`,
27
+ //circles and arcs
28
+ //méridien
29
+ `c = Circle((0, 0, ${radius}), (${radius}, 0, 0), (0, 0, -${radius}))`,
30
+ `SetVisibleInView(c, -1, false)`,
31
+ `m = Arc(c, (0, 0, ${radius}), (0, 0, -${radius}) )`,
32
+ `SetColor(m, "${greenMain}")`,
33
+ `SetLineThickness(m, 3)`,
34
+ // `SetCaption(m, "$\\footnotesize \\text{Méridien de Greenwich}$")`,
35
+ // `ShowLabel(m, true)`,
36
+ //équateur
37
+ `d = Circle((${radius}, 0, 0), (0, ${radius}, 0), (-${radius}, 0, 0))`,
38
+ `SetColor(d, "${red}")`,
39
+ `SetLineThickness(d, 3)`,
40
+ // `SetCaption(d, "$\\footnotesize \\text{Équateur}$")`,
41
+ // `ShowLabel(d, true)`,
42
+ //other circles
43
+ `A_1 = (${radius}, 0, 0)`,
44
+ `l1 = Sequence(Rotate(m, nn * 15°, zAxis), nn, 1, 24)`,
45
+ `l2 = Sequence(Rotate(A_1, nn * 15°, yAxis), nn, -5, 5)`,
46
+ `l3 = Sequence(z(Element(l2, nn)), nn, 1, Length(l2))`,
47
+ `l4 = Sequence(x(Element(l2, nn)), nn, 1, Length(l2))`,
48
+ `l5 = Sequence(Circle((0, 0, Element(l3, nn)), Element(l4, nn), zAxis), nn, 1, Length(l2))`,
49
+ `SetVisibleInView(l2, -1, false)`, //Use -1 for the 3D View
50
+ `SetVisibleInView(A_1, -1, false)`,
51
+ //cercles::parallèles
52
+ `SetColor(l5, "${red}")`,
53
+ `SetLineThickness(l5, 1)`,
54
+ //cercles::méridiens
55
+ `SetColor(l1, "${greenMain}")`,
56
+ `SetLineThickness(l1, 1)`,
57
+ //markers
58
+ //marqueurs::parallèles
59
+ `lp0 = Sequence(Rotate((${radiusMore}, 0, 0), nn * 15°, yAxis), nn, -5, 5)`,
60
+ `SetVisibleInView(lp0, -1, false)`,
61
+ ...[...Array(11).keys()]
62
+ .map((i) => i + 1)
63
+ .flatMap((i) => {
64
+ const angleInDegrees = -(90 - i * 15);
65
+ let strAngle;
66
+ if (angleInDegrees == 0) {
67
+ return [];
68
+ }
69
+ else if (angleInDegrees < 0) {
70
+ strAngle = `${(-angleInDegrees).frenchify()}°N`;
71
+ }
72
+ else {
73
+ strAngle = `${angleInDegrees.frenchify()}°S`;
74
+ }
75
+ return [
76
+ `P0_{${i}} = Point({x(Element(lp0, ${i})), y(Element(lp0, ${i})), z(Element(lp0, ${i}))})`,
77
+ `SetPointSize(P0_{${i}}, 1)`,
78
+ `SetColor(P0_{${i}}, "${red}")`,
79
+ `SetCaption(P0_{${i}}, "$\\footnotesize \\text{${strAngle}}$")`,
80
+ `ShowLabel(P0_{${i}}, true)`,
81
+ ];
82
+ }),
83
+ `lp2 = Sequence(Rotate(((-${radiusMore}), 0, 0), nn * 15°, yAxis), nn, -5, 5)`,
84
+ `SetVisibleInView(lp2, -1, false)`,
85
+ ...[...Array(11).keys()]
86
+ .map((i) => i + 1)
87
+ .flatMap((i) => {
88
+ const angleInDegrees = 90 - i * 15;
89
+ let strAngle;
90
+ if (angleInDegrees == 0) {
91
+ return [];
92
+ }
93
+ else if (angleInDegrees < 0) {
94
+ strAngle = `${(-angleInDegrees).frenchify()}°N`;
95
+ }
96
+ else {
97
+ strAngle = `${angleInDegrees.frenchify()}°S`;
98
+ }
99
+ return [
100
+ `P2_{${i}} = Point({x(Element(lp2, ${i})), y(Element(lp2, ${i})), z(Element(lp2, ${i}))})`,
101
+ `SetPointSize(P2_{${i}}, 1)`,
102
+ `SetColor(P2_{${i}}, "${red}")`,
103
+ `SetCaption(P2_{${i}}, "$\\footnotesize \\text{${strAngle}}$")`,
104
+ `ShowLabel(P2_{${i}}, true)`,
105
+ ];
106
+ }),
107
+ `lp1 = Sequence(Rotate((0, -${radiusMore}, 0), nn * 15°, xAxis), nn, -5, 5)`,
108
+ `SetVisibleInView(lp1, -1, false)`,
109
+ ...[...Array(11).keys()]
110
+ .map((i) => i + 1)
111
+ .flatMap((i) => {
112
+ const angleInDegrees = -(90 - i * 15);
113
+ let strAngle;
114
+ if (angleInDegrees == 0) {
115
+ return [];
116
+ }
117
+ else if (angleInDegrees < 0) {
118
+ strAngle = `${(-angleInDegrees).frenchify()}°N`;
119
+ }
120
+ else {
121
+ strAngle = `${angleInDegrees.frenchify()}°S`;
122
+ }
123
+ return [
124
+ `P1_{${i}} = Point({x(Element(lp1, ${i})), y(Element(lp1, ${i})), z(Element(lp1, ${i}))})`,
125
+ `SetPointSize(P1_{${i}}, 1)`,
126
+ `SetColor(P1_{${i}}, "${red}")`,
127
+ `SetCaption(P1_{${i}}, "$\\footnotesize \\text{${strAngle}}$")`,
128
+ `ShowLabel(P1_{${i}}, true)`,
129
+ ];
130
+ }),
131
+ `lp3 = Sequence(Rotate((0, ${radiusMore}, 0), nn * 15°, xAxis), nn, -5, 5)`,
132
+ `SetVisibleInView(lp3, -1, false)`,
133
+ ...[...Array(11).keys()]
134
+ .map((i) => i + 1)
135
+ .flatMap((i) => {
136
+ const angleInDegrees = 90 - i * 15;
137
+ let strAngle;
138
+ if (angleInDegrees == 0) {
139
+ return [];
140
+ }
141
+ else if (angleInDegrees < 0) {
142
+ strAngle = `${(-angleInDegrees).frenchify()}°N`;
143
+ }
144
+ else {
145
+ strAngle = `${angleInDegrees.frenchify()}°S`;
146
+ }
147
+ return [
148
+ `P3_{${i}} = Point({x(Element(lp3, ${i})), y(Element(lp3, ${i})), z(Element(lp3, ${i}))})`,
149
+ `SetPointSize(P3_{${i}}, 1)`,
150
+ `SetColor(P3_{${i}}, "${red}")`,
151
+ `SetCaption(P3_{${i}}, "$\\footnotesize \\text{${strAngle}}$")`,
152
+ `ShowLabel(P3_{${i}}, true)`,
153
+ ];
154
+ }),
155
+ //marqueurs::méridiens
156
+ `lm0 = Sequence(Rotate((${radiusMoreMore}, 0, 0), nn * 15°, zAxis), nn, -11, 12)`,
157
+ `SetVisibleInView(lm0, -1, false)`,
158
+ ...[...Array(24).keys()]
159
+ .map((i) => i + 1)
160
+ .flatMap((i) => {
161
+ const angleInDegrees = 180 - i * 15;
162
+ let strAngle;
163
+ if (angleInDegrees == -180 || angleInDegrees == 0) {
164
+ strAngle = `${angleInDegrees.frenchify()}°`;
165
+ }
166
+ else if (angleInDegrees < 0) {
167
+ strAngle = `${(-angleInDegrees).frenchify()}°E`;
168
+ }
169
+ else {
170
+ strAngle = `${angleInDegrees.frenchify()}°O`;
171
+ }
172
+ return [
173
+ `M0_{${i}} = Point({x(Element(lm0, ${i})), y(Element(lm0, ${i})), z(Element(lm0, ${i}))})`,
174
+ `SetPointSize(M0_{${i}}, 1)`,
175
+ `SetColor(M0_{${i}}, "black")`,
176
+ `SetCaption(M0_{${i}}, "$\\footnotesize \\text{${strAngle}}$")`,
177
+ `ShowLabel(M0_{${i}}, true)`,
178
+ ];
179
+ }),
180
+ //center view
181
+ `CenterView(Point({0,0,0}))`,
182
+ ];
183
+ };
184
+ const spacePointForLatLonPoint = (latlonPoint, radius) => {
185
+ const { x: lat, y: lon } = latlonPoint;
186
+ const toRadians = frac(PiNode, 180);
187
+ const delta = multiply(lat, toRadians);
188
+ const theta = multiply(lon, toRadians);
189
+ const chunk = multiply(radius, cos(delta));
190
+ const x = multiply(chunk, cos(theta));
191
+ const y = multiply(chunk, sin(theta));
192
+ const z = multiply(radius, sin(delta));
193
+ return new SpacePoint("S", x, y, z);
194
+ };
195
+ // const latLonPointForSpacePoint = (
196
+ // spacePoint: SpacePoint,
197
+ // center: SpacePoint,
198
+ // ) => {
199
+ // const { x, y, z } = spacePoint;
200
+ // const vec3d = SpaceVectorConstructor.fromPoints(
201
+ // new SpacePoint("O", (0).toTree(), (0).toTree(), (0).toTree()),
202
+ // spacePoint,
203
+ // );
204
+ // const radius = vec3d.getNorm();
205
+ // const delta = substract(
206
+ // frac(PiNode, 2),
207
+ // Math.atan2(y.evaluate(), x.evaluate()),
208
+ // );
209
+ // const theta = Math.acos(z.evaluate()) / radius.evaluate();
210
+ // const toDegrees = frac(180, PiNode).evaluate();
211
+ // const lat = multiply(delta, toDegrees).evaluate();
212
+ // const lon = multiply(theta, toDegrees).evaluate();
213
+ // return new Point("L", lat, lon);
214
+ // };
215
+ const getStrLatitude = (angleInDegrees) => {
216
+ if (angleInDegrees % 90 === 0) {
217
+ return `${angleInDegrees.frenchify()}°`;
218
+ }
219
+ else if (angleInDegrees < 0) {
220
+ return `${(-angleInDegrees).frenchify()}°S`;
221
+ }
222
+ else {
223
+ return `${angleInDegrees.frenchify()}°N`;
224
+ }
225
+ };
226
+ const getStrLongitude = (angleInDegrees) => {
227
+ if (angleInDegrees % 180 === 0) {
228
+ return `${angleInDegrees.frenchify()}°`;
229
+ }
230
+ else if (angleInDegrees < 0) {
231
+ return `${(-angleInDegrees).frenchify()}°O`;
232
+ }
233
+ else {
234
+ return `${angleInDegrees.frenchify()}°E`;
235
+ }
236
+ };
237
+ const getPropositions = (n, { answer, ...identifiers }) => {
238
+ const { pointsDict, namePointTarget, isLatitude } = identifiers;
239
+ const propositions = [];
240
+ const latLonPoints = PointConstructor.fromIdentifiers(pointsDict[namePointTarget].latLon);
241
+ if (isLatitude) {
242
+ addValidProp(propositions, getStrLatitude(latLonPoints.x.evaluate()));
243
+ tryToAddWrongProp(propositions, getStrLongitude(latLonPoints.y.evaluate()));
244
+ //wrongSign
245
+ tryToAddWrongProp(propositions, getStrLatitude(-latLonPoints.x.evaluate()));
246
+ //madness
247
+ tryToAddWrongProp(propositions, getStrLatitude(latLonPoints.y.evaluate()));
248
+ tryToAddWrongProp(propositions, getStrLatitude(-latLonPoints.y.evaluate()));
249
+ tryToAddWrongProp(propositions, getStrLongitude(latLonPoints.x.evaluate()));
250
+ tryToAddWrongProp(propositions, getStrLongitude(-latLonPoints.x.evaluate()));
251
+ }
252
+ else {
253
+ addValidProp(propositions, getStrLongitude(latLonPoints.y.evaluate()));
254
+ tryToAddWrongProp(propositions, getStrLatitude(latLonPoints.x.evaluate()));
255
+ //wrongSign
256
+ tryToAddWrongProp(propositions, getStrLongitude(-latLonPoints.y.evaluate()));
257
+ //madness
258
+ tryToAddWrongProp(propositions, getStrLongitude(latLonPoints.x.evaluate()));
259
+ tryToAddWrongProp(propositions, getStrLongitude(-latLonPoints.x.evaluate()));
260
+ tryToAddWrongProp(propositions, getStrLatitude(latLonPoints.y.evaluate()));
261
+ tryToAddWrongProp(propositions, getStrLatitude(-latLonPoints.y.evaluate()));
262
+ }
263
+ return shuffleProps(propositions, n);
264
+ };
265
+ const getAnswer = (identifiers) => {
266
+ const { pointsDict, namePointTarget, isLatitude } = identifiers;
267
+ const latLonPoints = PointConstructor.fromIdentifiers(pointsDict[namePointTarget].latLon);
268
+ if (isLatitude) {
269
+ return getStrLatitude(latLonPoints.x.evaluate());
270
+ }
271
+ else {
272
+ return getStrLongitude(latLonPoints.y.evaluate());
273
+ }
274
+ };
275
+ const getInstruction = (identifiers) => {
276
+ const { isLatitude, namePointTarget } = identifiers;
277
+ return `Quelle est la ${isLatitude ? "latitude" : "longitude"} du point $${namePointTarget}$ sur la figure ci-dessous ?
278
+
279
+ *On pourra tourner la fenêtre graphique.*`;
280
+ };
281
+ const getHint = () => {
282
+ return `Pour déterminer la latitude, on utlise les parallèles.
283
+ Pour déterminer la longitude, on utilise les méridiens.`;
284
+ };
285
+ const getCorrection = (identifiers) => {
286
+ const { isLatitude, namePointTarget } = identifiers;
287
+ const answer = getAnswer(identifiers);
288
+ return `La latitude donne la position Nord/Sud.
289
+ La longitude donne la position Est/Ouest.
290
+ La ${isLatitude ? "latitude" : "longitude"} du point $${namePointTarget}$ est donc $${answer}$.`;
291
+ };
292
+ const getGGBOptions = (identifiers) => {
293
+ const { pointsDict, namePointTarget } = identifiers;
294
+ const spacePoints = Object.values(pointsDict).map((miniDict) => SpacePointConstructor.fromIdentifiers(miniDict["3d"]));
295
+ const spacePointTarget = SpacePointConstructor.fromIdentifiers(pointsDict[namePointTarget]["3d"]);
296
+ const radius = 5;
297
+ // const zoomInCuboid = [-1, -1, -1, 1, 1, 1].map((v) => v * 0.5);
298
+ const commands = [
299
+ ...earthGlobeGGBCommands(),
300
+ ...spacePoints.flatMap((spacePoint) => spacePoint.toGGBCommand()),
301
+ // `ZoomIn(${zoomInCuboid.join(",")})`, //does not work -_-
302
+ // `ZoomIn(2,${spacePointTarget.toCoords()})`, //does not work -_-
303
+ ];
304
+ const ggb = new GeogebraConstructor({
305
+ commands,
306
+ is3D: true,
307
+ xAxis: {
308
+ hidden: true,
309
+ },
310
+ yAxis: {
311
+ hidden: true,
312
+ },
313
+ zAxis: {
314
+ hidden: true,
315
+ },
316
+ viewDirectionVector: [
317
+ -spacePointTarget.x.evaluate(),
318
+ -spacePointTarget.y.evaluate(),
319
+ -spacePointTarget.z.evaluate(),
320
+ ],
321
+ });
322
+ const xMax = radius;
323
+ const xMin = -xMax;
324
+ const yMax = radius;
325
+ const yMin = -yMax;
326
+ const zMax = radius;
327
+ const zMin = -zMax;
328
+ return ggb.getOptions({
329
+ coords: [xMin, xMax, yMin, yMax, zMin, zMax],
330
+ });
331
+ };
332
+ const getKeys = () => {
333
+ return [];
334
+ };
335
+ const isAnswerValid = (ans, { answer }) => {
336
+ return ans === answer;
337
+ };
338
+ const getSphereLatLonReadingQuestion = () => {
339
+ const isLatitude = coinFlip();
340
+ const radius = 10;
341
+ const letters = ["A", "B", "C", "D"];
342
+ const pointsDict = letters.reduce((acc, letter) => {
343
+ const lat = randint(-4, 5) * 15;
344
+ const lon = randint(-11, 12) * 15;
345
+ const latLonPoint = new Point(`LatLon_{letter}`, lat, lon);
346
+ const spacePoint = spacePointForLatLonPoint(latLonPoint, radius.toTree());
347
+ spacePoint.name = letter;
348
+ acc[letter] = {
349
+ latLon: latLonPoint.toIdentifiers(),
350
+ "3d": spacePoint.toIdentifiers(),
351
+ };
352
+ return acc;
353
+ }, {});
354
+ const namePointTarget = random(Object.keys(pointsDict));
355
+ const identifiers = {
356
+ isLatitude,
357
+ pointsDict,
358
+ namePointTarget,
359
+ };
360
+ return getQuestionFromIdentifiers(identifiers);
361
+ };
362
+ const getQuestionFromIdentifiers = (identifiers) => {
363
+ const question = {
364
+ answer: getAnswer(identifiers),
365
+ instruction: getInstruction(identifiers),
366
+ keys: getKeys(identifiers),
367
+ answerFormat: "tex",
368
+ identifiers,
369
+ hint: getHint(identifiers),
370
+ correction: getCorrection(identifiers),
371
+ ggbOptions: getGGBOptions(identifiers),
372
+ };
373
+ return question;
374
+ };
375
+ export const sphereLatLonReading = {
376
+ id: "sphereLatLonReading",
377
+ label: "Donner la latitude/longitude d'un point sur une sphère",
378
+ isSingleStep: true,
379
+ generator: (nb, opts) => getDistinctQuestions(() => getSphereLatLonReadingQuestion(opts), nb),
380
+ qcmTimer: 60,
381
+ freeTimer: 60,
382
+ getPropositions,
383
+ isAnswerValid,
384
+ getHint,
385
+ getCorrection,
386
+ hasHintAndCorrection: true,
387
+ subject: "Mathématiques",
388
+ hasGeogebra: true,
389
+ getQuestionFromIdentifiers,
390
+ };
@@ -19,6 +19,8 @@ export declare class GeogebraConstructor {
19
19
  forbidShiftDragZoom?: boolean;
20
20
  commands?: string[];
21
21
  is3D?: boolean;
22
+ projection?: number;
23
+ projectionParam?: number;
22
24
  gridDistance?: [number, number] | false;
23
25
  hideGrid?: boolean;
24
26
  hideAxes?: boolean;
@@ -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;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,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;IAC5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;IAoBpD,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE;IAOlC,gBAAgB,CAAC,EACf,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,SAAS,EACT,KAAK,GACN,EAAE,gBAAgB;IAsDnB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,eAAe;CAuBzD"}
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;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,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,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,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;IAC5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;IAsBpD,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE;IAOlC,gBAAgB,CAAC,EACf,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,SAAS,EACT,KAAK,GACN,EAAE,gBAAgB;IAsDnB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,eAAe;CAyBzD"}
@@ -4,6 +4,8 @@ export class GeogebraConstructor {
4
4
  forbidShiftDragZoom;
5
5
  commands;
6
6
  is3D;
7
+ projection;
8
+ projectionParam;
7
9
  gridDistance;
8
10
  hideGrid;
9
11
  hideAxes;
@@ -23,6 +25,8 @@ export class GeogebraConstructor {
23
25
  this.forbidShiftDragZoom = options?.forbidShiftDragZoom ?? false;
24
26
  this.commands = options.commands;
25
27
  this.is3D = options?.is3D;
28
+ this.projection = options?.projection;
29
+ this.projectionParam = options?.projectionParam;
26
30
  this.gridDistance = options?.gridDistance ?? [1, 1];
27
31
  this.hideGrid = options?.hideGrid;
28
32
  this.hideAxes = options?.hideAxes;
@@ -104,6 +108,8 @@ export class GeogebraConstructor {
104
108
  commands: this.commands,
105
109
  coords: coords,
106
110
  is3D: this.is3D,
111
+ projection: this.projection,
112
+ projectionParam: this.projectionParam,
107
113
  gridDistance: this.gridDistance,
108
114
  hideAxes: this.hideAxes,
109
115
  hideGrid: this.hideGrid,