weisse Kugeln

This commit is contained in:
chk
2026-06-10 16:13:34 +02:00
parent b16a293272
commit b1e4a8b0be

View File

@@ -73,8 +73,9 @@
<div class="legend"> <div class="legend">
<span><span class="dot" style="background:#22c55e"></span>Erkannt</span> <span><span class="dot" style="background:#22c55e"></span>Erkannt</span>
<span><span class="dot" style="background:#ef4444"></span>Nicht erkannt</span> <span><span class="dot" style="background:#ef4444"></span>Nicht erkannt</span>
<span><span class="dot circle" style="background:#3b82f6"></span>Erkannt, nur 2D</span> <span><span class="dot circle" style="background:#fde68a"></span>Erkannt (nur 2D)</span>
<span><span class="dot circle" style="background:#fbbf24"></span>Gemessen (3b)</span> <span><span class="dot circle" style="background:#fbbf24"></span>Gemessen (3b)</span>
<span><span class="dot circle" style="background:#3b82f6"></span>Fremd (3b)</span>
<span><span class="dot" style="background:#9b7bff"></span>Kamera</span> <span><span class="dot" style="background:#9b7bff"></span>Kamera</span>
</div> </div>
<span id="stats"></span> <span id="stats"></span>
@@ -249,6 +250,7 @@ function buildScene(data) {
// ── Gemessene Positionen von 3b (gelbe Punkte) ── // ── Gemessene Positionen von 3b (gelbe Punkte) ──
let nTriangulated = 0; let nTriangulated = 0;
let nUnknown = 0; // triangulierte Marker ohne Board-Eintrag
const measuredById = {}; const measuredById = {};
if (measuredMarkers?.markers?.length > 0) { if (measuredMarkers?.markers?.length > 0) {
@@ -275,6 +277,17 @@ function buildScene(data) {
} }
} }
// ── Blaue Kugeln: triangulierte Marker, die NICHT in boardMarkers stehen ──
// (unbekannte IDs oder andere Links keine Modellposition vorhanden)
const unknownTriangulated = measuredMarkers.markers.filter(m =>
!boardMarkers.some(bm => bm.id === m.marker_id)
);
for (const m of unknownTriangulated) {
nUnknown++;
const mpos = r2vArr(m.position_mm);
gMeasured.add(makeSphere(mpos, 0.0055, 0x3b82f6));
}
// Kamera-Frusta aus 3b // Kamera-Frusta aus 3b
if (measuredMarkers.cameras?.length > 0) { if (measuredMarkers.cameras?.length > 0) {
for (const c of measuredMarkers.cameras) { for (const c of measuredMarkers.cameras) {
@@ -288,14 +301,14 @@ function buildScene(data) {
} }
} }
// ── Blaue Kugeln: Board-Marker erkannt, aber nicht trianguliert ── // ── Helle Kugeln: Board-Marker erkannt, aber nicht trianguliert ──
// (nur 1 Kamera sah den Marker, oder 3b lief nicht) // (nur 1 Kamera sah den Marker, oder 3b lief nicht)
let nDetectedNotTriangulated = 0; let nDetectedNotTriangulated = 0;
for (const m of boardMarkers) { for (const m of boardMarkers) {
if (detectedIds.has(m.id) && !Object.hasOwn(measuredById, m.id)) { if (detectedIds.has(m.id) && !Object.hasOwn(measuredById, m.id)) {
nDetectedNotTriangulated++; nDetectedNotTriangulated++;
const pos = r2vArr(m.position); const pos = r2vArr(m.position);
gMeasured.add(makeSphere(pos, 0.0055, 0x3b82f6)); gMeasured.add(makeSphere(pos, 0.0055, 0xfde68a));
} }
} }
@@ -323,12 +336,11 @@ function buildScene(data) {
const triInfo = measuredMarkers === null const triInfo = measuredMarkers === null
? ' │ 3b: ' ? ' │ 3b: '
: ` │ 3b: ${nTriangulated}`; : ` │ 3b: ${nTriangulated}`;
const only2dInfo = nDetectedNotTriangulated > 0 const only2dInfo = nDetectedNotTriangulated > 0 ? ` │ nur 2D: ${nDetectedNotTriangulated}` : '';
? `nur 2D: ${nDetectedNotTriangulated}` const unknownInfo = nUnknown > 0 ? `fremd: ${nUnknown}` : '';
: '';
document.getElementById('stats').textContent = document.getElementById('stats').textContent =
`Erkannt ${nDetected}/${boardMarkers.length}${triInfo}${only2dInfo}` + `Erkannt ${nDetected}/${boardMarkers.length}${triInfo}${only2dInfo}${unknownInfo}` +
(camInfo ? ` │ RMS: ${camInfo}` : ''); (camInfo ? ` │ RMS: ${camInfo}` : '');
} }