@pie-element/graphing 5.0.4-next.27 → 5.0.4-next.34
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/controller/lib/utils.js
CHANGED
|
@@ -30,6 +30,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
30
30
|
var equalPoint = function equalPoint(A, B) {
|
|
31
31
|
// x1 = x2 & y1 = y2
|
|
32
32
|
var equalLabel = true;
|
|
33
|
+
A = _objectSpread({}, A);
|
|
34
|
+
B = _objectSpread({}, B);
|
|
33
35
|
|
|
34
36
|
if (A.label || B.label) {
|
|
35
37
|
equalLabel = (0, _isEqual["default"])(A.label, B.label);
|
|
@@ -70,6 +72,10 @@ var sortedAnswers = function sortedAnswers(answers) {
|
|
|
70
72
|
exports.sortedAnswers = sortedAnswers;
|
|
71
73
|
|
|
72
74
|
var returnLineEquationCoefficients = function returnLineEquationCoefficients(line) {
|
|
75
|
+
line = _objectSpread(_objectSpread({}, line), {}, {
|
|
76
|
+
to: _objectSpread({}, line.to),
|
|
77
|
+
from: _objectSpread({}, line.from)
|
|
78
|
+
});
|
|
73
79
|
var xA = line.from.x;
|
|
74
80
|
var yA = line.from.y;
|
|
75
81
|
var xB = line.to.x;
|
|
@@ -128,8 +134,16 @@ var equalLine = function equalLine(line1, line2) {
|
|
|
128
134
|
exports.equalLine = equalLine;
|
|
129
135
|
|
|
130
136
|
var equalRay = function equalRay(ray1, ray2) {
|
|
131
|
-
|
|
137
|
+
ray1 = _objectSpread(_objectSpread({}, ray1), {}, {
|
|
138
|
+
to: _objectSpread({}, ray1.to),
|
|
139
|
+
from: _objectSpread({}, ray1.from)
|
|
140
|
+
});
|
|
141
|
+
ray2 = _objectSpread(_objectSpread({}, ray2), {}, {
|
|
142
|
+
to: _objectSpread({}, ray2.to),
|
|
143
|
+
from: _objectSpread({}, ray2.from)
|
|
144
|
+
}); // slope: m = (y2-y1)/(x2-x1)
|
|
132
145
|
// slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)
|
|
146
|
+
|
|
133
147
|
var mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);
|
|
134
148
|
var mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);
|
|
135
149
|
var angleRay1 = Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180 / Math.PI;
|
|
@@ -205,6 +219,8 @@ var equalSine = function equalSine(sine1, sine2) {
|
|
|
205
219
|
var getPoints = function getPoints(_ref) {
|
|
206
220
|
var root = _ref.root,
|
|
207
221
|
edge = _ref.edge;
|
|
222
|
+
root = _objectSpread({}, root);
|
|
223
|
+
edge = _objectSpread({}, edge);
|
|
208
224
|
|
|
209
225
|
var _getAmplitudeAndFreq = (0, _graphingUtils.getAmplitudeAndFreq)(root, edge),
|
|
210
226
|
amplitude = _getAmplitudeAndFreq.amplitude,
|
|
@@ -261,10 +277,12 @@ var equalSine = function equalSine(sine1, sine2) {
|
|
|
261
277
|
exports.equalSine = equalSine;
|
|
262
278
|
|
|
263
279
|
var equalParabola = function equalParabola(p1, p2) {
|
|
264
|
-
var edgeP1 = p1.edge
|
|
265
|
-
|
|
266
|
-
var
|
|
267
|
-
|
|
280
|
+
var edgeP1 = p1.edge;
|
|
281
|
+
var edgeP2 = p2.edge;
|
|
282
|
+
var rootP1 = p1.root;
|
|
283
|
+
var rootP2 = p2.root;
|
|
284
|
+
rootP1 = _objectSpread({}, rootP1);
|
|
285
|
+
rootP2 = _objectSpread({}, rootP2);
|
|
268
286
|
|
|
269
287
|
var p1edge = edgeP1 || _objectSpread({}, rootP1);
|
|
270
288
|
|
|
@@ -278,6 +296,7 @@ var equalParabola = function equalParabola(p1, p2) {
|
|
|
278
296
|
x: rootP2.x - (p2edge.x - rootP2.x),
|
|
279
297
|
y: p2edge.y
|
|
280
298
|
};
|
|
299
|
+
if (!edgeP1 || !edgeP2) return false;
|
|
281
300
|
|
|
282
301
|
var _pointsToABC = (0, _graphingUtils.pointsToABC)(rootP1, edgeP1, p1mirrorEdge),
|
|
283
302
|
a1 = _pointsToABC.a,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["equalPoint","A","B","equalLabel","label","x","y","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","lodash","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differentSegments2","equalCircle","equalRootAndEdge","edge","root","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","rootP1","edgeP2","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","equalMarks","circle","sessAnswer","mark","parabola","polygon","poly","ray","sine","vector","completePoint","Number","isFinite","completeFromTo","item","completeMark","completeRootEdge","completePoints","removeInvalidAnswers","type","answer"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport lodash from 'lodash';\nimport uniqWith from 'lodash/uniqWith';\nimport differenceWith from 'lodash/differenceWith';\nimport { getAmplitudeAndFreq, pointsToABC } from '@pie-lib/pie-toolbox/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n // x1 = x2 & y1 = y2\n let equalLabel = true;\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\n\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to);\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nconst returnLineEquationCoefficients = (line) => {\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return lodash.uniq(proportions).length === 1;\n\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\nexport const equalRay = (ray1, ray2) => {\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = (Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180) / Math.PI;\n const angleRay2 = (Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180) / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\n\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt((c1.edge.x - c1.root.x) ** 2 + (c1.edge.y - c1.root.y) ** 2);\n const rC2 = Math.sqrt((c2.edge.x - c2.root.x) ** 2 + (c2.edge.y - c2.root.y) ** 2);\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY),\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1,\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2,\n } = correctAnswerBpY;\n\n return (\n Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 &&\n max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2\n );\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1, root: rootP1 } = p1;\n const { edge: edgeP2, root: rootP2 } = p2;\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = (number) => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\nconst completeRootEdge = (item) => item && completeMark.point(item.edge) && completeMark.point(item.root);\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n ray: completeFromTo,\n segment: completeFromTo,\n vector: completeFromTo,\n circle: completeRootEdge,\n parabola: completeRootEdge,\n sine: completeRootEdge,\n polygon: completePoints,\n};\n\nexport const removeInvalidAnswers = (answers) =>\n answers\n ? (answers || []).filter(({ type, ...answer }) => (completeMark[type] ? completeMark[type](answer) : false))\n : [];\n"],"file":"utils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["equalPoint","A","B","equalLabel","label","x","y","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","lodash","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differentSegments2","equalCircle","equalRootAndEdge","edge","root","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","edgeP2","rootP1","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","equalMarks","circle","sessAnswer","mark","parabola","polygon","poly","ray","sine","vector","completePoint","Number","isFinite","completeFromTo","item","completeMark","completeRootEdge","completePoints","removeInvalidAnswers","type","answer"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport lodash from 'lodash';\nimport uniqWith from 'lodash/uniqWith';\nimport differenceWith from 'lodash/differenceWith';\nimport { getAmplitudeAndFreq, pointsToABC } from '@pie-lib/pie-toolbox/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n // x1 = x2 & y1 = y2\n let equalLabel = true;\n\n A = {...A};\n B = {...B};\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\n\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to);\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nconst returnLineEquationCoefficients = (line) => {\n line = {...line, to: { ...line.to }, from: { ...line.from }};\n\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return lodash.uniq(proportions).length === 1;\n\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\nexport const equalRay = (ray1, ray2) => {\n ray1 = {...ray1, to: { ...ray1.to }, from: { ...ray1.from }};\n ray2 = {...ray2, to: { ...ray2.to }, from: { ...ray2.from }};\n\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = (Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180) / Math.PI;\n const angleRay2 = (Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180) / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\n\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt((c1.edge.x - c1.root.x) ** 2 + (c1.edge.y - c1.root.y) ** 2);\n const rC2 = Math.sqrt((c2.edge.x - c2.root.x) ** 2 + (c2.edge.y - c2.root.y) ** 2);\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n root = { ...root};\n edge = { ...edge};\n\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY),\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1,\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2,\n } = correctAnswerBpY;\n\n return (\n Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 &&\n max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2\n );\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = {...rootP1};\n rootP2 = {...rootP2};\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n if (!edgeP1 || !edgeP2) return false;\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = (number) => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\nconst completeRootEdge = (item) => item && completeMark.point(item.edge) && completeMark.point(item.root);\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n ray: completeFromTo,\n segment: completeFromTo,\n vector: completeFromTo,\n circle: completeRootEdge,\n parabola: completeRootEdge,\n sine: completeRootEdge,\n polygon: completePoints,\n};\n\nexport const removeInvalidAnswers = (answers) =>\n answers\n ? (answers || []).filter(({ type, ...answer }) => (completeMark[type] ? completeMark[type](answer) : false))\n : [];\n"],"file":"utils.js"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "5.0.4-next.
|
|
7
|
+
"version": "5.0.4-next.34+087c5883e",
|
|
8
8
|
"description": "",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"author": "",
|
|
23
23
|
"license": "ISC",
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "087c5883e5e95c62412666d249712d39c9712296",
|
|
25
25
|
"main": "lib/index.js",
|
|
26
26
|
"module": "src/index.js"
|
|
27
27
|
}
|