unbekannte Positionen
This commit is contained in:
@@ -73,6 +73,7 @@
|
|||||||
<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:#fbbf24"></span>Gemessen (3b)</span>
|
<span><span class="dot circle" style="background:#fbbf24"></span>Gemessen (3b)</span>
|
||||||
<span><span class="dot" style="background:#9b7bff"></span>Kamera</span>
|
<span><span class="dot" style="background:#9b7bff"></span>Kamera</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -258,24 +259,23 @@ function buildScene(data) {
|
|||||||
|
|
||||||
for (const m of a0markers) {
|
for (const m of a0markers) {
|
||||||
nTriangulated++;
|
nTriangulated++;
|
||||||
|
// Kein künstlicher Offset – Kugelmittelpunkt exakt an triangulierter Position
|
||||||
const mpos = r2vArr(m.position_mm);
|
const mpos = r2vArr(m.position_mm);
|
||||||
mpos.y += 0.004; // leicht über der Papier-Ebene
|
measuredById[m.marker_id] = mpos.clone();
|
||||||
measuredById[m.marker_id] = mpos;
|
|
||||||
|
|
||||||
// Gelber Punkt an gemessener Position
|
// Amber-Kugel an exakter gemessener Position
|
||||||
const dot = makeSphere(mpos, 0.0055, 0xfbbf24);
|
const dot = makeSphere(mpos, 0.0055, 0xfbbf24);
|
||||||
gMeasured.add(dot);
|
gMeasured.add(dot);
|
||||||
|
|
||||||
// Verbindungslinie zum Modell-Mittelpunkt
|
// Verbindungslinie: exakte Modellposition → exakte Messposition
|
||||||
const modelMarker = boardMarkers.find(bm => bm.id === m.marker_id);
|
const modelMarker = boardMarkers.find(bm => bm.id === m.marker_id);
|
||||||
if (modelMarker) {
|
if (modelMarker) {
|
||||||
const modelPos = r2vArr(modelMarker.position);
|
const modelPos = r2vArr(modelMarker.position);
|
||||||
modelPos.y += 0.002;
|
gMeasured.add(makeLine(modelPos, mpos.clone(), 0x78716c, 0.5));
|
||||||
gMeasured.add(makeLine(modelPos, mpos, 0x78716c, 0.5));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kamera-Frusta aus 3b (falls vorhanden, aktualisiert)
|
// 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) {
|
||||||
const cpos = r2vArr(c.position_mm);
|
const cpos = r2vArr(c.position_mm);
|
||||||
@@ -288,6 +288,17 @@ function buildScene(data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Blaue Kugeln: Board-Marker erkannt, aber nicht trianguliert ──
|
||||||
|
// (nur 1 Kamera sah den Marker, oder 3b lief nicht)
|
||||||
|
let nDetectedNotTriangulated = 0;
|
||||||
|
for (const m of boardMarkers) {
|
||||||
|
if (detectedIds.has(m.id) && !Object.hasOwn(measuredById, m.id)) {
|
||||||
|
nDetectedNotTriangulated++;
|
||||||
|
const pos = r2vArr(m.position);
|
||||||
|
gMeasured.add(makeSphere(pos, 0.0055, 0x3b82f6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Falls keine 3b-Daten: Kamera-Frusta aus camera_pose-Dateien
|
// Falls keine 3b-Daten: Kamera-Frusta aus camera_pose-Dateien
|
||||||
if (!measuredMarkers?.cameras?.length) {
|
if (!measuredMarkers?.cameras?.length) {
|
||||||
const boardCenter = r2v(490, 0, -27.3);
|
const boardCenter = r2v(490, 0, -27.3);
|
||||||
@@ -309,12 +320,15 @@ function buildScene(data) {
|
|||||||
return `${cp.cameraId}: ${rms}`;
|
return `${cp.cameraId}: ${rms}`;
|
||||||
}).join(' │ ');
|
}).join(' │ ');
|
||||||
|
|
||||||
const triInfo = nTriangulated > 0
|
const triInfo = measuredMarkers === null
|
||||||
? ` │ 3b: ${nTriangulated} trianguliert`
|
? ' │ 3b: –'
|
||||||
: (measuredMarkers === null ? ' │ 3b: –' : ' │ 3b: <2 Kameras');
|
: ` │ 3b: ${nTriangulated}`;
|
||||||
|
const only2dInfo = nDetectedNotTriangulated > 0
|
||||||
|
? ` │ nur 2D: ${nDetectedNotTriangulated}`
|
||||||
|
: '';
|
||||||
|
|
||||||
document.getElementById('stats').textContent =
|
document.getElementById('stats').textContent =
|
||||||
`Erkannt ${nDetected}/${boardMarkers.length}${triInfo}` +
|
`Erkannt ${nDetected}/${boardMarkers.length}${triInfo}${only2dInfo}` +
|
||||||
(camInfo ? ` │ RMS: ${camInfo}` : '');
|
(camInfo ? ` │ RMS: ${camInfo}` : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ body {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
background: var(--panel);
|
background: var(--panel);
|
||||||
border: 1px solid #334155;
|
border: 1px solid #334155;
|
||||||
border-radius: 0 8px 8px 8px;
|
border-left: none; /* kein Rahmen zur Tab-Seite → kein optischer Unterbruch */
|
||||||
|
border-radius: 8px; /* alle vier Ecken rund */
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 20px 24px;
|
padding: 20px 24px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user