{"id":1600,"date":"2026-03-21T10:02:36","date_gmt":"2026-03-21T09:02:36","guid":{"rendered":"https:\/\/www.openwhite.eu\/index.php\/video\/"},"modified":"2026-04-16T11:03:24","modified_gmt":"2026-04-16T09:03:24","slug":"video","status":"publish","type":"page","link":"https:\/\/www.openwhite.eu\/nl\/video\/","title":{"rendered":"Video"},"content":{"rendered":"\n\n\n\n  <meta charset=\"UTF-8\"\/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\n  <title>Videoberekeningen \/ projectie<\/title>\n  <style>\n    :root {\n      --panel: #121a31;\n      --panel-2: #18213d;\n      --text: #eef3ff;\n      --muted: #b7c3e0;\n      --accent: #4da3ff;\n      --accent-2: #7ec3ff;\n      --border: #2b3b69;\n      --ok: #79d28a;\n      --warn: #ffcf70;\n      --danger: #ff8d8d;\n      --radius: 16px;\n      --shadow: 0 10px 30px rgba(0, 0, 0, 0.25);\n      --input-bg: #0d1530;\n    }\n\n    * {\n      box-sizing: border-box;\n    }\n\n    body {\n      margin: 0;\n      font-family: Inter, Arial, Helvetica, sans-serif;\n      color: var(--text);\n      line-height: 1.45;\n      background: transparent;\n    }\n\n    .container {\n      max-width: 1320px;\n      margin: 0 auto;\n      padding: 24px;\n    }\n\n    .topbar {\n      display: flex;\n      gap: 16px;\n      align-items: center;\n      justify-content: space-between;\n      margin-bottom: 24px;\n      flex-wrap: wrap;\n    }\n\n    .title-wrap h1 {\n      margin: 0;\n      font-size: 30px;\n      font-weight: 800;\n      letter-spacing: -0.02em;\n    }\n\n    .title-wrap p {\n      margin: 6px 0 0;\n      color: var(--muted);\n    }\n\n    .grid {\n      display: grid;\n      grid-template-columns: repeat(12, 1fr);\n      gap: 18px;\n    }\n\n    .card {\n      grid-column: span 6;\n      background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(255, 255, 255, 0.01));\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      overflow: hidden;\n    }\n\n    .card-header {\n      padding: 18px 20px;\n      background: linear-gradient(180deg, rgba(77, 163, 255, 0.12), rgba(77, 163, 255, 0.04));\n      border-bottom: 1px solid var(--border);\n    }\n\n    .card-header h2 {\n      margin: 0;\n      font-size: 20px;\n    }\n\n    .card-header p {\n      margin: 6px 0 0;\n      color: var(--muted);\n      font-size: 14px;\n    }\n\n    .card-body {\n      padding: 20px;\n    }\n\n    .form-grid {\n      display: grid;\n      grid-template-columns: repeat(12, 1fr);\n      gap: 14px;\n    }\n\n    .field {\n      grid-column: span 6;\n      display: flex;\n      flex-direction: column;\n      gap: 7px;\n    }\n\n    .field.full {\n      grid-column: span 12;\n    }\n\n    .field label {\n      font-size: 14px;\n      color: var(--muted);\n    }\n\n    .field input,\n    .field select {\n      width: 100%;\n      padding: 12px 14px;\n      border-radius: 12px;\n      border: 1px solid var(--border);\n      background: var(--input-bg);\n      color: var(--text);\n      outline: none;\n      font-size: 15px;\n      appearance: none;\n    }\n\n    .field input:focus,\n    .field select:focus {\n      border-color: var(--accent);\n      box-shadow: 0 0 0 3px rgba(77, 163, 255, 0.16);\n    }\n\n    .results {\n      margin-top: 16px;\n      display: grid;\n      grid-template-columns: repeat(12, 1fr);\n      gap: 12px;\n    }\n\n    .result-box {\n      grid-column: span 4;\n      background: var(--panel-2);\n      border: 1px solid var(--border);\n      border-radius: 14px;\n      padding: 14px;\n    }\n\n    .result-box .k {\n      color: var(--muted);\n      font-size: 13px;\n      margin-bottom: 4px;\n    }\n\n    .result-box .v {\n      font-size: 22px;\n      font-weight: 800;\n      letter-spacing: -0.02em;\n    }\n\n    .note {\n      margin-top: 14px;\n      color: var(--muted);\n      font-size: 13px;\n      background: rgba(126, 195, 255, 0.06);\n      border: 1px solid rgba(126, 195, 255, 0.14);\n      padding: 12px 14px;\n      border-radius: 12px;\n    }\n\n    .badge {\n      display: inline-block;\n      padding: 5px 10px;\n      border-radius: 999px;\n      background: rgba(121, 210, 138, 0.12);\n      color: var(--ok);\n      border: 1px solid rgba(121, 210, 138, 0.2);\n      font-size: 12px;\n      font-weight: 700;\n      margin-top: 10px;\n    }\n\n    @media (max-width: 1100px) {\n      .card {\n        grid-column: span 12;\n      }\n    }\n\n    @media (max-width: 760px) {\n      .field,\n      .field.full,\n      .result-box {\n        grid-column: span 12;\n      }\n\n      .title-wrap h1 {\n        font-size: 24px;\n      }\n    }\n  <\/style>\n\n\n  <div class=\"container\">\n    <div class=\"topbar\">\n      <div class=\"title-wrap\">\n        <h1 id=\"appTitle\"><\/h1>\n        <p id=\"appSubtitle\"><\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"grid\">\n      <!-- 1 -->\n      <section class=\"card\">\n        <div class=\"card-header\">\n          <h2 id=\"throwTitle\"><\/h2>\n          <p id=\"throwSubtitle\"><\/p>\n        <\/div>\n        <div class=\"card-body\">\n          <div class=\"form-grid\">\n            <div class=\"field\">\n              <label id=\"throwImageWidthLabel\" for=\"throwImageWidth\"><\/label>\n              <input id=\"throwImageWidth\" type=\"number\" step=\"0.01\" min=\"0\" value=\"6.0\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"throwRatioLabel\" for=\"throwRatio\"><\/label>\n              <input id=\"throwRatio\" type=\"number\" step=\"0.01\" min=\"0\" value=\"1.60\"\/>\n            <\/div>\n          <\/div>\n\n          <div class=\"results\">\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"throwDistanceResultLabel\"><\/div>\n              <div class=\"v\" id=\"throwDistanceResult\">0 m<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\" id=\"throwNote\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- 2 -->\n      <section class=\"card\">\n        <div class=\"card-header\">\n          <h2 id=\"widthTitle\"><\/h2>\n          <p id=\"widthSubtitle\"><\/p>\n        <\/div>\n        <div class=\"card-body\">\n          <div class=\"form-grid\">\n            <div class=\"field\">\n              <label id=\"widthDistanceLabel\" for=\"widthDistance\"><\/label>\n              <input id=\"widthDistance\" type=\"number\" step=\"0.01\" min=\"0\" value=\"12.0\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"widthRatioLabel\" for=\"widthRatio\"><\/label>\n              <input id=\"widthRatio\" type=\"number\" step=\"0.01\" min=\"0\" value=\"1.60\"\/>\n            <\/div>\n          <\/div>\n\n          <div class=\"results\">\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"widthResultLabel\"><\/div>\n              <div class=\"v\" id=\"widthResult\">0 m<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\" id=\"widthNote\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- 3 -->\n      <section class=\"card\">\n        <div class=\"card-header\">\n          <h2 id=\"screenTitle\"><\/h2>\n          <p id=\"screenSubtitle\"><\/p>\n        <\/div>\n        <div class=\"card-body\">\n          <div class=\"form-grid\">\n            <div class=\"field\">\n              <label id=\"screenDiagonalLabel\" for=\"screenDiagonal\"><\/label>\n              <input id=\"screenDiagonal\" type=\"number\" step=\"1\" min=\"0\" value=\"550\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"screenAspectLabel\" for=\"screenAspect\"><\/label>\n              <select id=\"screenAspect\">\n                <option value=\"16:9\">16:9<\/option>\n                <option value=\"16:10\">16:10<\/option>\n                <option value=\"17:9\">17:9<\/option>\n                <option value=\"4:3\">4:3<\/option>\n                <option value=\"1.90:1\">1.90:1<\/option>\n                <option value=\"2.35:1\">2.35:1<\/option>\n              <\/select>\n            <\/div>\n          <\/div>\n\n          <div class=\"results\">\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"screenWidthResultLabel\"><\/div>\n              <div class=\"v\" id=\"screenWidthResult\">0 m<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"screenHeightResultLabel\"><\/div>\n              <div class=\"v\" id=\"screenHeightResult\">0 m<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"screenAreaResultLabel\"><\/div>\n              <div class=\"v\" id=\"screenAreaResult\">0 m\u00b2<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\" id=\"screenNote\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- 4 -->\n      <section class=\"card\">\n        <div class=\"card-header\">\n          <h2 id=\"brightnessTitle\"><\/h2>\n          <p id=\"brightnessSubtitle\"><\/p>\n        <\/div>\n        <div class=\"card-body\">\n          <div class=\"form-grid\">\n            <div class=\"field\">\n              <label id=\"brightnessLumensLabel\" for=\"brightnessLumens\"><\/label>\n              <input id=\"brightnessLumens\" type=\"number\" step=\"1\" min=\"0\" value=\"20000\"\/>\n            <\/div>\n\n            <div class=\"field\">\n              <label id=\"projectionTypeLabel\" for=\"projectionType\"><\/label>\n              <select id=\"projectionType\">\n                <option value=\"front\" selected=\"selected\">Frontprojectie<\/option>\n                <option value=\"rear\">Achterprojectie<\/option>\n              <\/select>\n            <\/div>\n\n            <div class=\"field\">\n              <label id=\"brightnessGainLabel\" for=\"brightnessGain\"><\/label>\n              <select id=\"brightnessGain\">\n                <option value=\"0.5\">0,5 \u2014 diffuse achterprojectie<\/option>\n                <option value=\"0.7\">0,7 \u2014 standaard achterprojectie<\/option>\n                <option value=\"0.8\">0,8 \u2014 grijs doek \/ contrast<\/option>\n                <option value=\"1.0\" selected=\"selected\">1,0 \u2014 standaard wit doek (front)<\/option>\n                <option value=\"1.2\">1,2 \u2014 versterkt frontdoek<\/option>\n                <option value=\"1.5\">1,5 \u2014 hoog-gain doek<\/option>\n                <option value=\"1.8\">1,8 \u2014 sterk directioneel doek<\/option>\n                <option value=\"2.0\">2,0 \u2014 specifiek gebruik<\/option>\n              <\/select>\n            <\/div>\n\n            <div class=\"field\">\n              <label id=\"lossFactorLabel\" for=\"lossFactor\"><\/label>\n              <select id=\"lossFactor\">\n                <option value=\"1.0\">1,0 \u2014 ideale omstandigheden<\/option>\n                <option value=\"0.8\" selected=\"selected\">0,8 \u2014 nette installatie<\/option>\n                <option value=\"0.6\">0,6 \u2014 re\u00eble eventomstandigheden<\/option>\n                <option value=\"0.4\">0,4 \u2014 moeilijke omstandigheden<\/option>\n              <\/select>\n            <\/div>\n\n            <div class=\"field\">\n              <label id=\"brightnessWidthLabel\" for=\"brightnessWidth\"><\/label>\n              <input id=\"brightnessWidth\" type=\"number\" step=\"0.01\" min=\"0\" value=\"8.0\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"brightnessHeightLabel\" for=\"brightnessHeight\"><\/label>\n              <input id=\"brightnessHeight\" type=\"number\" step=\"0.01\" min=\"0\" value=\"4.5\"\/>\n            <\/div>\n          <\/div>\n\n          <div class=\"results\">\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"brightnessLuxLabel\"><\/div>\n              <div class=\"v\" id=\"brightnessLuxResult\">0 lux<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"brightnessNitsLabel\"><\/div>\n              <div class=\"v\" id=\"brightnessNitsResult\">0 nits<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"brightnessFlLabel\"><\/div>\n              <div class=\"v\" id=\"brightnessFlResult\">0 fL<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"badge\" id=\"brightnessStatus\"><\/div>\n          <div class=\"note\" id=\"brightnessNote\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- 5 -->\n      <section class=\"card\">\n        <div class=\"card-header\">\n          <h2 id=\"blendTitle\"><\/h2>\n          <p id=\"blendSubtitle\"><\/p>\n        <\/div>\n        <div class=\"card-body\">\n          <div class=\"form-grid\">\n            <div class=\"field\">\n              <label id=\"blendProjectorsLabel\" for=\"blendProjectors\"><\/label>\n              <input id=\"blendProjectors\" type=\"number\" step=\"1\" min=\"1\" value=\"3\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"blendSingleWidthLabel\" for=\"blendSingleWidth\"><\/label>\n              <input id=\"blendSingleWidth\" type=\"number\" step=\"0.01\" min=\"0\" value=\"5.0\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"blendOverlapPercentLabel\" for=\"blendOverlapPercent\"><\/label>\n              <input id=\"blendOverlapPercent\" type=\"number\" step=\"0.1\" min=\"0\" value=\"15\"\/>\n            <\/div>\n          <\/div>\n\n          <div class=\"results\">\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"blendTotalWidthLabel\"><\/div>\n              <div class=\"v\" id=\"blendTotalWidthResult\">0 m<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"blendOverlapWidthLabel\"><\/div>\n              <div class=\"v\" id=\"blendOverlapWidthResult\">0 m<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"blendEffectiveGainLabel\"><\/div>\n              <div class=\"v\" id=\"blendEffectiveGainResult\">0 %<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\" id=\"blendNote\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- 6 -->\n      <section class=\"card\">\n        <div class=\"card-header\">\n          <h2 id=\"resolutionTitle\"><\/h2>\n          <p id=\"resolutionSubtitle\"><\/p>\n        <\/div>\n        <div class=\"card-body\">\n          <div class=\"form-grid\">\n            <div class=\"field\">\n              <label id=\"resProjectorsLabel\" for=\"resProjectors\"><\/label>\n              <input id=\"resProjectors\" type=\"number\" step=\"1\" min=\"1\" value=\"3\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"resSingleWidthPxLabel\" for=\"resSingleWidthPx\"><\/label>\n              <input id=\"resSingleWidthPx\" type=\"number\" step=\"1\" min=\"0\" value=\"1920\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"resHeightPxLabel\" for=\"resHeightPx\"><\/label>\n              <input id=\"resHeightPx\" type=\"number\" step=\"1\" min=\"0\" value=\"1200\"\/>\n            <\/div>\n            <div class=\"field\">\n              <label id=\"resOverlapPercentLabel\" for=\"resOverlapPercent\"><\/label>\n              <input id=\"resOverlapPercent\" type=\"number\" step=\"0.1\" min=\"0\" value=\"15\"\/>\n            <\/div>\n          <\/div>\n\n          <div class=\"results\">\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"resTotalWidthPxLabel\"><\/div>\n              <div class=\"v\" id=\"resTotalWidthPxResult\">0 px<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"resFinalRasterLabel\"><\/div>\n              <div class=\"v\" id=\"resFinalRasterResult\">0 \u00d7 0<\/div>\n            <\/div>\n            <div class=\"result-box\">\n              <div class=\"k\" id=\"resOverlapPxLabel\"><\/div>\n              <div class=\"v\" id=\"resOverlapPxResult\">0 px<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\" id=\"resolutionNote\"><\/div>\n        <\/div>\n      <\/section>\n    <\/div>\n  <\/div>\n\n  <script>\n    const texts = {\n      appTitle: \"Calculs vid\u00e9o \/ projection\",\n      appSubtitle: \"Module web autonome pour int\u00e9grer les principaux calculs vid\u00e9o de ton application.\",\n\n      throwTitle: \"Distance de projection\",\n      throwSubtitle: \"Calcule la distance \u00e0 partir de la largeur image et du ratio optique.\",\n      throwImageWidthLabel: \"Largeur image (m)\",\n      throwRatioLabel: \"Ratio de projection (throw ratio)\",\n      throwDistanceResultLabel: \"Distance de projection\",\n      throwNote: \"Formule utilis\u00e9e : distance = largeur image \u00d7 ratio de projection.\",\n\n      widthTitle: \"Largeur image\",\n      widthSubtitle: \"Calcule la largeur image disponible \u00e0 partir de la distance et du ratio.\",\n      widthDistanceLabel: \"Distance de projection (m)\",\n      widthRatioLabel: \"Ratio de projection\",\n      widthResultLabel: \"Largeur image\",\n      widthNote: \"Formule utilis\u00e9e : largeur image = distance \/ ratio.\",\n\n      screenTitle: \"Taille d\u2019\u00e9cran\",\n      screenSubtitle: \"D\u00e9termine largeur, hauteur et surface \u00e0 partir de la diagonale en cm et du format.\",\n      screenDiagonalLabel: \"Diagonale (cm)\",\n      screenAspectLabel: \"Format d\u2019image\",\n      screenWidthResultLabel: \"Largeur\",\n      screenHeightResultLabel: \"Hauteur\",\n      screenAreaResultLabel: \"Surface\",\n      screenNote: \"La diagonale est saisie en centim\u00e8tres, puis convertie en m\u00e8tres pour les calculs.\",\n\n      brightnessTitle: \"Luminosit\u00e9 \u00e9cran\",\n      brightnessSubtitle: \"Estimation \u00e0 partir des lumens projecteur, du type de projection, de la toile et des pertes r\u00e9elles.\",\n      brightnessLumensLabel: \"Lumens projecteur (ANSI \/ constructeur)\",\n      projectionTypeLabel: \"Type de projection\",\n      brightnessGainLabel: \"Type de toile \/ gain \u00e9cran\",\n      lossFactorLabel: \"Coefficient global de pertes\",\n      brightnessWidthLabel: \"Largeur image (m)\",\n      brightnessHeightLabel: \"Hauteur image (m)\",\n      brightnessLuxLabel: \"\u00c9clairement moyen\",\n      brightnessNitsLabel: \"Luminance estim\u00e9e\",\n      brightnessFlLabel: \"Foot-lamberts\",\n      brightnessNote: \"Calcul pratique : lux = lumens effectifs \u00d7 gain \/ surface. En r\u00e9troprojection, une correction automatique de 30 % est appliqu\u00e9e. Conversion : nits \u2248 lux \/ \u03c0 ; 1 fL = 3,426 nits.\",\n      brightnessGood: \"Bonne r\u00e9serve pour environnement assombri\",\n      brightnessMedium: \"Correct, \u00e0 valider selon contenu et ambiance\",\n      brightnessLow: \"Peut \u00eatre faible selon le contexte\",\n\n      blendTitle: \"Multi-projecteurs \/ overlap\",\n      blendSubtitle: \"Calcule la largeur totale utile apr\u00e8s recouvrement entre projecteurs.\",\n      blendProjectorsLabel: \"Nombre de projecteurs\",\n      blendSingleWidthLabel: \"Largeur image par projecteur (m)\",\n      blendOverlapPercentLabel: \"Overlap (%)\",\n      blendTotalWidthLabel: \"Largeur totale utile\",\n      blendOverlapWidthLabel: \"Largeur d\u2019overlap par jonction\",\n      blendEffectiveGainLabel: \"Part d\u2019image conserv\u00e9e\",\n      blendNote: \"Formule : largeur totale = (N \u00d7 largeur unitaire) - ((N - 1) \u00d7 overlap unitaire).\",\n\n      resolutionTitle: \"R\u00e9solution utile apr\u00e8s overlap\",\n      resolutionSubtitle: \"Calcule le raster final en edge blend horizontal.\",\n      resProjectorsLabel: \"Nombre de projecteurs\",\n      resSingleWidthPxLabel: \"Largeur par projecteur (px)\",\n      resHeightPxLabel: \"Hauteur (px)\",\n      resOverlapPercentLabel: \"Overlap (%)\",\n      resTotalWidthPxLabel: \"Largeur utile totale\",\n      resFinalRasterLabel: \"Raster final\",\n      resOverlapPxLabel: \"Overlap par jonction\",\n      resolutionNote: \"Largeur finale = (N \u00d7 largeur) - ((N - 1) \u00d7 overlap px).\"\n    };\n\n    function formatNumber(value, digits = 2) {\n      if (!isFinite(value)) return \"\u2014\";\n      return new Intl.NumberFormat(\"fr-BE\", {\n        minimumFractionDigits: 0,\n        maximumFractionDigits: digits\n      }).format(value);\n    }\n\n    function parseAspectRatio(value) {\n      if (value.includes(\":\")) {\n        const parts = value.split(\":\");\n        return Number(parts[0]) \/ Number(parts[1]);\n      }\n      if (value.includes(\"\/\")) {\n        const parts = value.split(\"\/\");\n        return Number(parts[0]) \/ Number(parts[1]);\n      }\n      return Number(value);\n    }\n\n    function setTexts() {\n      Object.keys(texts).forEach((key) => {\n        const el = document.getElementById(key);\n        if (el) {\n          el.textContent = texts[key];\n        }\n      });\n    }\n\n    function calcThrowDistance() {\n      const width = Number(document.getElementById(\"throwImageWidth\").value);\n      const ratio = Number(document.getElementById(\"throwRatio\").value);\n      const distance = width * ratio;\n      document.getElementById(\"throwDistanceResult\").textContent = `${formatNumber(distance, 2)} m`;\n    }\n\n    function calcImageWidth() {\n      const distance = Number(document.getElementById(\"widthDistance\").value);\n      const ratio = Number(document.getElementById(\"widthRatio\").value);\n      const width = ratio > 0 ? distance \/ ratio : NaN;\n      document.getElementById(\"widthResult\").textContent = `${formatNumber(width, 2)} m`;\n    }\n\n    function calcScreenSize() {\n      const diagonalCm = Number(document.getElementById(\"screenDiagonal\").value);\n      const aspectText = document.getElementById(\"screenAspect\").value;\n      const aspect = parseAspectRatio(aspectText);\n\n      const diagonalM = diagonalCm \/ 100;\n      const width = diagonalM * (aspect \/ Math.sqrt(1 + aspect * aspect));\n      const height = diagonalM * (1 \/ Math.sqrt(1 + aspect * aspect));\n      const area = width * height;\n\n      document.getElementById(\"screenWidthResult\").textContent = `${formatNumber(width, 2)} m`;\n      document.getElementById(\"screenHeightResult\").textContent = `${formatNumber(height, 2)} m`;\n      document.getElementById(\"screenAreaResult\").textContent = `${formatNumber(area, 2)} m\u00b2`;\n    }\n\n    function calcBrightness() {\n      const lumens = Number(document.getElementById(\"brightnessLumens\").value);\n      const projectionType = document.getElementById(\"projectionType\").value;\n      const gain = Number(document.getElementById(\"brightnessGain\").value);\n      const lossFactor = Number(document.getElementById(\"lossFactor\").value);\n      const width = Number(document.getElementById(\"brightnessWidth\").value);\n      const height = Number(document.getElementById(\"brightnessHeight\").value);\n\n      const area = width * height;\n\n      let effectiveLumens = lumens * lossFactor;\n\n      if (projectionType === \"rear\") {\n        effectiveLumens *= 0.7;\n      }\n\n      const lux = area > 0 ? (effectiveLumens * gain) \/ area : NaN;\n      const nits = lux \/ Math.PI;\n      const fl = nits \/ 3.426;\n\n      document.getElementById(\"brightnessLuxResult\").textContent = `${formatNumber(lux, 0)} lux`;\n      document.getElementById(\"brightnessNitsResult\").textContent = `${formatNumber(nits, 1)} nits`;\n      document.getElementById(\"brightnessFlResult\").textContent = `${formatNumber(fl, 1)} fL`;\n\n      let status = texts.brightnessLow;\n      if (fl >= 30) {\n        status = texts.brightnessGood;\n      } else if (fl >= 16) {\n        status = texts.brightnessMedium;\n      }\n\n      document.getElementById(\"brightnessStatus\").textContent = status;\n    }\n\n    function calcBlend() {\n      const n = Number(document.getElementById(\"blendProjectors\").value);\n      const singleWidth = Number(document.getElementById(\"blendSingleWidth\").value);\n      const overlapPercent = Number(document.getElementById(\"blendOverlapPercent\").value);\n\n      const overlapWidth = singleWidth * (overlapPercent \/ 100);\n      const totalWidth = (n * singleWidth) - ((n - 1) * overlapWidth);\n      const retainedPercent = (singleWidth > 0 && n > 0)\n        ? (totalWidth \/ (n * singleWidth)) * 100\n        : NaN;\n\n      document.getElementById(\"blendTotalWidthResult\").textContent = `${formatNumber(totalWidth, 2)} m`;\n      document.getElementById(\"blendOverlapWidthResult\").textContent = `${formatNumber(overlapWidth, 2)} m`;\n      document.getElementById(\"blendEffectiveGainResult\").textContent = `${formatNumber(retainedPercent, 1)} %`;\n    }\n\n    function calcResolution() {\n      const n = Number(document.getElementById(\"resProjectors\").value);\n      const widthPx = Number(document.getElementById(\"resSingleWidthPx\").value);\n      const heightPx = Number(document.getElementById(\"resHeightPx\").value);\n      const overlapPercent = Number(document.getElementById(\"resOverlapPercent\").value);\n\n      const overlapPx = widthPx * (overlapPercent \/ 100);\n      const totalWidthPx = Math.round((n * widthPx) - ((n - 1) * overlapPx));\n\n      document.getElementById(\"resTotalWidthPxResult\").textContent = `${formatNumber(totalWidthPx, 0)} px`;\n      document.getElementById(\"resFinalRasterResult\").textContent = `${formatNumber(totalWidthPx, 0)} \u00d7 ${formatNumber(heightPx, 0)}`;\n      document.getElementById(\"resOverlapPxResult\").textContent = `${formatNumber(overlapPx, 0)} px`;\n    }\n\n    function recalcAll() {\n      calcThrowDistance();\n      calcImageWidth();\n      calcScreenSize();\n      calcBrightness();\n      calcBlend();\n      calcResolution();\n    }\n\n    function bindInputs() {\n      document.querySelectorAll(\"input, select\").forEach((el) => {\n        el.addEventListener(\"input\", recalcAll);\n        el.addEventListener(\"change\", recalcAll);\n      });\n    }\n\n    setTexts();\n    bindInputs();\n    recalcAll();\n  <\/script>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Videoberekeningen \/ projectie 0 m 0 m 16:916:1017:94:31.90:12.35:1 0 m 0 m 0 m\u00b2 FrontprojectieAchterprojectie 0,5 \u2014 diffuse achterprojectie0,7 \u2014 standaard achterprojectie0,8 \u2014 grijs doek \/ contrast1,0 \u2014 standaard wit doek (front)1,2 \u2014 versterkt frontdoek1,5 \u2014 hoog-gain doek1,8 \u2014 sterk directioneel doek2,0 \u2014 specifiek gebruik 1,0 \u2014 ideale omstandigheden0,8 \u2014 nette installatie0,6 \u2014 re\u00eble eventomstandigheden0,4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-full-width.php","meta":{"footnotes":""},"class_list":["post-1600","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/pages\/1600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/comments?post=1600"}],"version-history":[{"count":1,"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/pages\/1600\/revisions"}],"predecessor-version":[{"id":1602,"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/pages\/1600\/revisions\/1602"}],"wp:attachment":[{"href":"https:\/\/www.openwhite.eu\/nl\/wp-json\/wp\/v2\/media?parent=1600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}