navUiKit.geom — the maths every widget shares.
World convention: +Y is up, NORTH is world -Z and EAST is world +X (the
direction an unrotated camera looks is north). A heading is degrees
clockwise from north, 0..360. Map space is the ground plane: (x, z).
wrap360(d: number) → number
| arg | type | description |
|---|
| d | number | |
angleDiff(a: number, b: number) → number
Signed smallest difference a - b in degrees, -180..180.
| arg | type | description |
|---|
| a | number | |
| b | number | |
headingOf(dx: number, dz: number) → number
Heading (degrees clockwise from north) of a direction on the ground.
| arg | type | description |
|---|
| dx | number | |
| dz | number | |
rotate(q: any, vx: number, vy: number, vz: number) → void
Rotate a vector by a quaternion {x,y,z,w}.
| arg | type | description |
|---|
| q | any | |
| vx | number | |
| vy | number | |
| vz | number | |
yawOfQuat(q: any) → number
Heading a rotation faces (its local -Z projected on the ground).
view(pos: any, rot: any, fov: number, w: number, h: number) → any
A view: what a camera sees. pos {x,y,z}, rot quaternion, fov (vertical, deg), w/h (UI points).
| arg | type | description |
|---|
| pos | any | |
| rot | any | |
| fov | number | |
| w | number | |
| h | number | |
project(v: any, x: number, y: number, z: number) → void
Project a world point through a view. Returns sx, sy (UI points), depth
(metres along the view, negative = behind) and whether it is on screen.
| arg | type | description |
|---|
| v | any | |
| x | number | |
| y | number | |
| z | number | |
edgePin(cx: number, cy: number, dx: number, dy: number, x0: number, y0: number, x1: number, y1: number) → void
Pin a direction from the screen centre to the inside of a rectangle.
dx, dy are screen-space (y down). Returns the point and the angle (radians, 0 = right).
| arg | type | description |
|---|
| cx | number | |
| cy | number | |
| dx | number | |
| dy | number | |
| x0 | number | |
| y0 | number | |
| x1 | number | |
| y1 | number | |
clipEdge(poly: { any }, inside: (any) → void
| arg | type | description |
|---|
| poly | { any } | |
| inside | (any | |
clipRect(poly: { any }, x0: number, y0: number, x1: number, y1: number) → void
Clip a polygon ({{x,y},...}) to an axis-aligned rectangle.
| arg | type | description |
|---|
| poly | { any } | |
| x0 | number | |
| y0 | number | |
| x1 | number | |
| y1 | number | |
clipCircle(poly: { any }, cx: number, cy: number, r: number) → void
Clip a polygon to a circle (centre cx, cy, radius r).
| arg | type | description |
|---|
| poly | { any } | |
| cx | number | |
| cy | number | |
| r | number | |
circlePoints(cx: number, cy: number, r: number, sides: number?) → void
Points of a circle, for outlines.
| arg | type | description |
|---|
| cx | number | |
| cy | number | |
| r | number | |
| sides | number? | |
easeOutCubic(t: number) → number
Ease helpers for animation.
| arg | type | description |
|---|
| t | number | |
easeOutBack(t: number) → number
| arg | type | description |
|---|
| t | number | |
lerp(a: number, b: number, t: number) → number
| arg | type | description |
|---|
| a | number | |
| b | number | |
| t | number | |
damp(a: number, b: number, rate: number, dt: number) → number
Frame-rate independent smoothing toward a target.
| arg | type | description |
|---|
| a | number | |
| b | number | |
| rate | number | |
| dt | number | |
clipSegCircle(ax: number, ay: number, bx: number, by: number, cx: number, cy: number, r: number) → void
Clip a segment to a circle. Returns the clipped ends or nil when it misses.
| arg | type | description |
|---|
| ax | number | |
| ay | number | |
| bx | number | |
| by | number | |
| cx | number | |
| cy | number | |
| r | number | |
clipSegRect(ax: number, ay: number, bx: number, by: number, x0: number, y0: number, x1: number, y1: number) → void
Clip a segment to a rectangle (Liang-Barsky). Nil when it misses.
| arg | type | description |
|---|
| ax | number | |
| ay | number | |
| bx | number | |
| by | number | |
| x0 | number | |
| y0 | number | |
| x1 | number | |
| y1 | number | |
distanceLabel(d: number) → string
Format a distance in metres for labels: "8 m", "120 m", "1.4 km".
| arg | type | description |
|---|
| d | number | |