Ver Fonte

nutikodu-web: Varv — spekter naitab reflekteeruvust (S/W), mitte valgusti-domineeritud tooreid kanaleid

ardo há 1 semana atrás
pai
commit
b49528bcd1
1 ficheiros alterados com 33 adições e 6 exclusões
  1. 33 6
      dev/nutikodu-web/static/app.js

+ 33 - 6
dev/nutikodu-web/static/app.js

@@ -721,13 +721,36 @@ function renderVarvTimeline(rows) {
   }).join("");
 }
 
+function varvReflectance(c) {
+  const d = varvCalibData && varvCalibData.dark;
+  const w = varvCalibData && varvCalibData.white;
+  if (!d || !w) return null;
+  const out = {};
+  for (const b of VARV_BANDS) {
+    const s = Number(c.bands[b[0]]) || 0;
+    const dv = Number(d[b[0]]) || 0;
+    const wv = Number(w[b[0]]) || 0;
+    out[b[0]] = (wv - dv) > 0 ? Math.max(0, (s - dv) / (wv - dv)) : 0;
+  }
+  return out;
+}
+
 function renderVarvSpectrum() {
   const el = document.getElementById("chart-varv-spectrum");
   if (!el || !varvLatest.length) { if (chartVarvSpectrum) chartVarvSpectrum.clear(); return; }
   const c = varvLatest[Math.min(varvSelected, varvLatest.length - 1)];
+  const refl = varvReflectance(c);
   const label = document.getElementById("varv-spectrum-label");
-  if (label) label.textContent = `— ${c.ts} · ${c.rgb_hex.toUpperCase()}`;
+  if (label) {
+    label.textContent = refl
+      ? `— ${c.ts} · ${((c.rgb_hex_cal || c.rgb_hex) || "").toUpperCase()} · reflekteeruvus %`
+      : `— ${c.ts} · ${c.rgb_hex.toUpperCase()} · toored kanalid (valgusti-domineeritud)`;
+  }
   if (!chartVarvSpectrum) chartVarvSpectrum = echarts.init(el, null, { renderer: "canvas" });
+  const data = VARV_BANDS.map((b) => ({
+    value: refl ? Math.round((refl[b[0]] || 0) * 1000) / 10 : (c.bands[b[0]] || 0),
+    itemStyle: { color: b[2] },
+  }));
   chartVarvSpectrum.setOption({
     grid: { left: 56, right: 16, top: 16, bottom: 32 },
     xAxis: {
@@ -737,17 +760,18 @@ function renderVarvSpectrum() {
     },
     yAxis: {
       type: "value",
-      axisLabel: { color: cssVar("--muted") },
+      max: refl ? 100 : undefined,
+      axisLabel: {
+        color: cssVar("--muted"),
+        formatter: refl ? "{value}%" : "{value}",
+      },
       splitLine: { lineStyle: { color: cssVar("--border") } },
     },
     tooltip: { trigger: "axis" },
     series: [{
       type: "bar",
       barWidth: "62%",
-      data: VARV_BANDS.map((b) => ({
-        value: c.bands[b[0]] || 0,
-        itemStyle: { color: b[2] },
-      })),
+      data,
     }],
   }, true);
   chartVarvSpectrum.resize();
@@ -871,6 +895,7 @@ async function setVarvPower(on) {
 
 // --- Värv: kalibreerimine (tume/valge; nupud ainult sisselogitult) ---
 let varvCalibView = false;
+let varvCalibData = null;
 let varvCalibWired = false;
 
 function varvBandSum(c) {
@@ -901,6 +926,7 @@ function initVarvCalibButtons() {
 }
 
 function renderVarvCalib(d) {
+  varvCalibData = d;
   const st = document.getElementById("varv-calib-status");
   if (st) {
     const haveD = !!d.dark;
@@ -919,6 +945,7 @@ function renderVarvCalib(d) {
       ? "Kuva kalibreeritud värvi"
       : "Kuva kalibreeritud värvi (vaja tume + valge)";
   }
+  renderVarvSpectrum();
 }
 
 async function loadVarvCalib() {