123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- const rawMetrics = (() => {
- const RMS = {
- name: "RMS Deviation (σ)",
- display: p => String.raw`
- \sigma\left(${p}\right) = \sqrt{I\left(${p}\right) - 2\vec{q}\cdot\vec{\mu}\left(${p}\right) + \left|\left|\vec{q}\right|\right|^2}
- `,
- evaluate: (data, target) => math.sqrt(data.inertia - 2 * vectorDot(data.mu.vector, target.vector) + target.sqMag),
- };
- const meanOfAngle = {
- name: "Mean of Angular Difference (Θ)",
- 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)),
- };
- const angleOfMean = {
- name: "Angular Difference of Mean (θ)",
- display: p => String.raw`
- \theta\left(${p}\right) = \cos^{-1}\left( \hat{q}\cdot\hat{\mu}\left(${p}\right) \right)
- `,
- evaluate: (data, target) => rad2deg * Math.acos(vectorDot(data.mu.unit, target.unit)),
- };
- const hue = {
- name: "Hue Difference of Mean (ϕ)",
- display: p => String.raw`
- \phi\left(${p}\right) = \angle \left(\vec{q}_{\perp}, \vec{\mu}\left(${p}\right)_{\perp} \right)
- `,
- evaluate: (data, target) => angleDiff(data.mu.hue, target.hue),
- }
- const euclidean = {
- name: "Euclidean Distance to Mean (δ)",
- display: p => String.raw`
- \delta\left(${p}\right) = \left|\left| \vec{q} - \vec{\mu}\left(${p}\right) \right|\right|
- `,
- evaluate: (data, target) => vectorDist(data.mu.vector, target.vector),
- };
- const chebyshev = {
- name: "Chebyshev Distance to Mean (Ч)",
- display: p => String.raw`
- Ч\left(${p}\right) = \max_{i} \left| \vec{\mu}\left(${p}\right)_i - \vec{q}_i \right|
- `,
- evaluate: (data, target) => Math.max(...data.mu.vector.map((x, i) => Math.abs(x - target.vector[i]))),
- };
- const inertia = {
- name: "Inertia (I)",
- display: p => String.raw`
- I\left(${p}\right) = \frac{1}{\left|${p}\right|} \sum_{p\in ${p}}{\left|\left|\vec{p}\right|\right|^2}
- `,
- evaluate: data => data.inertia,
- };
-
- const size = {
- name: "Size (N)",
- display: p => String.raw`
- N\left(${p}\right) = \left|${p}\right|
- `,
- evaluate: data => data.size,
- };
- return [RMS, meanOfAngle, angleOfMean, hue, euclidean, chebyshev, inertia, size];
- })();
- const applyMetrics = (data, target) => ({
- sigma: rawMetrics[0].evaluate(data, target),
- bigTheta: rawMetrics[1].evaluate(data, target),
- theta: rawMetrics[2].evaluate(data, target),
- phi: rawMetrics[3].evaluate(data, target),
- delta: rawMetrics[4].evaluate(data, target),
- ch: rawMetrics[5].evaluate(data, target),
- inertia: rawMetrics[6].evaluate(data),
- size: rawMetrics[7].evaluate(data),
- });
|