Browse Source

Implement conversion logic

Kirk Trombley 3 years ago
parent
commit
2f0b4578b5
3 changed files with 40 additions and 1 deletions
  1. 36 0
      convert.js
  2. 1 1
      metrics.js
  3. 3 0
      nearest.html

+ 36 - 0
convert.js

@@ -0,0 +1,36 @@
+const buildVectorData = (vector, toHue, toHex) => {
+  const sqMag = vectorDot(vector, vector);
+  const mag = Math.sqrt(sqMag);
+  const unit = vector.map(c => c / mag);
+  const hue = toHue(vector);
+  const hex = toHex(vector);
+  return { vector, sqMag, mag, unit, hue, hex };
+};
+
+const buildClusterData = (size, inertia, mu1, mu2, mu3, nu1, nu2, nu3, toHue, toHex) => ({
+  size, inertia,
+  mu: buildVectorData([mu1, mu2, mu3], toHue, toHex),
+  nu: [nu1, nu2, nu3],
+});
+
+const buildPokemonData = ([name, size, ...values]) => ({
+  name,
+  jab: {
+    total: buildClusterData(size, ...values.slice(0, 7), jab2hue, jab2hex),
+    clusters: [
+      buildClusterData(...values.slice(7, 15), jab2hue, jab2hex),
+      buildClusterData(...values.slice(15, 23), jab2hue, jab2hex),
+      buildClusterData(...values.slice(23, 31), jab2hue, jab2hex),
+    ],
+  },
+  rgb: {
+    total: buildClusterData(size, ...values.slice(31, 38), rgb2hue, rgb2hex),
+    clusters: [
+      buildClusterData(...values.slice(38, 46), rgb2hue, rgb2hex),
+      buildClusterData(...values.slice(46, 54), rgb2hue, rgb2hex),
+      buildClusterData(...values.slice(54, 62), rgb2hue, rgb2hex),
+    ],
+  },
+});
+
+const pokemonData = databaseV2.map(row => buildPokemonData(row));

+ 1 - 1
metrics.js

@@ -12,7 +12,7 @@ const rawMetrics = (() => {
     display: p => String.raw`
       \Theta\left(${p}\right) = \cos^{-1}\left( \hat{q}\cdot\vec{\nu}\left(${p}\right) \right)
     `,
-    evaluate: (data, target) => rad2deg * Math.acos(vectorDot(data.nu.vector, target.unit)),
+    evaluate: (data, target) => rad2deg * Math.acos(vectorDot(data.nu, target.unit)),
   };
 
   const angleOfMean = {

+ 3 - 0
nearest.html

@@ -11,6 +11,9 @@
     <script src="https://unpkg.com/texzilla@1.0.2/TeXZilla.js"></script>
     <script src="database.js"></script>
     <script src="nearest.js"></script>
+    <script src="database-v2.js"></script>
+    <script src="metrics.js"></script>
+    <script src="convert.js"></script>
     <script lang="javascript">window.onload = () => { onPageLoad(); }</script>
 </head>