{"id":50275,"date":"2026-09-15T07:01:44","date_gmt":"2026-09-15T06:01:44","guid":{"rendered":"https:\/\/cctvacademy.be\/?page_id=50275"},"modified":"2026-10-04T11:17:44","modified_gmt":"2026-10-04T10:17:44","slug":"spatial-kernel-camsketch","status":"publish","type":"page","link":"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/","title":{"rendered":"Spatial Kernel CamSketch"},"content":{"rendered":"\t\t<div data-elementor-type=\"masteriyo-course-archive-page\" data-elementor-id=\"50275\" class=\"elementor elementor-50275\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1e3e959 e-flex e-con-boxed e-con e-parent\" data-id=\"1e3e959\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7ccd956 elementor-widget elementor-widget-html\" data-id=\"7ccd956\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"nl-BE\">\n<head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<meta name=\"theme-color\" content=\"#102f37\"><meta name=\"color-scheme\" content=\"light\">\n<meta name=\"description\" content=\"Ontdek CamSketch Spatial Kernel: 2D-geometrie, cameraposities, zichtlijnen en dekking. Start de afzonderlijke Spatial Kernel onderaan de pagina.\"><title>CamSketch Spatial Kernel | CCTV Academy<\/title>\n<style>\n:root{--paper:#f7f2e7;--cream:#fffcf4;--petrol:#102f37;--deep:#071d25;--ink:#18343b;--muted:#637373;--brass:#b5823d;--gold:#e5c58b;--line:#e1d6c0;--mist:#eae0ca;--green:#398474;--warn:#ba6642}\n*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:94px}body{margin:0;background:var(--paper);color:var(--ink);font-family:'Trebuchet MS',Arial,sans-serif}button,input{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}img{max-width:100%}h1,h2,h3,p{margin-top:0}h1,h2,.serif{font-family:Georgia,'Times New Roman',serif;letter-spacing:-.047em}h1{font-size:clamp(45px,5vw,74px);line-height:1.065}h2{font-size:clamp(35px,4vw,53px);line-height:1.12}p{line-height:1.78}small{font-size:12px}[hidden]{display:none!important}a:focus-visible,button:focus-visible,input:focus-visible{outline:3px solid #dcab5c;outline-offset:3px}.wrap{width:min(1190px,calc(100% - 48px));margin:auto}.skip{position:absolute;top:-100px;left:12px;z-index:100;padding:13px;background:white}.skip:focus{top:12px}\n.header{background:var(--cream);border-bottom:1px solid #dfd3bc;position:relative;z-index:10}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:85px}.brand{display:flex;align-items:center;gap:12px;min-width:0}.brand-gear{display:grid;place-items:center;color:var(--brass);font-size:30px;border:1px solid #b99465;width:45px;height:45px;border-radius:50%;flex-shrink:0}.brand-words{font-size:14px;font-weight:900;letter-spacing:.18em;white-space:nowrap}.brand-words small{display:block;color:#99875e;font-size:9px;letter-spacing:.18em;margin-top:4px}.head-actions{display:flex;gap:8px;align-items:center;justify-content:flex-end;flex-wrap:wrap}.head-link{min-height:40px;display:inline-grid;place-items:center;border:1px solid #d0bea2;color:var(--deep);border-radius:7px;padding:8px 13px;white-space:nowrap;font-size:11px;font-weight:900;letter-spacing:.07em;transition:transform .2s}.head-link:hover{transform:translateY(-2px)}.head-login{color:#fff;background:var(--petrol);border-color:var(--petrol)}.langs{display:flex;gap:3px;border-left:1px solid #dccdb4;padding-left:11px}.lang{background:transparent;border:1px solid transparent;border-radius:5px;min-width:36px;height:35px;font-size:10px;font-weight:900;color:#6a7673;letter-spacing:.06em}.lang[aria-pressed=true]{border-color:#c9aa77;background:#f2dfbe;color:#513a1d}\n.eyebrow{display:inline-flex;align-items:center;gap:11px;color:#d9ad70;letter-spacing:.17em;font-weight:900;text-transform:uppercase;font-size:10px}.eyebrow:before{content:\"\";height:1px;width:27px;background:currentColor}.eyebrow.dark{color:#99743f}.btn{min-height:51px;padding:14px 20px;display:inline-flex;align-items:center;justify-content:center;gap:10px;border-radius:6px;border:1px solid #c49b5a;color:#29261f;background:linear-gradient(110deg,#e4c896,#bc8e51);font-size:12px;font-weight:900;letter-spacing:.03em;box-shadow:0 10px 22px #00000016;transition:transform .2s}.btn:hover{transform:translateY(-2px)}.btn.outline{background:transparent;border-color:#c3d0c4;color:#fff;box-shadow:none}.btn.white{background:var(--cream);color:var(--petrol);border-color:var(--cream)}.btn.small{min-height:42px;padding:10px 15px}.actions{display:flex;flex-wrap:wrap;gap:11px}\n.hero{position:relative;overflow:hidden;color:#fff;background:radial-gradient(circle at 76% 40%,#40636275,transparent 39%),linear-gradient(125deg,#102f37,#071c25 75%)}.hero:before{content:\"\";position:absolute;inset:0;opacity:.065;background:linear-gradient(90deg,#fff 1px,transparent 1px),linear-gradient(#fff 1px,transparent 1px);background-size:57px 57px}.hero:after{content:\"\";width:540px;height:540px;position:absolute;right:-160px;top:-320px;border:1px solid #e7bb8060;border-radius:50%;box-shadow:0 0 0 63px #d2a66015,0 0 0 124px #d2a66008;pointer-events:none}.hero-grid{display:grid;grid-template-columns:minmax(0,1.06fr) minmax(0,.94fr);gap:65px;align-items:center;padding:85px 0 90px;position:relative;z-index:2}.hero h1{max-width:700px;color:#fff;margin:22px 0 27px}.hero h1 span{display:block;color:#f0d2a0}.hero-lead{font-size:16px;color:#c5d1cc;max-width:580px}.hero .actions{margin:30px 0}.micro{font-size:10px;letter-spacing:.15em;font-weight:900;color:#a8c0b7;border-top:1px solid #ffffff27;padding-top:20px;margin-top:28px}.blueprint{min-height:427px;position:relative;background:radial-gradient(circle at 45% 45%,#f2eddc,#d1d9cd 82%);border:1px solid #bca376;border-radius:160px 160px 15px 15px;padding:29px 18px 20px;box-shadow:0 31px 80px #010e17a8;overflow:hidden}.blueprint:before{content:\"\";inset:0;position:absolute;opacity:.37;background:linear-gradient(90deg,#5b78761d 1px,transparent 1px),linear-gradient(#5b78761d 1px,transparent 1px);background-size:23px 23px}.blueprint svg{position:relative;width:100%;height:332px;display:block;z-index:2;filter:drop-shadow(0 9px 11px #051c2028)}.blueprint-bottom{position:relative;z-index:2;display:flex;justify-content:space-between;gap:12px;border-top:1px solid #48726a66;padding-top:14px;font-size:10px;font-weight:900;letter-spacing:.07em;color:#385f5d}.blueprint .seal{position:absolute;right:17px;top:20px;z-index:4;display:grid;place-items:center;border:1px solid #af8342;border-radius:50%;width:79px;height:79px;text-align:center;font-weight:900;color:#926b36;font-size:10px;transform:rotate(12deg);box-shadow:inset 0 0 0 5px #d4c89d}\n.subnav{background:#eae0cd;border-bottom:1px solid #d2c1a5}.subnav-row{display:flex;gap:3px;overflow-x:auto;padding:10px 0;scrollbar-width:thin}.subnav a{flex-shrink:0;padding:11px 15px;border-radius:4px;color:#556b67;font-size:11px;font-weight:900}.subnav a:hover{background:#faf7eb}.strip{background:#e7dac3;border-bottom:1px solid #d4be99}.strip-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#cfbd9d}.strip-grid div{background:#e7dac3;padding:23px}.strip-grid b{display:block;color:#1e3d3b;font:700 20px Georgia,serif}.strip-grid small{color:#87765a}\n.section{padding:94px 0}.section-header{max-width:810px;margin-bottom:42px}.section-header p{color:var(--muted);max-width:760px}.section h2 span{color:#a0743d}.cards-five{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px}.info-card{position:relative;min-width:0;border:1px solid #d9ccb4;background:#fffdf7;padding:25px 18px 22px;border-radius:9px;box-shadow:0 7px 20px #2e25120a}.info-card .code{display:inline-block;padding:7px 9px;border-radius:4px;background:var(--petrol);color:#e5ca9e;font-size:10px;font-weight:900;letter-spacing:.09em;margin-bottom:19px}.info-card h3{font:700 21px Georgia,serif;color:var(--petrol);margin-bottom:12px}.info-card p{font-size:12px;color:#6c746c;margin-bottom:0;overflow-wrap:anywhere}.procedures{background:#ede5d6}.process-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.process-item{position:relative;border:1px solid #cab797;background:#f9f4e9;padding:26px 18px;border-radius:8px;min-width:0}.process-item .step-id{font-size:11px;letter-spacing:.15em;font-weight:900;color:#9a6933;display:block;margin-bottom:24px}.process-item h3{font:700 21px Georgia,serif;color:var(--petrol);margin-bottom:8px}.process-item p{font-size:12px;color:#63716d;margin:0}.results{background:var(--petrol);color:white;position:relative}.results:before{content:\"\";position:absolute;inset:0;background:linear-gradient(#ffffff0a 1px,transparent 1px),linear-gradient(90deg,#ffffff0a 1px,transparent 1px);background-size:57px 57px;opacity:.38}.results .wrap{position:relative}.results h2{color:#fff}.results h2 span{color:#e9c68d}.results .section-header p{color:#b8ccc6}.result-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.result-card{min-height:184px;border:1px solid #e2cdab38;border-radius:9px;padding:25px 23px;background:#ffffff0d}.result-card small{color:#dfbc81;letter-spacing:.17em;font-weight:900;font-size:11px}.result-card h3{font:700 23px Georgia,serif;margin:14px 0 10px;color:white}.result-card p{font-size:13px;color:#bacdc6;margin:0}\n\n.formula{display:grid;grid-template-columns:1fr .95fr;gap:65px;align-items:center}.formula-art{padding:35px;border-radius:12px;border:1px solid #cfbc9c;background:#fdfaf0}.formula-art svg{display:block;width:100%;max-height:335px}.check-method{display:grid;gap:12px;margin:28px 0}.check-method div{display:grid;grid-template-columns:37px 1fr;align-items:center;gap:15px;border-bottom:1px solid #dfd5c3;padding-bottom:13px;color:#61706a;font-size:14px}.check-method b{width:35px;height:35px;border-radius:50%;background:#e9d8bc;display:grid;place-items:center;color:#7e572f}.math-line{background:#ebe1ce;border-left:4px solid #b98a4a;padding:18px;font-size:12px;font-weight:900;letter-spacing:.03em;overflow-wrap:anywhere}.footnote{font-size:12px;color:#7c8173;margin-top:15px}\n.warning{background:#efdfc7;padding:55px 0;border-top:1px solid #d6b47f;border-bottom:1px solid #d6b47f}.warning-grid{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:28px}.alert-mark{font:700 32px Georgia,serif;color:#ae663e;border:2px solid #ae663e;border-radius:50%;width:60px;height:60px;display:grid;place-items:center}.warning h2{margin:13px 0 18px}.warning p{max-width:770px;color:#6c6659}.model{border:1px solid #b19d78;background:#fbf5e9;padding:20px 27px;text-align:center}.model small{display:block;color:#a27a44;letter-spacing:.12em;font-size:10px;font-weight:900}.model strong{display:block;font:700 50px Georgia,serif;color:#1b4141}\n.repeat{padding:65px 0}.repeat-card{border:1px solid #d7c5a5;border-radius:10px;padding:40px;display:flex;align-items:center;justify-content:space-between;gap:30px;background:#fffaf0}.repeat-card h2{margin:13px 0}.repeat-card p{max-width:670px;color:var(--muted)}.repeat-code{flex-shrink:0;border:1px solid #a4b59b;background:#e2e9d7;padding:20px;color:#52735a;font-weight:900;letter-spacing:.15em;font-size:11px;text-align:center}.closing{background:radial-gradient(circle at 75% 10%,#3c626860,transparent 42%),linear-gradient(125deg,#102f37,#071c25 70%);color:#fff;padding:80px 0}.closing-inner{display:grid;grid-template-columns:1fr auto;align-items:center;gap:36px}.closing h2{color:#fff;margin:17px 0 24px}.closing h2 span{color:#e5c58b}.closing p{max-width:730px;color:#bdd1c8}.closing-gear{font:700 130px Georgia,serif;color:#d6ac7435}.closing-brand-visual{position:relative;display:grid;place-items:center;min-width:192px;max-width:270px}.closing-brand-visual img{position:absolute;z-index:2;max-width:220px;max-height:135px;object-fit:contain;filter:drop-shadow(0 12px 24px #0005)}.footer{background:#081a22;color:#94a99d;padding:25px 0}.footer-inner{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}.footer small{font-size:11px}.footer a{color:#dec391;font-size:11px;font-weight:900}\n@media(max-width:1020px){.hero-grid{grid-template-columns:1fr 1fr;gap:27px}.cards-five,.process-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.warning-grid{grid-template-columns:auto 1fr}.model{grid-column:2;justify-self:start}.formula{gap:30px}.blueprint{min-height:365px;padding-top:35px}.blueprint svg{height:280px}}\n@media(max-width:740px){.header-inner{padding:16px 0;min-height:80px;flex-wrap:wrap;gap:14px}.head-actions{justify-content:flex-start;width:100%}.brand-words{font-size:13px}.hero-grid{grid-template-columns:1fr;padding:55px 0 60px}.hero h1{font-size:clamp(42px,9vw,58px)}.blueprint{max-width:530px;width:100%;min-height:370px;margin:auto}.section{padding:68px 0}.cards-five,.process-grid,.result-grid{grid-template-columns:1fr 1fr}.formula{grid-template-columns:1fr}.repeat-card{display:block}.repeat-code{display:inline-block}.closing-inner{grid-template-columns:1fr}.closing-gear{display:none}.strip-grid{grid-template-columns:1fr 1fr}.warning-grid{grid-template-columns:1fr}.model{grid-column:auto}.model{justify-self:start}}\n@media(max-width:480px){.wrap{width:calc(100% - 30px)}.brand-gear{width:38px;height:38px}.brand-words{font-size:12px;letter-spacing:.12em}.header-inner{gap:10px}.head-actions{gap:6px}.head-link{min-height:38px;font-size:10px;padding:7px 10px}.langs{padding-left:7px}.lang{min-width:32px}.hero h1{font-size:clamp(39px,10.7vw,50px)}.actions{flex-direction:column}.actions .btn{width:100%}.blueprint{padding:22px 10px 15px;min-height:300px}.blueprint svg{height:245px}.blueprint .seal{height:55px;width:55px;font-size:8px;right:9px}.cards-five,.process-grid,.result-grid,.strip-grid{grid-template-columns:1fr}.formula-art{padding:14px}.repeat-card{padding:25px}.warning h2{font-size:35px}.closing{padding:60px 0}}\n@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}\n<\/style>\n<\/head>\n<body>\n<a class=\"skip\" href=\"#main\" data-i18n=\"skip\">Ga naar inhoud<\/a>\n<header class=\"header\"><div class=\"wrap header-inner\"><a href=\"https:\/\/cctvacademy.be\/nl\/\" class=\"brand\" aria-label=\"CCTV Academy\"><span class=\"brand-gear\" aria-hidden=\"true\">\u2699<\/span><span class=\"brand-words\">CCTV ACADEMY<small>CAMSKETCH \/ SPATIAL KERNEL<\/small><\/span><\/a><div class=\"head-actions\"><a class=\"head-link\" href=\"https:\/\/cctvacademy.be\/nl\/\" data-i18n=\"home\">HOME<\/a><a class=\"head-link head-login\" href=\"https:\/\/cctvacademy.be\/nl\/login\/\" data-i18n=\"login\">LOGIN<\/a><div class=\"langs\" role=\"group\" aria-label=\"Kies een taal\"><button type=\"button\" class=\"lang\" data-lang=\"nl\" aria-pressed=\"true\">NL<\/button><button type=\"button\" class=\"lang\" data-lang=\"fr\" aria-pressed=\"false\">FR<\/button><button type=\"button\" class=\"lang\" data-lang=\"en\" aria-pressed=\"false\">EN<\/button><button type=\"button\" class=\"lang\" data-lang=\"de\" aria-pressed=\"false\">DE<\/button><\/div><\/div><\/div><\/header>\n<main id=\"main\">\n<section class=\"hero\" id=\"overzicht\"><div class=\"wrap hero-grid\"><div><span class=\"eyebrow\" data-i18n=\"eyebrow\">CAMSKETCH \u00b7 COMPUTATIONAL CCTV ANALYSIS<\/span><h1><span style=\"display:inline;color:#fff\" data-i18n=\"hero1\">Een plattegrond.<\/span><span data-i18n=\"hero2\">Inzicht in zichtlijnen.<\/span><\/h1><p class=\"hero-lead\" data-i18n=\"heroP\">Spatial Kernel gebruikt de geometrie van een 2D-plan om theoretische en zichtbaar bereikbare cameradekking te beoordelen. Analyseer de invloed van cameraposities, muren, obstakels en doelzones.<\/p><div class=\"actions\"><a class=\"btn\" href=\"#spatial-kernel-start\"><span data-i18n=\"demoJump\">Open Spatial Kernel<\/span> \u2197<\/a><a class=\"btn outline\" href=\"https:\/\/cctvacademy.be\/nl\/camsketch-v492\/\" target=\"_blank\" rel=\"noopener\"><span data-i18n=\"openCam\">Open CamSketch<\/span> \u2197<\/a><\/div><div class=\"micro\" data-i18n=\"heroSub\">GEOMETRISCHE UITLEG \u00b7 LIVE SPATIAL KERNEL STAAT ONDERAAN<\/div><\/div>\n<div class=\"blueprint\"><span class=\"seal\">CAM<br>SKETCH<br>V0.1<\/span><svg viewBox=\"0 0 470 365\" role=\"img\" aria-label=\"Schematische bovenaanzicht met cameragezichtsveld en doelzone\"><defs><pattern id=\"heroGrid\" width=\"25\" height=\"25\" patternUnits=\"userSpaceOnUse\"><path d=\"M25 0H0V25\" fill=\"none\" stroke=\"#52716c\" stroke-opacity=\".19\"\/><\/pattern><\/defs><rect x=\"21\" y=\"29\" width=\"426\" height=\"299\" rx=\"2\" fill=\"url(#heroGrid)\" stroke=\"#315b60\" stroke-width=\"2\"\/><path d=\"M210 30V175H315V329\" fill=\"none\" stroke=\"#25536a\" stroke-width=\"6\"\/><path d=\"M75 188 397 69 397 310Z\" fill=\"#8fbdb0\" fill-opacity=\".39\" stroke=\"#487d7a\" stroke-width=\"1.5\" stroke-dasharray=\"5 6\"\/><rect x=\"327\" y=\"143\" width=\"86\" height=\"120\" rx=\"5\" fill=\"#d9b981\" fill-opacity=\".54\" stroke=\"#ab7b3c\" stroke-width=\"2\" stroke-dasharray=\"6 4\"\/><g transform=\"translate(75 188)\"><circle r=\"16\" fill=\"#e8e2cf\" stroke=\"#b3794a\" stroke-width=\"3\"\/><path d=\"M0 0H32\" stroke=\"#a46c3a\" stroke-width=\"3\"\/><circle r=\"5\" fill=\"#b96c4c\"\/><\/g><g stroke=\"#ba9150\" stroke-width=\"1.2\" stroke-dasharray=\"4 6\"><path d=\"M75 188 327 143M75 188 413 263\"\/><\/g><g fill=\"#2e6758\"><circle cx=\"351\" cy=\"164\" r=\"4\"\/><circle cx=\"369\" cy=\"193\" r=\"4\"\/><circle cx=\"383\" cy=\"245\" r=\"4\"\/><\/g><text x=\"38\" y=\"317\" font-size=\"10\" letter-spacing=\"1.5\" font-weight=\"bold\" fill=\"#6c806d\">CAM 01 \u00b7 TOP VIEW<\/text><text x=\"318\" y=\"42\" font-size=\"10\" letter-spacing=\"1\" font-weight=\"bold\" fill=\"#92693e\">Z \/ 01<\/text><\/svg><div class=\"blueprint-bottom\"><span data-i18n=\"heroDiagram\">RUIMTELIJKE BLAUWDRUK<\/span><span data-i18n=\"heroMark\">ZICHTMODEL \/ 2D<\/span><\/div><\/div><\/div><\/section>\n<nav class=\"subnav\" aria-label=\"Paginaonderdelen\"><div class=\"wrap subnav-row\"><a href=\"#overzicht\" data-i18n=\"nav0\">Overzicht<\/a><a href=\"#invoer\" data-i18n=\"nav1\">Invoer<\/a><a href=\"#werkwijze\" data-i18n=\"nav2\">Werkwijze<\/a><a href=\"#resultaten\" data-i18n=\"nav3\">Resultaten<\/a><a href=\"#spatial-kernel-start\" data-i18n=\"nav4\">Spatial Kernel<\/a><a href=\"#beperkingen\" data-i18n=\"nav5\">Beperkingen<\/a><a href=\"#camsketch\" data-i18n=\"nav6\">CamSketch<\/a><\/div><\/nav>\n<div class=\"strip\"><div class=\"wrap strip-grid\"><div><b data-strip=\"0\">5 invoertypen<\/b><small>CAMSKETCH \/ INPUT<\/small><\/div><div><b data-strip=\"1\">2D-geometrie<\/b><small>PLAN \/ 2D<\/small><\/div><div><b data-strip=\"2\">Zichtlijntoets<\/b><small>FOV \/ OCCLUSION<\/small><\/div><div><b data-strip=\"3\">Herhaalbaar model<\/b><small>REPEATABLE<\/small><\/div><\/div><\/div>\n<section class=\"section\" id=\"invoer\"><div class=\"wrap\"><div class=\"section-header\"><span class=\"eyebrow dark\" data-i18n=\"s1K\">01 \/ BOUWSTENEN<\/span><h2><span data-i18n=\"s1T\">Vijf onderdelen.<\/span><br><span data-i18n=\"s1T2\">E\u00e9n overzichtelijk plan.<\/span><\/h2><p data-i18n=\"s1P\">Spatial Kernel begint bij de meetbare onderdelen van je CamSketch-plattegrond. Samen bepalen ze welke delen theoretisch in beeld komen en welke werkelijk zichtbaar blijven.<\/p><\/div><div class=\"cards-five\" id=\"inputCards\"><article class=\"info-card\"><span class=\"code\">CAM<\/span><h3>Camera\u2019s<\/h3><p>Positie, kijkrichting, horizontale openingshoek (HFOV) en maximaal bereik.<\/p><\/article><article class=\"info-card\"><span class=\"code\">GEO<\/span><h3>Muren<\/h3><p>Structurele elementen die een zichtlijn kunnen onderbreken.<\/p><\/article><article class=\"info-card\"><span class=\"code\">OBS<\/span><h3>Obstakels<\/h3><p>Objecten die de camera gedeeltelijk of volledig afschermen.<\/p><\/article><article class=\"info-card\"><span class=\"code\">ZONE<\/span><h3>Doelzones<\/h3><p>Gebieden waarvan je de zichtbare dekking wilt onderzoeken.<\/p><\/article><article class=\"info-card\"><span class=\"code\">PER<\/span><h3>Terreingrens<\/h3><p>De grens waarbinnen je het CCTV-ontwerp beoordeelt.<\/p><\/article><\/div><\/div><\/section>\n<section class=\"section procedures\" id=\"werkwijze\"><div class=\"wrap\"><div class=\"section-header\"><span class=\"eyebrow dark\" data-i18n=\"s2K\">02 \/ GEOMETRISCHE WERKWIJZE<\/span><h2><span data-i18n=\"s2T\">Van camerastandpunt<\/span><br><span data-i18n=\"s2T2\">naar zichtbaar gebied.<\/span><\/h2><p data-i18n=\"s2P\">Eerst wordt het theoretische gezichtsveld opgebouwd. Vervolgens worden vrije en geblokkeerde zichtlijnen onderzocht.<\/p><\/div><div class=\"process-grid\" id=\"processCards\"><article class=\"process-item\"><span class=\"step-id\">A<\/span><h3>Positie<\/h3><p>Waar bevindt de camera zich?<\/p><\/article><article class=\"process-item\"><span class=\"step-id\">B<\/span><h3>Richting<\/h3><p>Waar kijkt de camera naartoe?<\/p><\/article><article class=\"process-item\"><span class=\"step-id\">C<\/span><h3>HFOV<\/h3><p>Hoe breed is de horizontale openingshoek?<\/p><\/article><article class=\"process-item\"><span class=\"step-id\">D<\/span><h3>Bereik<\/h3><p>Tot hoever wordt het zicht onderzocht?<\/p><\/article><article class=\"process-item\"><span class=\"step-id\">E<\/span><h3>Zichtmodel<\/h3><p>Welke punten blijven geometrisch zichtbaar?<\/p><\/article><\/div><\/div><\/section>\n<section class=\"section results\" id=\"resultaten\"><div class=\"wrap\"><div class=\"section-header\"><span class=\"eyebrow\" data-i18n=\"s3K\">03 \/ ANALYSE-UITKOMSTEN<\/span><h2><span data-i18n=\"s3T\">De meetresultaten<\/span><br><span data-i18n=\"s3T2\">in \u00e9\u00e9n oogopslag.<\/span><\/h2><p data-i18n=\"s3P\">Het model maakt onderscheid tussen het nominale gezichtsveld en de delen die na afscherming werkelijk binnen de zichtlijn vallen.<\/p><\/div><div class=\"result-grid\" id=\"outputCards\"><article class=\"result-card\"><small>01<\/small><h3>Dekkingspercentage<\/h3><p>Het aandeel onderzochte meetpunten in de doelzone dat zichtbaar is.<\/p><\/article><article class=\"result-card\"><small>02<\/small><h3>Theoretisch FOV<\/h3><p>Het nominale gezichtsveld volgens richting, openingshoek en bereik.<\/p><\/article><article class=\"result-card\"><small>03<\/small><h3>Zichtblokkering<\/h3><p>De invloed van muren en obstakels op het bruikbare zicht.<\/p><\/article><article class=\"result-card\"><small>04<\/small><h3>Blinde zones<\/h3><p>Meetpunten die vanuit de huidige camerapositie niet zichtbaar zijn.<\/p><\/article><article class=\"result-card\"><small>05<\/small><h3>Buiten terreingrens<\/h3><p>Inzicht in een zichtbaar gebied dat buiten de gekozen terreingrens valt.<\/p><\/article><article class=\"result-card\"><small>LIVE<\/small><h3>Herberekening<\/h3><p>Het geometrische resultaat opnieuw berekenen na een wijziging.<\/p><\/article><\/div><\/div><\/section>\n<section class=\"section\" id=\"formule\"><div class=\"wrap formula\"><div class=\"formula-art\"><svg viewBox=\"0 0 490 355\" role=\"img\" aria-label=\"Schematische camera met zichtveld en gedeeltelijk afgeschermde zone\"><defs><pattern id=\"fGrid\" width=\"25\" height=\"25\" patternUnits=\"userSpaceOnUse\"><path d=\"M25 0H0V25\" fill=\"none\" stroke=\"#9cb9a8\" stroke-width=\".7\"\/><\/pattern><\/defs><rect width=\"490\" height=\"355\" rx=\"7\" fill=\"url(#fGrid)\"\/><path d=\"M48 176 431 57V310Z\" fill=\"#9ebaa0\" fill-opacity=\".27\" stroke=\"#62917b\" stroke-dasharray=\"6 5\"\/><rect x=\"320\" y=\"96\" width=\"105\" height=\"170\" fill=\"#e2c99666\" stroke=\"#b79351\" stroke-dasharray=\"5 4\"\/><path d=\"M264 100 284 267\" stroke=\"#c37c54\" stroke-width=\"9\"\/><circle cx=\"48\" cy=\"176\" r=\"17\" fill=\"#f5ede0\" stroke=\"#aa7544\" stroke-width=\"4\"\/><g fill=\"#357f6d\"><circle cx=\"350\" cy=\"113\" r=\"4\"\/><circle cx=\"365\" cy=\"146\" r=\"4\"\/><circle cx=\"390\" cy=\"205\" r=\"4\"\/><circle cx=\"404\" cy=\"254\" r=\"4\"\/><\/g><g fill=\"#8b9487\"><circle cx=\"341\" cy=\"183\" r=\"4\"\/><circle cx=\"355\" cy=\"224\" r=\"4\"\/><\/g><path d=\"M47 176 367 146\" stroke=\"#b17a47\" stroke-dasharray=\"4 7\"\/><\/svg><\/div><div><span class=\"eyebrow dark\" data-i18n=\"fK\">05 \/ DE REKENREGEL<\/span><h2><span data-i18n=\"fT\">Hoe ontstaat een<\/span><br><span data-i18n=\"fT2\">dekkingspercentage?<\/span><\/h2><p data-i18n=\"fP\">De doelzone wordt in meetpunten verdeeld. Voor elk punt gaat de analyse na of het binnen het ingestelde camerabereik en FOV ligt en of de zichtlijn vrij is.<\/p><div class=\"check-method\" id=\"formulaChecks\"><div><b>01<\/b><span>Is het punt binnen de ingestelde hoek en het bereik?<\/span><\/div><div><b>02<\/b><span>Bestaat er een vrije zichtlijn naar de camera?<\/span><\/div><div><b>03<\/b><span>Onderbreekt een muur of obstakel die lijn?<\/span><\/div><\/div><div class=\"math-line\" data-i18n=\"formula\">DEKKING = ZICHTBARE MEETPUNTEN \u00f7 ALLE ONDERZOCHTE MEETPUNTEN<\/div><p class=\"footnote\" data-i18n=\"fFoot\">De nauwkeurigheid van een rasterbenadering hangt af van het gekozen raster en de ingevoerde 2D-geometrie.<\/p><\/div><\/div><\/section>\n<section class=\"warning\" id=\"beperkingen\"><div class=\"wrap warning-grid\"><span class=\"alert-mark\" aria-hidden=\"true\">!<\/span><div><span class=\"eyebrow dark\" data-i18n=\"limitK\">BELANGRIJKE BEPERKING \u00b7 V0.1<\/span><h2><span data-i18n=\"limitT\">Een transparant<\/span><br><span data-i18n=\"limitT2\">2D-analysemodel.<\/span><\/h2><p data-i18n=\"limitP\">Spatial Kernel analyseert de plattegrond van bovenaf. Montagehoogtes, verticale kijkhoeken, niveauverschillen en andere 3D-factoren zijn niet opgenomen in deze versie. Het resultaat is dus een geometrische inschatting, geen garantie op identificatie, beeldkwaliteit of daadwerkelijke prestaties op locatie.<\/p><\/div><div class=\"model\"><small>SPATIAL<br>MODEL<\/small><strong>2D<\/strong><small>V0.1<\/small><\/div><\/div><\/section>\n<section class=\"repeat\"><div class=\"wrap repeat-card\"><div><span class=\"eyebrow dark\" data-i18n=\"repK\">REPRODUCEERBARE ANALYSE<\/span><h2><span data-i18n=\"repT\">Hetzelfde plan.<\/span><br><span data-i18n=\"repT2\">Hetzelfde resultaat.<\/span><\/h2><p data-i18n=\"repP\">Met onveranderde camera-instellingen, terreingrenzen en obstakels geeft dezelfde berekening hetzelfde geometrische resultaat. Zo kun je ontwerpvarianten op een consistente manier vergelijken.<\/p><\/div><div class=\"repeat-code\">INPUT = OUTPUT<\/div><\/div><\/section>\n<section class=\"closing\" id=\"camsketch\"><div class=\"wrap closing-inner\"><div><span class=\"eyebrow\" data-i18n=\"ctaK\">CAMSKETCH \u00b7 START DE ENGINE<\/span><h2><span data-i18n=\"ctaT\">De uitleg is compleet.<\/span><br><span data-i18n=\"ctaT2\">Start de Spatial Kernel hieronder.<\/span><\/h2><p data-i18n=\"ctaP\">De echte Spatial Kernel staat direct onder deze pagina. Klik hieronder om naar de afzonderlijke engine te springen en daar met je eigen plan te werken.<\/p><div class=\"actions\"><a class=\"btn\" href=\"#spatial-kernel-start\"><span data-i18n=\"cta1\">Start Spatial Kernel<\/span> \u2193<\/a><a class=\"btn outline\" href=\"https:\/\/cctvacademy.be\/nl\/\" data-i18n=\"cta2\">Terug naar CCTV Academy<\/a><\/div><\/div><div class=\"closing-brand-visual\"><span class=\"closing-gear\" aria-hidden=\"true\">\u2699<\/span><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\" onerror=\"this.style.display='none'\" alt=\"CamSketch \u00b7 logo origineel\"><\/div><\/div><\/section>\n<\/main>\n<footer class=\"footer\"><div class=\"wrap footer-inner\"><small data-i18n=\"footer\">CCTV Academy \/ CamSketch \u00b7 Grafische herwerking op basis van de aangeleverde Spatial Kernel-pagina.<\/small><a href=\"https:\/\/cctvacademy.be\/nl\/login\/\">LOGIN \u2197<\/a><\/div><\/footer>\n<!-- PLAATS HIER DIRECT ONDER DEZE HTML-CODE DE AFZONDERLIJKE LIVE SPATIAL KERNEL. -->\n<div id=\"spatial-kernel-start\" aria-hidden=\"true\" style=\"height:1px;scroll-margin-top:24px\"><\/div>\n<span id=\"langStatus\" role=\"status\" aria-live=\"polite\" style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)\"><\/span>\n<script>\n'use strict';\nconst translations={\"nl\":{\"pageTitle\":\"CamSketch Spatial Kernel | CCTV Academy\",\"meta\":\"Ontdek CamSketch Spatial Kernel: 2D-geometrie, cameraposities, zichtlijnen en dekking. Ga vanaf deze uitleg rechtstreeks naar de Spatial Kernel onderaan de pagina.\",\"home\":\"HOME\",\"login\":\"LOGIN\",\"skip\":\"Ga naar inhoud\",\"langlabel\":\"Kies een taal\",\"nav0\":\"Overzicht\",\"nav1\":\"Invoer\",\"nav2\":\"Werkwijze\",\"nav3\":\"Resultaten\",\"nav4\":\"Spatial Kernel\",\"nav5\":\"Beperkingen\",\"nav6\":\"CamSketch\",\"eyebrow\":\"CAMSKETCH \u00b7 COMPUTATIONAL CCTV ANALYSIS\",\"hero1\":\"Een plattegrond.\",\"hero2\":\"Inzicht in zichtlijnen.\",\"heroP\":\"Spatial Kernel gebruikt de geometrie van een 2D-plan om theoretische en zichtbaar bereikbare cameradekking te beoordelen. Analyseer de invloed van cameraposities, muren, obstakels en doelzones.\",\"heroSub\":\"GEOMETRISCHE UITLEG \u00b7 LIVE SPATIAL KERNEL STAAT ONDERAAN\",\"demoJump\":\"Open Spatial Kernel\",\"openCam\":\"Open CamSketch\",\"heroDiagram\":\"RUIMTELIJKE BLAUWDRUK\",\"heroMark\":\"ZICHTMODEL \/ 2D\",\"heroNote\":\"Schematische weergave. Geen echte projectberekening.\",\"strip\":[\"5 invoertypen\",\"2D-geometrie\",\"Zichtlijntoets\",\"Herhaalbaar model\"],\"s1K\":\"01 \/ BOUWSTENEN\",\"s1T\":\"Vijf onderdelen.\",\"s1T2\":\"E\u00e9n overzichtelijk plan.\",\"s1P\":\"Spatial Kernel begint bij de meetbare onderdelen van je CamSketch-plattegrond. Samen bepalen ze welke delen theoretisch in beeld komen en welke werkelijk zichtbaar blijven.\",\"inputs\":[[\"CAM\",\"Camera\u2019s\",\"Positie, kijkrichting, horizontale openingshoek (HFOV) en maximaal bereik.\"],[\"GEO\",\"Muren\",\"Structurele elementen die een zichtlijn kunnen onderbreken.\"],[\"OBS\",\"Obstakels\",\"Objecten die de camera gedeeltelijk of volledig afschermen.\"],[\"ZONE\",\"Doelzones\",\"Gebieden waarvan je de zichtbare dekking wilt onderzoeken.\"],[\"PER\",\"Terreingrens\",\"De grens waarbinnen je het CCTV-ontwerp beoordeelt.\"]],\"s2K\":\"02 \/ GEOMETRISCHE WERKWIJZE\",\"s2T\":\"Van camerastandpunt\",\"s2T2\":\"naar zichtbaar gebied.\",\"s2P\":\"Eerst wordt het theoretische gezichtsveld opgebouwd. Vervolgens worden vrije en geblokkeerde zichtlijnen onderzocht.\",\"process\":[[\"A\",\"Positie\",\"Waar bevindt de camera zich?\"],[\"B\",\"Richting\",\"Waar kijkt de camera naartoe?\"],[\"C\",\"HFOV\",\"Hoe breed is de horizontale openingshoek?\"],[\"D\",\"Bereik\",\"Tot hoever wordt het zicht onderzocht?\"],[\"E\",\"Zichtmodel\",\"Welke punten blijven geometrisch zichtbaar?\"]],\"s3K\":\"03 \/ ANALYSE-UITKOMSTEN\",\"s3T\":\"De meetresultaten\",\"s3T2\":\"in \u00e9\u00e9n oogopslag.\",\"s3P\":\"Het model maakt onderscheid tussen het nominale gezichtsveld en de delen die na afscherming werkelijk binnen de zichtlijn vallen.\",\"outputs\":[[\"01\",\"Dekkingspercentage\",\"Het aandeel onderzochte meetpunten in de doelzone dat zichtbaar is.\"],[\"02\",\"Theoretisch FOV\",\"Het nominale gezichtsveld volgens richting, openingshoek en bereik.\"],[\"03\",\"Zichtblokkering\",\"De invloed van muren en obstakels op het bruikbare zicht.\"],[\"04\",\"Blinde zones\",\"Meetpunten die vanuit de huidige camerapositie niet zichtbaar zijn.\"],[\"05\",\"Buiten terreingrens\",\"Inzicht in een zichtbaar gebied dat buiten de gekozen terreingrens valt.\"],[\"LIVE\",\"Herberekening\",\"Het geometrische resultaat opnieuw berekenen na een wijziging.\"]],\"fK\":\"05 \/ DE REKENREGEL\",\"fT\":\"Hoe ontstaat een\",\"fT2\":\"dekkingspercentage?\",\"fP\":\"De doelzone wordt in meetpunten verdeeld. Voor elk punt gaat de analyse na of het binnen het ingestelde camerabereik en FOV ligt en of de zichtlijn vrij is.\",\"checks\":[\"Is het punt binnen de ingestelde hoek en het bereik?\",\"Bestaat er een vrije zichtlijn naar de camera?\",\"Onderbreekt een muur of obstakel die lijn?\"],\"formula\":\"DEKKING = ZICHTBARE MEETPUNTEN \u00f7 ALLE ONDERZOCHTE MEETPUNTEN\",\"fFoot\":\"De nauwkeurigheid van een rasterbenadering hangt af van het gekozen raster en de ingevoerde 2D-geometrie.\",\"limitK\":\"BELANGRIJKE BEPERKING \u00b7 V0.1\",\"limitT\":\"Een transparant\",\"limitT2\":\"2D-analysemodel.\",\"limitP\":\"Spatial Kernel analyseert de plattegrond van bovenaf. Montagehoogtes, verticale kijkhoeken, niveauverschillen en andere 3D-factoren zijn niet opgenomen in deze versie. Het resultaat is dus een geometrische inschatting, geen garantie op identificatie, beeldkwaliteit of daadwerkelijke prestaties op locatie.\",\"repK\":\"REPRODUCEERBARE ANALYSE\",\"repT\":\"Hetzelfde plan.\",\"repT2\":\"Hetzelfde resultaat.\",\"repP\":\"Met onveranderde camera-instellingen, terreingrenzen en obstakels geeft dezelfde berekening hetzelfde geometrische resultaat. Zo kun je ontwerpvarianten op een consistente manier vergelijken.\",\"ctaK\":\"CAMSKETCH \u00b7 START DE ENGINE\",\"ctaT\":\"De uitleg is compleet.\",\"ctaT2\":\"Start de Spatial Kernel hieronder.\",\"ctaP\":\"De echte Spatial Kernel staat direct onder deze pagina. Klik hieronder om naar de afzonderlijke engine te springen en daar met je eigen plan te werken.\",\"cta1\":\"Start Spatial Kernel\",\"cta2\":\"Terug naar CCTV Academy\",\"footer\":\"CCTV Academy \/ CamSketch \u00b7 Grafische herwerking op basis van de aangeleverde Spatial Kernel-pagina.\",\"status\":\"Taal ingesteld op Nederlands\",\"noLogo\":\"CAMSKETCH\"},\"fr\":{\"pageTitle\":\"CamSketch Spatial Kernel | CCTV Academy\",\"meta\":\"D\u00e9couvrez CamSketch Spatial Kernel : g\u00e9om\u00e9trie 2D, cam\u00e9ras, lignes de vis\u00e9e et couverture. Acc\u00e9dez au moteur Spatial Kernel plac\u00e9 sous cette page.\",\"home\":\"ACCUEIL\",\"login\":\"CONNEXION\",\"skip\":\"Aller au contenu\",\"langlabel\":\"Choisir la langue\",\"nav0\":\"Pr\u00e9sentation\",\"nav1\":\"Donn\u00e9es\",\"nav2\":\"M\u00e9thode\",\"nav3\":\"R\u00e9sultats\",\"nav4\":\"Spatial Kernel\",\"nav5\":\"Limites\",\"nav6\":\"CamSketch\",\"eyebrow\":\"CAMSKETCH \u00b7 ANALYSE CCTV COMPUTATIONNELLE\",\"hero1\":\"Un plan.\",\"hero2\":\"Une vision des lignes de vue.\",\"heroP\":\"Spatial Kernel exploite la g\u00e9om\u00e9trie d\u2019un plan 2D pour \u00e9valuer la couverture th\u00e9orique et r\u00e9ellement visible des cam\u00e9ras. \u00c9tudiez l\u2019effet de leur position, des murs, des obstacles et des zones cibles.\",\"heroSub\":\"PRINCIPES G\u00c9OM\u00c9TRIQUES \u00b7 MOTEUR SPATIAL KERNEL EN BAS\",\"demoJump\":\"Ouvrir Spatial Kernel\",\"openCam\":\"Ouvrir CamSketch\",\"heroDiagram\":\"PLAN TECHNIQUE SPATIAL\",\"heroMark\":\"MOD\u00c8LE DE VISIBILIT\u00c9 \/ 2D\",\"heroNote\":\"Sch\u00e9ma illustratif, pas une analyse r\u00e9elle de projet.\",\"strip\":[\"5 types de donn\u00e9es\",\"G\u00e9om\u00e9trie 2D\",\"V\u00e9rification de visibilit\u00e9\",\"Mod\u00e8le reproductible\"],\"s1K\":\"01 \/ \u00c9L\u00c9MENTS DE BASE\",\"s1T\":\"Cinq \u00e9l\u00e9ments.\",\"s1T2\":\"Un seul plan clair.\",\"s1P\":\"Spatial Kernel commence par les \u00e9l\u00e9ments mesurables de votre plan CamSketch. Ils d\u00e9terminent les zones th\u00e9oriquement couvertes et celles qui restent effectivement visibles.\",\"inputs\":[[\"CAM\",\"Cam\u00e9ras\",\"Position, orientation, champ horizontal (HFOV) et port\u00e9e maximale.\"],[\"GEO\",\"Murs\",\"\u00c9l\u00e9ments structurels capables d\u2019interrompre une ligne de vue.\"],[\"OBS\",\"Obstacles\",\"Objets masquant partiellement ou totalement la vue.\"],[\"ZONE\",\"Zones cibles\",\"Zones dans lesquelles analyser la couverture visible.\"],[\"PER\",\"Limite du terrain\",\"P\u00e9rim\u00e8tre dans lequel \u00e9valuer le projet CCTV.\"]],\"s2K\":\"02 \/ M\u00c9THODE G\u00c9OM\u00c9TRIQUE\",\"s2T\":\"De la cam\u00e9ra\",\"s2T2\":\"\u00e0 la zone visible.\",\"s2P\":\"Le champ de vision th\u00e9orique est d\u00e9fini en premier. Les lignes de vue libres et obstru\u00e9es sont ensuite \u00e9tudi\u00e9es.\",\"process\":[[\"A\",\"Position\",\"O\u00f9 se trouve la cam\u00e9ra ?\"],[\"B\",\"Direction\",\"Dans quelle direction regarde-t-elle ?\"],[\"C\",\"HFOV\",\"Quelle est l\u2019ouverture horizontale ?\"],[\"D\",\"Port\u00e9e\",\"Jusqu\u2019o\u00f9 la visibilit\u00e9 est-elle \u00e9tudi\u00e9e ?\"],[\"E\",\"Visibilit\u00e9\",\"Quels points restent g\u00e9om\u00e9triquement visibles ?\"]],\"s3K\":\"03 \/ R\u00c9SULTATS D\u2019ANALYSE\",\"s3T\":\"Les r\u00e9sultats\",\"s3T2\":\"d\u2019un seul coup d\u2019\u0153il.\",\"s3P\":\"Le mod\u00e8le distingue le champ nominal et les parties r\u00e9ellement accessibles apr\u00e8s prise en compte des obstacles.\",\"outputs\":[[\"01\",\"Pourcentage de couverture\",\"Part des points analys\u00e9s de la zone cible qui sont visibles.\"],[\"02\",\"Champ th\u00e9orique\",\"Champ nominal selon la direction, l\u2019ouverture et la port\u00e9e.\"],[\"03\",\"Obstructions\",\"Influence des murs et obstacles sur la visibilit\u00e9.\"],[\"04\",\"Zones aveugles\",\"Points non visibles depuis la position actuelle.\"],[\"05\",\"Hors terrain\",\"Part de la zone visible situ\u00e9e hors du p\u00e9rim\u00e8tre d\u00e9fini.\"],[\"LIVE\",\"Recalcul\",\"Recalculer les r\u00e9sultats apr\u00e8s une modification.\"]],\"fK\":\"05 \/ M\u00c9THODE DE CALCUL\",\"fT\":\"Comment calculer\",\"fT2\":\"la couverture ?\",\"fP\":\"La zone cible est d\u00e9coup\u00e9e en points d\u2019\u00e9chantillonnage. Chaque point est \u00e9valu\u00e9 selon le champ de vision, la port\u00e9e et l\u2019absence d\u2019obstacles.\",\"checks\":[\"Le point se trouve-t-il dans le champ et la port\u00e9e d\u00e9finis ?\",\"La ligne de vue depuis la cam\u00e9ra est-elle libre ?\",\"Un mur ou un obstacle interrompt-il cette ligne ?\"],\"formula\":\"COUVERTURE = POINTS VISIBLES \u00f7 TOTAL DES POINTS EXAMIN\u00c9S\",\"fFoot\":\"La pr\u00e9cision de cet \u00e9chantillonnage d\u00e9pend du maillage choisi et de la g\u00e9om\u00e9trie 2D saisie.\",\"limitK\":\"LIMITE IMPORTANTE \u00b7 V0.1\",\"limitT\":\"Un mod\u00e8le 2D\",\"limitT2\":\"transparent.\",\"limitP\":\"Spatial Kernel analyse le plan vu de dessus. Hauteur de montage, angles verticaux, d\u00e9nivel\u00e9s et autres param\u00e8tres 3D ne font pas partie de cette version. Les r\u00e9sultats sont des estimations g\u00e9om\u00e9triques et ne garantissent ni l\u2019identification ni la qualit\u00e9 r\u00e9elle des images sur site.\",\"repK\":\"ANALYSE REPRODUCTIBLE\",\"repT\":\"M\u00eame plan.\",\"repT2\":\"M\u00eame r\u00e9sultat.\",\"repP\":\"\u00c0 param\u00e8tres, obstacles et p\u00e9rim\u00e8tres inchang\u00e9s, un m\u00eame calcul produit le m\u00eame r\u00e9sultat g\u00e9om\u00e9trique. Vous pouvez ainsi comparer diff\u00e9rentes variantes de mani\u00e8re coh\u00e9rente.\",\"ctaK\":\"CAMSKETCH \u00b7 LANCER LE MOTEUR\",\"ctaT\":\"Les principes sont expliqu\u00e9s.\",\"ctaT2\":\"Lancez Spatial Kernel ci-dessous.\",\"ctaP\":\"Le v\u00e9ritable Spatial Kernel se trouve juste sous cette page. Cliquez ci-dessous pour rejoindre ce moteur distinct et travailler sur votre propre plan.\",\"cta1\":\"Lancer Spatial Kernel\",\"cta2\":\"Retour \u00e0 CCTV Academy\",\"footer\":\"CCTV Academy \/ CamSketch \u00b7 Nouvelle pr\u00e9sentation graphique bas\u00e9e sur la page Spatial Kernel fournie.\",\"status\":\"Langue : fran\u00e7ais\",\"noLogo\":\"CAMSKETCH\"},\"en\":{\"pageTitle\":\"CamSketch Spatial Kernel | CCTV Academy\",\"meta\":\"Explore CamSketch Spatial Kernel: 2D geometry, camera positions, sight lines and coverage. Jump straight to the Spatial Kernel engine below this page.\",\"home\":\"HOME\",\"login\":\"LOGIN\",\"skip\":\"Skip to content\",\"langlabel\":\"Choose language\",\"nav0\":\"Overview\",\"nav1\":\"Inputs\",\"nav2\":\"Method\",\"nav3\":\"Outputs\",\"nav4\":\"Spatial Kernel\",\"nav5\":\"Limitations\",\"nav6\":\"CamSketch\",\"eyebrow\":\"CAMSKETCH \u00b7 COMPUTATIONAL CCTV ANALYSIS\",\"hero1\":\"One floor plan.\",\"hero2\":\"Clear lines of sight.\",\"heroP\":\"Spatial Kernel uses 2D floor-plan geometry to evaluate theoretical and visible camera coverage. Explore the effect of camera positions, walls, obstacles and target zones.\",\"heroSub\":\"GEOMETRIC EXPLANATION \u00b7 LIVE SPATIAL KERNEL BELOW\",\"demoJump\":\"Open Spatial Kernel\",\"openCam\":\"Open CamSketch\",\"heroDiagram\":\"SPATIAL BLUEPRINT\",\"heroMark\":\"VISIBILITY MODEL \/ 2D\",\"heroNote\":\"Illustrative diagram, not a real project calculation.\",\"strip\":[\"5 input types\",\"2D geometry\",\"Line-of-sight checks\",\"Reproducible model\"],\"s1K\":\"01 \/ BUILDING BLOCKS\",\"s1T\":\"Five inputs.\",\"s1T2\":\"One coherent plan.\",\"s1P\":\"Spatial Kernel starts from measurable features in your CamSketch plan. Together they determine what is theoretically within view and what is actually visible.\",\"inputs\":[[\"CAM\",\"Cameras\",\"Position, viewing direction, horizontal field of view (HFOV) and maximum range.\"],[\"GEO\",\"Walls\",\"Structural elements capable of blocking sight lines.\"],[\"OBS\",\"Obstacles\",\"Objects that partially or completely obscure a camera\u2019s view.\"],[\"ZONE\",\"Target zones\",\"Areas whose visible coverage you want to examine.\"],[\"PER\",\"Site boundary\",\"The boundary within which the CCTV design is assessed.\"]],\"s2K\":\"02 \/ GEOMETRIC METHOD\",\"s2T\":\"From camera position\",\"s2T2\":\"to visible coverage.\",\"s2P\":\"The theoretical field of view is constructed first. Unobstructed and blocked sight lines are then examined.\",\"process\":[[\"A\",\"Position\",\"Where is the camera located?\"],[\"B\",\"Direction\",\"Which way is it pointing?\"],[\"C\",\"HFOV\",\"How wide is the horizontal field of view?\"],[\"D\",\"Range\",\"How far does the analysis extend?\"],[\"E\",\"Visibility\",\"Which points remain geometrically visible?\"]],\"s3K\":\"03 \/ ANALYSIS RESULTS\",\"s3T\":\"Results you can\",\"s3T2\":\"understand at a glance.\",\"s3P\":\"The model distinguishes the nominal field of view from those areas that remain genuinely visible after obstructions.\",\"outputs\":[[\"01\",\"Coverage percentage\",\"The share of sampled target-zone points that are visible.\"],[\"02\",\"Theoretical FOV\",\"Nominal coverage based on direction, angle and range.\"],[\"03\",\"Occlusion\",\"The effect of walls and obstacles on useful coverage.\"],[\"04\",\"Blind spots\",\"Sample points not visible from the current camera position.\"],[\"05\",\"Outside the site\",\"Visibility extending beyond the specified site boundary.\"],[\"LIVE\",\"Recalculation\",\"Recalculate the geometric model when settings change.\"]],\"fK\":\"05 \/ THE CALCULATION\",\"fT\":\"How is coverage\",\"fT2\":\"calculated?\",\"fP\":\"The target zone is divided into sample points. Each is tested against camera range, field of view and any obstructed line of sight.\",\"checks\":[\"Is the sample point within the selected FOV and range?\",\"Is there a clear line of sight to the camera?\",\"Does a wall or obstacle interrupt that line?\"],\"formula\":\"COVERAGE = VISIBLE SAMPLE POINTS \u00f7 ALL SAMPLED POINTS\",\"fFoot\":\"Grid-sampling accuracy depends on the grid resolution and supplied 2D geometry.\",\"limitK\":\"IMPORTANT LIMITATION \u00b7 V0.1\",\"limitT\":\"A transparent\",\"limitT2\":\"2D analysis model.\",\"limitP\":\"Spatial Kernel analyses a top-down floor plan. Mounting heights, vertical viewing angles, changes in level and other 3D factors are not included in this version. Its result is a geometric estimate\u2014not a guarantee of identification, image quality or actual on-site performance.\",\"repK\":\"REPRODUCIBLE ANALYSIS\",\"repT\":\"Same input.\",\"repT2\":\"Same result.\",\"repP\":\"An unchanged plan with identical camera settings, obstacles and boundaries yields the same geometric result, allowing consistent design comparisons.\",\"ctaK\":\"CAMSKETCH \u00b7 LAUNCH THE ENGINE\",\"ctaT\":\"You know the principles.\",\"ctaT2\":\"Start Spatial Kernel below.\",\"ctaP\":\"The actual Spatial Kernel is placed immediately below this page. Jump to the separate engine and work with your own plan there.\",\"cta1\":\"Start Spatial Kernel\",\"cta2\":\"Back to CCTV Academy\",\"footer\":\"CCTV Academy \/ CamSketch \u00b7 Redesign based on the supplied Spatial Kernel page.\",\"status\":\"Language set to English\",\"noLogo\":\"CAMSKETCH\"},\"de\":{\"pageTitle\":\"CamSketch Spatial Kernel | CCTV Academy\",\"meta\":\"CamSketch Spatial Kernel erkl\u00e4rt 2D-Geometrie, Kamerastandorte, Sichtlinien und Abdeckung. Springen Sie direkt zur darunter eingebundenen Spatial Kernel-Engine.\",\"home\":\"STARTSEITE\",\"login\":\"LOGIN\",\"skip\":\"Zum Inhalt springen\",\"langlabel\":\"Sprache w\u00e4hlen\",\"nav0\":\"\u00dcbersicht\",\"nav1\":\"Eingaben\",\"nav2\":\"Verfahren\",\"nav3\":\"Ergebnisse\",\"nav4\":\"Spatial Kernel\",\"nav5\":\"Grenzen\",\"nav6\":\"CamSketch\",\"eyebrow\":\"CAMSKETCH \u00b7 RECHNERGEST\u00dcTZTE CCTV-ANALYSE\",\"hero1\":\"Ein Grundriss.\",\"hero2\":\"Klare Sichtlinien.\",\"heroP\":\"Spatial Kernel nutzt die Geometrie eines 2D-Grundrisses, um theoretische und tats\u00e4chlich sichtbare Kameraabdeckung zu bewerten. Erkunden Sie den Einfluss von Positionen, W\u00e4nden, Hindernissen und Zielzonen.\",\"heroSub\":\"GEOMETRISCHE ERKL\u00c4RUNG \u00b7 LIVE SPATIAL KERNEL UNTEN\",\"demoJump\":\"Spatial Kernel \u00f6ffnen\",\"openCam\":\"CamSketch \u00f6ffnen\",\"heroDiagram\":\"R\u00c4UMLICHER BAUPLAN\",\"heroMark\":\"SICHTMODELL \/ 2D\",\"heroNote\":\"Schematische Darstellung, keine echte Projektberechnung.\",\"strip\":[\"5 Eingabetypen\",\"2D-Geometrie\",\"Sichtlinienpr\u00fcfung\",\"Reproduzierbares Modell\"],\"s1K\":\"01 \/ GRUNDLAGEN\",\"s1T\":\"F\u00fcnf Eingaben.\",\"s1T2\":\"Ein klarer Plan.\",\"s1P\":\"Spatial Kernel beginnt mit den messbaren Elementen Ihres CamSketch-Plans. Gemeinsam bestimmen sie, welche Bereiche theoretisch und welche tats\u00e4chlich sichtbar sind.\",\"inputs\":[[\"CAM\",\"Kameras\",\"Position, Blickrichtung, horizontaler Sichtwinkel (HFOV) und maximale Reichweite.\"],[\"GEO\",\"W\u00e4nde\",\"Bauelemente, die Sichtlinien unterbrechen k\u00f6nnen.\"],[\"OBS\",\"Hindernisse\",\"Objekte, die Teile des Kamerabildes verdecken.\"],[\"ZONE\",\"Zielzonen\",\"Bereiche, deren sichtbare Abdeckung untersucht wird.\"],[\"PER\",\"Grundst\u00fccksgrenze\",\"Die Grenze, innerhalb derer das CCTV-Konzept bewertet wird.\"]],\"s2K\":\"02 \/ GEOMETRISCHES VERFAHREN\",\"s2T\":\"Vom Kamerastandort\",\"s2T2\":\"zum sichtbaren Bereich.\",\"s2P\":\"Zun\u00e4chst wird das theoretische Sichtfeld erstellt. Danach werden freie und blockierte Sichtlinien gepr\u00fcft.\",\"process\":[[\"A\",\"Position\",\"Wo steht die Kamera?\"],[\"B\",\"Richtung\",\"Wohin ist sie ausgerichtet?\"],[\"C\",\"HFOV\",\"Wie breit ist der horizontale Sichtwinkel?\"],[\"D\",\"Reichweite\",\"Wie weit wird die Sicht untersucht?\"],[\"E\",\"Sichtmodell\",\"Welche Punkte bleiben geometrisch sichtbar?\"]],\"s3K\":\"03 \/ ANALYSEERGEBNISSE\",\"s3T\":\"Ergebnisse\",\"s3T2\":\"auf einen Blick.\",\"s3P\":\"Das Modell unterscheidet das nominelle Sichtfeld von tats\u00e4chlich einsehbaren Bereichen nach Ber\u00fccksichtigung von Hindernissen.\",\"outputs\":[[\"01\",\"Abdeckungsgrad\",\"Anteil der sichtbaren Messpunkte in der untersuchten Zielzone.\"],[\"02\",\"Theoretisches Sichtfeld\",\"Nomineller Bereich anhand von Richtung, Winkel und Reichweite.\"],[\"03\",\"Sichtblockierung\",\"Einfluss von W\u00e4nden und Hindernissen auf die Abdeckung.\"],[\"04\",\"Tote Winkel\",\"Messpunkte, die vom aktuellen Standort nicht sichtbar sind.\"],[\"05\",\"Au\u00dferhalb des Gel\u00e4ndes\",\"Sichtbereich au\u00dferhalb der definierten Grundst\u00fccksgrenze.\"],[\"LIVE\",\"Neuberechnung\",\"Erneute geometrische Berechnung nach \u00c4nderungen.\"]],\"fK\":\"05 \/ BERECHNUNG\",\"fT\":\"Wie wird die\",\"fT2\":\"Abdeckung ermittelt?\",\"fP\":\"Die Zielzone wird in Messpunkte aufgeteilt. F\u00fcr jeden Punkt werden Sichtwinkel, Reichweite und ungehinderte Sichtlinie gepr\u00fcft.\",\"checks\":[\"Liegt der Messpunkt innerhalb von Sichtwinkel und Reichweite?\",\"Besteht eine freie Sichtlinie zur Kamera?\",\"Unterbricht eine Wand oder ein Hindernis diese Linie?\"],\"formula\":\"ABDECKUNG = SICHTBARE MESSPUNKTE \u00f7 ALLE GEPR\u00dcFTEN MESSPUNKTE\",\"fFoot\":\"Die Genauigkeit der Rastermethode h\u00e4ngt vom Raster und der eingegebenen 2D-Geometrie ab.\",\"limitK\":\"WICHTIGE EINSCHR\u00c4NKUNG \u00b7 V0.1\",\"limitT\":\"Ein transparentes\",\"limitT2\":\"2D-Analysemodell.\",\"limitP\":\"Spatial Kernel analysiert den Grundriss von oben. Montageh\u00f6hen, vertikale Blickwinkel, H\u00f6henunterschiede und andere 3D-Faktoren sind in dieser Version nicht enthalten. Das Ergebnis ist eine geometrische Sch\u00e4tzung, keine Garantie f\u00fcr Identifikation, Bildqualit\u00e4t oder die tats\u00e4chliche Leistung vor Ort.\",\"repK\":\"REPRODUZIERBARE ANALYSE\",\"repT\":\"Gleicher Plan.\",\"repT2\":\"Gleiches Ergebnis.\",\"repP\":\"Bei unver\u00e4nderten Kameraeinstellungen, Hindernissen und Grenzen liefert dieselbe Berechnung wieder dasselbe geometrische Ergebnis. Entwurfsvarianten lassen sich so konsistent vergleichen.\",\"ctaK\":\"CAMSKETCH \u00b7 ENGINE STARTEN\",\"ctaT\":\"Die Grundlagen sind erkl\u00e4rt.\",\"ctaT2\":\"Spatial Kernel unten starten.\",\"ctaP\":\"Die eigentliche Spatial Kernel-Engine befindet sich direkt unter dieser Seite. Springen Sie zur separaten Engine und bearbeiten Sie dort Ihren eigenen Plan.\",\"cta1\":\"Spatial Kernel starten\",\"cta2\":\"Zur\u00fcck zu CCTV Academy\",\"footer\":\"CCTV Academy \/ CamSketch \u00b7 Neugestaltung auf Grundlage der bereitgestellten Spatial Kernel-Seite.\",\"status\":\"Sprache auf Deutsch ge\u00e4ndert\",\"noLogo\":\"CAMSKETCH\"}};\nlet selected='nl';\nconst $=id=>document.getElementById(id);\nconst langCodes={nl:'nl-BE',fr:'fr-BE',en:'en',de:'de-BE'};\nfunction makeCard(tag,cls,items){const el=document.createElement(tag);el.className=cls;items.forEach(([type,value,clazz])=>{const c=document.createElement(type);if(clazz)c.className=clazz;c.textContent=value;el.appendChild(c)});return el}\nfunction renderSections(t){\n $('inputCards').replaceChildren(...t.inputs.map(item=>makeCard('article','info-card',[['span',item[0],'code'],['h3',item[1]],['p',item[2]]])));\n $('processCards').replaceChildren(...t.process.map(item=>makeCard('article','process-item',[['span',item[0],'step-id'],['h3',item[1]],['p',item[2]]])));\n $('outputCards').replaceChildren(...t.outputs.map(item=>makeCard('article','result-card',[['small',item[0]],['h3',item[1]],['p',item[2]]])));\n $('formulaChecks').replaceChildren(...t.checks.map((s,i)=>makeCard('div','',[['b',String(i+1).padStart(2,'0')],['span',s]])));\n document.querySelectorAll('[data-strip]').forEach(el=>el.textContent=t.strip[+el.dataset.strip]);\n}\nfunction setLang(code){\n if(!translations[code])code='nl';selected=code;\n const t=translations[code];document.documentElement.lang=langCodes[code];document.title=t.pageTitle;document.querySelector('meta[name=description]').content=t.meta;\n document.querySelectorAll('[data-i18n]').forEach(el=>el.textContent=t[el.dataset.i18n]);\n document.querySelector('.langs').setAttribute('aria-label',t.langlabel);\n document.querySelectorAll('.lang').forEach(el=>el.setAttribute('aria-pressed',String(el.dataset.lang===code)));\n renderSections(t);$('langStatus').textContent=t.status;\n try{localStorage.setItem('cctv-spatial-lang',code)}catch(e){}\n}\ndocument.querySelectorAll('.lang').forEach(el=>el.addEventListener('click',()=>setLang(el.dataset.lang)));\nlet pref='nl';try{pref=localStorage.getItem('cctv-spatial-lang')||'nl'}catch(e){}setLang(pref);\n\n<\/script>\n<\/body><\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0f6f270 e-flex e-con-boxed e-con e-parent\" data-id=\"0f6f270\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d61cdd0 elementor-widget elementor-widget-spacer\" data-id=\"d61cdd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-83d5022 e-flex e-con-boxed e-con e-parent\" data-id=\"83d5022\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d687b21 elementor-widget elementor-widget-html\" data-id=\"d687b21\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"nl\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>CamSketch Spatial Kernel v0.1<\/title>\n<style>\n  *{box-sizing:border-box} body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;background:#f4f6f8;color:#17202a}\n  .app{display:grid;grid-template-columns:minmax(620px,1fr) 360px;height:100vh;gap:0}.canvas{padding:24px;display:flex;flex-direction:column;gap:14px}\n  .bar{display:flex;align-items:center;justify-content:space-between}.title{font-weight:750;font-size:19px}.sub{font-size:12px;color:#68727d}\n  .stage{background:white;border:1px solid #d8dee5;border-radius:14px;box-shadow:0 8px 24px rgba(26,39,55,.06);overflow:hidden;flex:1;min-height:620px}\n  svg{width:100%;height:100%;touch-action:none}.sidebar{background:#fff;border-left:1px solid #d8dee5;padding:22px;overflow:auto}\n  .cameraHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.cameraHead h2{margin:0;font-size:20px}\n  .badge{font-size:12px;font-weight:700;padding:6px 9px;border-radius:999px;background:#eef2f5}.section{margin:18px 0}.section h3{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#747e88;margin:0 0 8px}\n  .finding{border:1px solid #e0e5ea;border-radius:11px;padding:12px;margin:8px 0}.finding strong{display:block;margin-bottom:4px}.finding p{margin:5px 0;font-size:13px;line-height:1.4;color:#4f5963}\n  .pass{border-left:4px solid #2d9d78}.warn{border-left:4px solid #d9911b}.fail{border-left:4px solid #d64a4a}.review{border-left:4px solid #8066cc}\n  .controls{display:grid;grid-template-columns:1fr;gap:10px}.ctrl{display:grid;grid-template-columns:80px 1fr 50px;align-items:center;gap:8px;font-size:12px}.ctrl input{width:100%}\n  .metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.metric{background:#f6f8fa;border-radius:10px;padding:10px}.metric b{display:block;font-size:18px}.metric span{font-size:11px;color:#69737d}\n  .source{font-size:11px;color:#66717c;line-height:1.4}.source a{color:inherit}.hint{font-size:12px;color:#66717c}.legend{display:flex;gap:14px;font-size:11px;color:#66717c}.dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}\n<\/style>\n<\/head>\n<body>\n<div class=\"app\">\n  <main class=\"canvas\">\n    <div class=\"bar\"><div><div class=\"title\">CamSketch \u2014 dynamische plananalyse<\/div><div class=\"sub\">Sleep C03 op het plan of wijzig richting\/FOV. Analyse wordt direct opnieuw berekend.<\/div><\/div><div class=\"legend\"><span><i class=\"dot\" style=\"background:#8fc7ff\"><\/i>zichtbaar<\/span><span><i class=\"dot\" style=\"background:#ffc869\"><\/i>doelzone<\/span><span><i class=\"dot\" style=\"background:#7d8791\"><\/i>obstakel<\/span><\/div><\/div>\n    <div class=\"stage\"><svg id=\"plan\" viewBox=\"0 0 900 620\" aria-label=\"CamSketch demo plan\"><\/svg><\/div>\n  <\/main>\n  <aside class=\"sidebar\">\n    <div class=\"cameraHead\"><div><div class=\"sub\">CAMERA<\/div><h2>C03 \u2014 Hoofdingang<\/h2><\/div><span class=\"badge\" id=\"overallBadge\">Analyse<\/span><\/div>\n    <div class=\"controls\">\n      <div class=\"ctrl\"><label>Richting<\/label><input id=\"yaw\" type=\"range\" min=\"-180\" max=\"180\" step=\"1\"><output id=\"yawOut\"><\/output><\/div>\n      <div class=\"ctrl\"><label>HFOV<\/label><input id=\"hfov\" type=\"range\" min=\"20\" max=\"120\" step=\"1\"><output id=\"hfovOut\"><\/output><\/div>\n      <div class=\"ctrl\"><label>Bereik<\/label><input id=\"range\" type=\"range\" min=\"3\" max=\"16\" step=\"0.5\"><output id=\"rangeOut\"><\/output><\/div>\n    <\/div>\n    <div class=\"section\"><h3>Planmetrics<\/h3><div class=\"metrics\">\n      <div class=\"metric\"><b id=\"coverageMetric\">\u2014<\/b><span>zichtbare doeldekking<\/span><\/div>\n      <div class=\"metric\"><b id=\"occlusionMetric\">\u2014<\/b><span>afscherming<\/span><\/div>\n      <div class=\"metric\"><b id=\"privacyMetric\">\u2014<\/b><span>buiten grens<\/span><\/div>\n      <div class=\"metric\"><b id=\"revisionMetric\">0<\/b><span>engine revision<\/span><\/div>\n    <\/div><\/div>\n    <div class=\"section\"><h3>Bevindingen<\/h3><div id=\"findings\"><\/div><\/div>\n    <div class=\"section\"><h3>Bronbeleid<\/h3><div class=\"source\">Technische CCTV-conclusies in deze demo verwijzen alleen naar CCTV Academy. De geometrie zelf is de interne CamSketch-rekenmethode.<br><br><a href=\"https:\/\/cctvacademy.be\/nl\/van-luchtfoto-tot-beveiligingsplan\/\" target=\"_blank\">CCTV Academy \u2014 Van luchtfoto tot beveiligingsplan<\/a><br><a href=\"https:\/\/cctvacademy.be\/nl\/belangrijk-principe-proportionaliteit\/\" target=\"_blank\">CCTV Academy \u2014 proportionaliteit<\/a><\/div><\/div>\n    <div class=\"hint\">v0.1 gebruikt 2D-planocclusie. Hoogtes worden in de volgende 2.5D-laag meegenomen.<\/div>\n  <\/aside>\n<\/div>\n<script>\nconst svg=document.getElementById('plan'); const NS='http:\/\/www.w3.org\/2000\/svg';\nconst SCALE=55, OX=62, OY=70, W=14, H=9;\nconst plan={camera:{id:'C03',x:2,y:4,yaw:0,hfov:70,range:12},target:[[10.5,3],[12.5,3],[12.5,5],[10.5,5]],obstacle:[[6,3.2],[7.2,3.2],[7.2,5.2],[6,5.2]],boundary:[[0,0],[14,0],[14,9],[0,9]]};\nlet revision=0, dragging=false;\nconst X=x=>OX+x*SCALE, Y=y=>OY+(H-y)*SCALE;\nfunction el(name,attrs={}){const n=document.createElementNS(NS,name);for(const[k,v]of Object.entries(attrs))n.setAttribute(k,v);return n}\nfunction polyStr(poly){return poly.map(p=>`${X(p[0])},${Y(p[1])}`).join(' ')}\nfunction pointInPoly(p,poly){let inside=false;for(let i=0,j=poly.length-1;i<poly.length;j=i++){const a=poly[i],b=poly[j];if(((a[1]>p[1])!=(b[1]>p[1]))&&(p[0]<(b[0]-a[0])*(p[1]-a[1])\/((b[1]-a[1])||1e-9)+a[0]))inside=!inside}return inside}\nfunction raySeg(ox,oy,a,s1,s2){const dx=Math.cos(a),dy=Math.sin(a),sx=s2[0]-s1[0],sy=s2[1]-s1[1],det=dx*(-sy)-dy*(-sx);if(Math.abs(det)<1e-9)return null;const rx=s1[0]-ox,ry=s1[1]-oy,t=(rx*(-sy)-ry*(-sx))\/det,u=(dx*ry-dy*rx)\/det;return t>1e-6&&u>=0&&u<=1?t:null}\nfunction edges(poly){return poly.map((p,i)=>[p,poly[(i+1)%poly.length]])}\nfunction visiblePoly(){const c=plan.camera,left=c.yaw-c.hfov\/2,right=c.yaw+c.hfov\/2,angs=[];for(let a=left;a<=right+1e-6;a+=2)angs.push(a);angs.push(right);for(const p of plan.obstacle){let a=Math.atan2(p[1]-c.y,p[0]-c.x)*180\/Math.PI;while(a-c.yaw>180)a-=360;while(a-c.yaw<-180)a+=360;if(a>=left-.2&&a<=right+.2){angs.push(a-.03,a,a+.03)}}angs.sort((a,b)=>a-b);const es=edges(plan.obstacle);return [[c.x,c.y],...angs.map(ad=>{const ar=ad*Math.PI\/180;let d=c.range;for(const e of es){const h=raySeg(c.x,c.y,ar,e[0],e[1]);if(h!==null&&h<d)d=h}return[c.x+Math.cos(ar)*d,c.y+Math.sin(ar)*d]})]}\nfunction nominalPoly(){const c=plan.camera,left=c.yaw-c.hfov\/2,right=c.yaw+c.hfov\/2,a=[[c.x,c.y]];for(let d=left;d<=right+1e-6;d+=2){const r=d*Math.PI\/180;a.push([c.x+Math.cos(r)*c.range,c.y+Math.sin(r)*c.range])}return a}\nfunction coverage(target,vis){let total=0,seen=0;const minX=Math.min(...target.map(p=>p[0])),maxX=Math.max(...target.map(p=>p[0])),minY=Math.min(...target.map(p=>p[1])),maxY=Math.max(...target.map(p=>p[1]));for(let iy=0;iy<45;iy++)for(let ix=0;ix<45;ix++){const p=[minX+(ix+.5)*(maxX-minX)\/45,minY+(iy+.5)*(maxY-minY)\/45];if(pointInPoly(p,target)){total++;if(pointInPoly(p,vis))seen++}}return total?seen\/total:0}\nfunction outsideRatio(vis,bound){const xs=vis.map(p=>p[0]),ys=vis.map(p=>p[1]),minX=Math.min(...xs),maxX=Math.max(...xs),minY=Math.min(...ys),maxY=Math.max(...ys);let total=0,out=0;for(let iy=0;iy<55;iy++)for(let ix=0;ix<55;ix++){const p=[minX+(ix+.5)*(maxX-minX)\/55,minY+(iy+.5)*(maxY-minY)\/55];if(pointInPoly(p,vis)){total++;if(!pointInPoly(p,bound))out++}}return total?out\/total:0}\nfunction pct(v){return `${Math.round(v*100)}%`}\nfunction finding(cls,title,body,advice){return `<div class=\"finding ${cls}\"><strong>${title}<\/strong><p>${body}<\/p><p><b>Advies:<\/b> ${advice}<\/p><\/div>`}\nfunction render(){revision++;svg.innerHTML='';\n  svg.append(el('rect',{x:X(0),y:Y(9),width:W*SCALE,height:H*SCALE,fill:'#fbfcfd',stroke:'#45505b','stroke-width':2}));\n  const grid=el('g',{'stroke':'#e8edf1','stroke-width':1});for(let x=1;x<W;x++)grid.append(el('line',{x1:X(x),y1:Y(0),x2:X(x),y2:Y(9)}));for(let y=1;y<H;y++)grid.append(el('line',{x1:X(0),y1:Y(y),x2:X(14),y2:Y(y)}));svg.append(grid);\n  const nom=nominalPoly(),vis=visiblePoly();svg.append(el('polygon',{points:polyStr(nom),fill:'#d9ebff','fill-opacity':.28,stroke:'#8bbcf1','stroke-width':1}));svg.append(el('polygon',{points:polyStr(vis),fill:'#77b7f7','fill-opacity':.26,stroke:'#4b97df','stroke-width':2}));\n  svg.append(el('polygon',{points:polyStr(plan.target),fill:'#ffc869','fill-opacity':.34,stroke:'#d98a12','stroke-width':2}));svg.append(el('polygon',{points:polyStr(plan.obstacle),fill:'#7d8791',stroke:'#4e5862','stroke-width':2}));\n  const c=plan.camera, cg=el('g',{id:'camera','data-draggable':'1',cursor:'grab'});cg.append(el('circle',{cx:X(c.x),cy:Y(c.y),r:13,fill:'#17202a'}));cg.append(el('circle',{cx:X(c.x),cy:Y(c.y),r:5,fill:'#fff'}));const ar=c.yaw*Math.PI\/180;cg.append(el('line',{x1:X(c.x),y1:Y(c.y),x2:X(c.x+Math.cos(ar)*.55),y2:Y(c.y+Math.sin(ar)*.55),stroke:'#fff','stroke-width':3}));svg.append(cg);\n  const cov=coverage(plan.target,vis),nomCov=coverage(plan.target,nom),occ=nomCov>.005?Math.max(0,(nomCov-cov)\/nomCov):0,priv=outsideRatio(vis,plan.boundary);\n  document.getElementById('coverageMetric').textContent=pct(cov);document.getElementById('occlusionMetric').textContent=pct(occ);document.getElementById('privacyMetric').textContent=pct(priv);document.getElementById('revisionMetric').textContent=revision;\n  let html='',critical=false,warn=false;\n  if(cov>=.995)html+=finding('pass','Kritieke doelzone gedekt','De ingang valt binnen de zichtbare cameradekking.','Geen geometrische correctie nodig.'); else if(cov<=.005){critical=true;html+=finding('fail','Kritieke doelzone niet gedekt','De ingang valt niet binnen de zichtbare cameradekking.','Pas positie, richting of FOV aan zodat de doelzone volledig wordt afgedekt.')} else {warn=true;html+=finding('warn','Doelzone gedeeltelijk gedekt',`Slechts ${pct(cov)} van de doelzone is zichtbaar.`,'Pas positie of richting aan om de ontbrekende dekking weg te nemen.')}\n  if(occ>.20){critical=true;html+=finding('fail','Object blokkeert belangrijk deel',`${pct(occ)} van de nominale doeldekking gaat verloren door het obstakel.`,'Verplaats de camera of het obstakel, of wijzig de kijkrichting.')} else if(occ>.005){warn=true;html+=finding('warn','Gedeeltelijke afscherming',`${pct(occ)} van de nominale doeldekking wordt afgeschermd.`,'Controleer of de resterende zichtlijn voldoende is voor het doel.')} else html+=finding('pass','Geen relevante afscherming','Het rek veroorzaakt geen relevante afscherming van de doelzone.','Geen aanpassing nodig.');\n  if(priv>.005){warn=true;html+=finding('review','Privacyreview',`${pct(priv)} van de zichtbare beeldzone valt buiten de gemarkeerde eigendomsgrens.`,'Beperk richting\/FOV of laat de proportionaliteit beoordelen. CamSketch verklaart geen juridische conformiteit.')}\n  document.getElementById('findings').innerHTML=html;const b=document.getElementById('overallBadge');b.textContent=critical?'Probleem':warn?'Aandachtspunt':'Goed';b.style.background=critical?'#fdeaea':warn?'#fff3df':'#e5f5ef';\n}\nconst yaw=document.getElementById('yaw'),hfov=document.getElementById('hfov'),range=document.getElementById('range');yaw.value=plan.camera.yaw;hfov.value=plan.camera.hfov;range.value=plan.camera.range;\nfunction sync(){plan.camera.yaw=+yaw.value;plan.camera.hfov=+hfov.value;plan.camera.range=+range.value;document.getElementById('yawOut').value=`${plan.camera.yaw}\u00b0`;document.getElementById('hfovOut').value=`${plan.camera.hfov}\u00b0`;document.getElementById('rangeOut').value=`${plan.camera.range}m`;render()}\n[yaw,hfov,range].forEach(i=>i.addEventListener('input',sync));\nsvg.addEventListener('pointerdown',e=>{if(e.target.closest&&e.target.closest('#camera')){dragging=true;svg.setPointerCapture(e.pointerId)}});svg.addEventListener('pointerup',()=>dragging=false);svg.addEventListener('pointermove',e=>{if(!dragging)return;const r=svg.getBoundingClientRect(),vx=(e.clientX-r.left)*900\/r.width,vy=(e.clientY-r.top)*620\/r.height;plan.camera.x=Math.max(0,Math.min(W,(vx-OX)\/SCALE));plan.camera.y=Math.max(0,Math.min(H,H-(vy-OY)\/SCALE));render()});\nsync();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a0b8fc9 e-flex e-con-boxed e-con e-parent\" data-id=\"a0b8fc9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6423b94 elementor-widget elementor-widget-spacer\" data-id=\"6423b94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>CamSketch Spatial Kernel | CCTV Academy Ga naar inhoud \u2699CCTV ACADEMYCAMSKETCH \/ SPATIAL KERNELHOMELOGINNLFRENDE CAMSKETCH \u00b7 COMPUTATIONAL CCTV ANALYSIS Een plattegrond.Inzicht in zichtlijnen. Spatial Kernel gebruikt de geometrie van een 2D-plan om theoretische en zichtbaar bereikbare cameradekking te beoordelen. Analyseer de invloed van cameraposities, muren, obstakels en doelzones. Open Spatial Kernel \u2197Open CamSketch \u2197GEOMETRISCHE UITLEG [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-50275","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spatial Kernel CamSketch - RAS\/AIS CCTV Academy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/\" \/>\n<meta property=\"og:locale\" content=\"nl_BE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy\" \/>\n<meta property=\"og:description\" content=\"CamSketch Spatial Kernel | CCTV Academy Ga naar inhoud \u2699CCTV ACADEMYCAMSKETCH \/ SPATIAL KERNELHOMELOGINNLFRENDE CAMSKETCH \u00b7 COMPUTATIONAL CCTV ANALYSIS Een plattegrond.Inzicht in zichtlijnen. Spatial Kernel gebruikt de geometrie van een 2D-plan om theoretische en zichtbaar bereikbare cameradekking te beoordelen. Analyseer de invloed van cameraposities, muren, obstakels en doelzones. Open Spatial Kernel \u2197Open CamSketch \u2197GEOMETRISCHE UITLEG [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/\" \/>\n<meta property=\"og:site_name\" content=\"RAS\/AIS CCTV Academy\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61576769152561\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-04T10:17:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/\",\"url\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/\",\"name\":\"Spatial Kernel CamSketch - RAS\\\/AIS CCTV Academy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cctvacademy.be\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/CamSketch_logo_HD-scaled.png\",\"datePublished\":\"2026-09-15T06:01:44+00:00\",\"dateModified\":\"2026-10-04T10:17:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#breadcrumb\"},\"inLanguage\":\"nl-BE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-BE\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cctvacademy.be\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/CamSketch_logo_HD-scaled.png\",\"contentUrl\":\"https:\\\/\\\/cctvacademy.be\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/CamSketch_logo_HD-scaled.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cctvacademy.be\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spatial Kernel CamSketch\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/#website\",\"url\":\"https:\\\/\\\/cctvacademy.be\\\/\",\"name\":\"CCTV Academy\",\"description\":\"CCTV Opleidingen en CCTV Micro Learning\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cctvacademy.be\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-BE\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/","og_locale":"nl_BE","og_type":"article","og_title":"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy","og_description":"CamSketch Spatial Kernel | CCTV Academy Ga naar inhoud \u2699CCTV ACADEMYCAMSKETCH \/ SPATIAL KERNELHOMELOGINNLFRENDE CAMSKETCH \u00b7 COMPUTATIONAL CCTV ANALYSIS Een plattegrond.Inzicht in zichtlijnen. Spatial Kernel gebruikt de geometrie van een 2D-plan om theoretische en zichtbaar bereikbare cameradekking te beoordelen. Analyseer de invloed van cameraposities, muren, obstakels en doelzones. Open Spatial Kernel \u2197Open CamSketch \u2197GEOMETRISCHE UITLEG [&hellip;]","og_url":"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/","og_site_name":"RAS\/AIS CCTV Academy","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61576769152561","article_modified_time":"2026-10-04T10:17:44+00:00","og_image":[{"url":"https:\/\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/","url":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/","name":"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy","isPartOf":{"@id":"https:\/\/cctvacademy.be\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#primaryimage"},"image":{"@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#primaryimage"},"thumbnailUrl":"https:\/\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png","datePublished":"2026-09-15T06:01:44+00:00","dateModified":"2026-10-04T10:17:44+00:00","breadcrumb":{"@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#breadcrumb"},"inLanguage":"nl-BE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/"]}]},{"@type":"ImageObject","inLanguage":"nl-BE","@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#primaryimage","url":"https:\/\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png","contentUrl":"https:\/\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png"},{"@type":"BreadcrumbList","@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cctvacademy.be\/"},{"@type":"ListItem","position":2,"name":"Spatial Kernel CamSketch"}]},{"@type":"WebSite","@id":"https:\/\/cctvacademy.be\/#website","url":"https:\/\/cctvacademy.be\/","name":"CCTV Academy","description":"CCTV Opleidingen en CCTV Micro Learning","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cctvacademy.be\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-BE"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages\/50275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/comments?post=50275"}],"version-history":[{"count":0,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages\/50275\/revisions"}],"wp:attachment":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/media?parent=50275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}