/** * @param {string} ratio z.B "10:9", " 9:8 " * @return {[number, number]} represents ration width vs height * */ export function parseRatio(ratio = "10:9") { const validInputPattern = /^(\d+)(:|\s+)(\d+)$/g; const separator = /:|\s+/; const cleanupInput = ratio.trim(); if ( validInputPattern.test(cleanupInput) ) { const r = cleanupInput.split(separator); return [Number.parseInt(r[0]), Number.parseInt(r[1])]; } else { throw new RangeError("[tv-size] Seitenverhältnis ist nicht gültig") } } /** * @return {number} diagonal * */ export function parseDiagonal (diagonal="") { const cleanupDiagonal = diagonal.trim().replaceAll(",", "."); const validPattern = /^(\d+)(\.(\d)*)*$/g; if (validPattern.test(cleanupDiagonal)) { const d = Number.parseFloat(cleanupDiagonal) ; if(d > 0) { return d; } } throw new RangeError("[tv-size] Ungültige Diagonal"); } /** * @return {[number, number]} [width, height] * */ export function calculateTvSize(ratio, diagonal) { const r = ratio[0] / ratio[1]; const h = diagonal / (Math.sqrt(r*r + 1)); const b = r*h; return [b,h]; } export function formatTvSize(width, height) { return [width.toFixed(2).replace(".", ","), height.toFixed(2).replace(".", ",")]; }