|
@@ -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));
|