A blip is not where the contact is. It is where the contact was when the sweep last passed that bearing, up to a full rotation ago. Most software PPIs throw that away by redrawing every contact on every frame, which turns a known-stale picture into a confident live one. Here a contact is plotted only when the beam crosses it, blips decay with age so staleness is readable off the screen, rings are labelled with the range they are, and a contact with no fix is counted rather than quietly dropped. The three panels beside it carry a shader interior, a CSS scan overlay and a drifting hatch.
Four options, and each one says what it is not showing.
trail is phosphor persistence: the wedge behind the arm is how
recently each bearing was swept, on the same fade the blips use, so it is the
age of the data under it. glow is the theme's own bloom, on the
beam and the contacts and never the rings, so antiseptic, whose bloom is 0,
does not glow. motion-only is a motion tracker: only movers are
drawn, and still or not-yet-known returns are counted rather than painted.
stalks hang each contact's elevation off it; level is a tick, and
an unknown elevation gets no stalk at all.
import 'overscan'
import 'overscan/overscan.css'
<ov-radar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
trail=""
glow=""
></ov-radar>import { OvRadar } from 'overscan/react'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
trail=""
glow=""
/>import { OvRadar } from 'overscan/vue'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
trail=""
glow=""
/>import OvRadar from 'overscan/svelte/OvRadar.svelte'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
trail=""
glow=""
/>trail glow symbols: persistence and bloom, contacts as track symbolsmotion-only: movers only; still and unknown are counted under the scopestalks: height above or below the plane; level is a tick, unknown has noneimport 'overscan'
import 'overscan/overscan.css'
<ov-radar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
motion-only=""
></ov-radar>import { OvRadar } from 'overscan/react'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
motion-only=""
/>import { OvRadar } from 'overscan/vue'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
motion-only=""
/>import OvRadar from 'overscan/svelte/OvRadar.svelte'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
motion-only=""
/>import 'overscan'
import 'overscan/overscan.css'
<ov-radar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
stalks=""
></ov-radar>import { OvRadar } from 'overscan/react'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
stalks=""
/>import { OvRadar } from 'overscan/vue'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
stalks=""
/>import OvRadar from 'overscan/svelte/OvRadar.svelte'
<OvRadar
source="tracks"
range="800"
rings="4"
period="4"
symbols=""
stalks=""
/>import 'overscan'
import 'overscan/overscan.css'
<ov-radar
source="contacts"
range="800"
rings="3"
period="4"
trail=""
glow=""
></ov-radar>import { OvRadar } from 'overscan/react'
<OvRadar
source="contacts"
range="800"
rings="3"
period="4"
trail=""
glow=""
/>import { OvRadar } from 'overscan/vue'
<OvRadar
source="contacts"
range="800"
rings="3"
period="4"
trail=""
glow=""
/>import OvRadar from 'overscan/svelte/OvRadar.svelte'
<OvRadar
source="contacts"
range="800"
rings="3"
period="4"
trail=""
glow=""
/>