|
@@ -1,5 +1,6 @@
|
|
|
const metrics = {
|
|
|
sigma: { // RMS
|
|
|
+ option: "RMS Deviation (σ)",
|
|
|
displayName: p => String.raw`\sigma\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\sqrt{I\left(${p}\right) - 2\vec{q}\cdot\vec{\mu}\left(${p}\right) + \left|\left|\vec{q}\right|\right|^2}
|
|
@@ -7,6 +8,7 @@ const metrics = {
|
|
|
evaluate: (data, target) => Math.sqrt(data.inertia - 2 * vectorDot(data.mu.vector, target.vector) + target.sqMag),
|
|
|
},
|
|
|
bigTheta: { // mean of angle
|
|
|
+ option: "Mean of Angular Difference (Θ)",
|
|
|
displayName: p => String.raw`\Theta\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\cos^{-1}\left( \hat{q}\cdot\vec{\nu}\left(${p}\right) \right)
|
|
@@ -14,6 +16,7 @@ const metrics = {
|
|
|
evaluate: (data, target) => rad2deg * Math.acos(vectorDot(data.nu, target.unit)),
|
|
|
},
|
|
|
theta: { // angle of mean
|
|
|
+ option: "Angular Difference of Mean (θ)",
|
|
|
displayName: p => String.raw`\theta\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\cos^{-1}\left( \hat{q}\cdot\hat{\mu}\left(${p}\right) \right)
|
|
@@ -21,6 +24,7 @@ const metrics = {
|
|
|
evaluate: (data, target) => rad2deg * Math.acos(vectorDot(data.mu.unit, target.unit)),
|
|
|
},
|
|
|
phi: { // hue angle
|
|
|
+ option: "Hue Difference of Mean (ϕ)",
|
|
|
displayName: p => String.raw`\phi\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\angle \left(\vec{q}_{\perp}, \vec{\mu}\left(${p}\right)_{\perp} \right)
|
|
@@ -28,6 +32,7 @@ const metrics = {
|
|
|
evaluate: (data, target) => angleDiff(data.mu.hue, target.hue),
|
|
|
},
|
|
|
delta: { // euclidean
|
|
|
+ option: "Euclidean Distance to Mean (δ)",
|
|
|
displayName: p => String.raw`\delta\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\left|\left| \vec{q} - \vec{\mu}\left(${p}\right) \right|\right|
|
|
@@ -35,6 +40,7 @@ const metrics = {
|
|
|
evaluate: (data, target) => vectorDist(data.mu.vector, target.vector),
|
|
|
},
|
|
|
ch: { // chebyshev
|
|
|
+ option: "Chebyshev Distance to Mean (Ч)",
|
|
|
displayName: p => String.raw`Ч\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\max_{i} \left| \vec{\mu}\left(${p}\right)_i - \vec{q}_i \right|
|
|
@@ -42,6 +48,7 @@ const metrics = {
|
|
|
evaluate: (data, target) => Math.max(...data.mu.vector.map((x, i) => Math.abs(x - target.vector[i]))),
|
|
|
},
|
|
|
inertia: {
|
|
|
+ option: "Inertia (I)",
|
|
|
displayName: p => String.raw`I\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`
|
|
|
\frac{1}{\left|${p}\right|} \sum_{p\in ${p}}{\left|\left|\vec{p}\right|\right|^2}
|
|
@@ -49,6 +56,7 @@ const metrics = {
|
|
|
evaluate: data => data.inertia,
|
|
|
},
|
|
|
size: {
|
|
|
+ option: "Size (N)",
|
|
|
displayName: p => String.raw`N\left(${p}\right)`,
|
|
|
displayBody: p => String.raw`\left|${p}\right|`,
|
|
|
evaluate: data => data.size,
|