summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/objectEquivalence.js14
-rw-r--r--src/utils/unitizeVector.js11
2 files changed, 25 insertions, 0 deletions
diff --git a/src/utils/objectEquivalence.js b/src/utils/objectEquivalence.js
new file mode 100644
index 0000000..e33dd76
--- /dev/null
+++ b/src/utils/objectEquivalence.js
@@ -0,0 +1,14 @@
+const equivalence = (obj1, obj2) => {
+ if (obj1 === null) {
+ return obj1 === null;
+ }
+ return Object.keys(obj1).every(key => {
+ if (obj2[key] === undefined) {
+ return false;
+ }
+ if (typeof obj1[key] === 'object') {
+ return equivalence(obj1[key], obj2[key]);
+ }
+ return obj1[key] === obj2[key];
+ });
+};
diff --git a/src/utils/unitizeVector.js b/src/utils/unitizeVector.js
new file mode 100644
index 0000000..6297ca8
--- /dev/null
+++ b/src/utils/unitizeVector.js
@@ -0,0 +1,11 @@
+const unitize = (vector) => {
+ // Not *technically* a unit vector, but has x,y components of |magnitude| = 1
+ Object.keys(vector).forEach((key) => {
+ if (typeof vector[key] === 'object') {
+ vector[key] = vector[key].unitize();
+ } else if (typeof vector[key] === 'number') {
+ vector[key] = (vector[key] === 0 ? 0 : vector[key] / Math.abs(vector[key]));
+ }
+ });
+ return vector;
+} \ No newline at end of file