import * as THREE from "three"; export function calculateGridMetrics(videoWidth, videoHeight, camera, distance, params, fitMargin) { const aspect = videoWidth / videoHeight; const cols = params.gridCols; const rows = Math.round(cols / aspect); const vFovRad = THREE.MathUtils.degToRad(camera.fov); const visibleHeight = 2 * Math.tan(vFovRad / 2) * distance; const visibleWidth = visibleHeight * camera.aspect; let baseCellSize = (visibleWidth * fitMargin) / cols; if (baseCellSize * rows > visibleHeight * fitMargin) { baseCellSize = (visibleHeight * fitMargin) / rows; } const spacing = baseCellSize * params.gridSpacing; return { cols, rows, count: cols * rows, cellSize: baseCellSize, spacing: spacing, width: cols * spacing, height: rows * spacing, }; }