Gojo · Measured offsets

Measured offset refinement

An offset can have a known direction and an exact distance before its endpoints have rational coordinates. Keep the unfinished construction, then read it at a chosen resolution.

Known structure
Current read
Still retained

The selected subdivision changes observation detail. It does not change the requested distance, create measurement noise or choose a tolerance. The back view changes only the picture.

Look at the syntax

The authored fixture. Preparation constructs a shared scale slot and its two interpolation requests. The driver binds the actual preparation and its captured whole into each observation request.

gojo 1;

let $space = carrier();
let $x = carrier();
let $y = carrier(unit_of($x));
let $length = carrier(unit_of($x));
let $squared = carrier(product_units(unit_of($x), unit_of($x)));
let $ux = span($x, 0, 1);
let $uy = span($y, 0, 1);
let $metric = group(group_on($space, $ux, $uy), frame(
    ($ux -> $ux) -> at($squared, 1), ($ux -> $uy) -> at($squared, 0),
    ($uy -> $uy) -> at($squared, 1)));

// Source geometry and chosen side. No offset endpoint is supplied.
let $a = group_on($space, at($x, 0), at($y, 0));
let $b = group_on($space, at($x, 1), at($y, 1));
let $edge = $a -> $b;
let $reach = span(carrier(), 0, 1);
let $calibration = $reach -> span($length, 0, 2);
let $side = $a -> group_on($space, at($x, -1), at($y, 0));
let $offset = group($edge, $metric, orthogonal($edge) -> $calibration, $side);

// One parameter whole scales the calculated unnormalized normal once.
// Preparation retains the shared open scale, its square equation and two
// ordinary interpolation requests. It does not force a rational endpoint.
let $scale = carrier();
let $scale_whole = span($scale, 0, 1);
root group($offset, $scale_whole);

// Bind ?prepared to the actual preparation witness, and ?prepared_whole to
// its captured scale whole. These are references, not equal-looking copies.
let $ones = carrier(unit_of($scale));
let $tenths = carrier(subdivision(unit_of($scale), 10));
let $hundredths = carrier(subdivision(unit_of($scale), 100));
let $thousandths = carrier(subdivision(unit_of($scale), 1000));
root group(?prepared, span($ones, 0, 1) -> ?prepared_whole);
root group(?prepared, span($tenths, 0, 10) -> ?prepared_whole);
root group(?prepared, span($hundredths, 0, 100) -> ?prepared_whole);
root group(?prepared, span($thousandths, 0, 1000) -> ?prepared_whole);
The connected partial construction
normal = (−1, 1)
2 × s² = 4, with s ≥ 0

A′ = interpolate(A, A + normal, s)
B′ = interpolate(B, B + normal, s)

Both requests use the same s.
B′ − A′ = B − A = (1, 1)

This is a readable summary of the prepared structure. The stored graph contains the actual repeated scale slot, metric square relation, parameter whole, output slots and ordinary affine interpolation requests. No square-root opcode or approximate point is added to the syntax.

What is checked?

The displayed interval traces are checked against the kernel. Both endpoint expressions use the same bounded sample, so their difference cancels exactly even at the coarsest displayed resolution. Numeric restoration preserves those references. Altered equations, endpoint probes, output slots and subdivision correspondences are rejected.

The browser draws a band from the checked interval bounds. Its two edges show the permitted enclosure extremes, not two exact offset solutions. The attached equation further constrains the actual offset. This example does not discover the metric or model a distribution of physical distances.

Next: Joined offsets →