Package-level declarations
The projection tier: composite operations built from the products. Projection (project, b ∨ (a ∧ b^☆)) carries a shape onto a higher-grade target; antiprojection (antiproject, b ∧ (a ∨ b^☆)) carries one onto a lower-grade target. Both divide by the target's self-pairing b ∘ b, so the receiver's weight and orientation carry through — an imaginary target (negative self-pairing) negates every component, and a target whose self-pairing vanishes (a line at infinity, a zero-radius circle, coincident endpoints) floods the division instead of throwing. The one bounded target, a Segment, is reached through its carrier's projection and clamped to the segment — no self-pairing of its own.
The project family
| Pairing | Result |
|---|---|
RoundPoint project Line | the perpendicular foot, sized by the squared distance |
RoundPoint project Circle | the incident round point on the radial line through the point |
RoundPoint project Dipole | the carrier point dividing the endpoints in squared-distance ratio |
FlatPoint project Line | the perpendicular foot |
FlatPoint project Circle | the Dipole where the circle crosses the radial line through the point |
FlatPoint project Segment | the nearest point of the segment itself: the perpendicular foot when it falls within the segment, else the nearer endpoint |
Dipole project Line | the Dipole cut from the endpoint circle by the line |
Dipole project Circle | the Dipole where the circle meets the orthogonal endpoint circle |
A shape already on its target projects to itself. There is deliberately no RoundPoint project FlatPoint: projecting a point onto a point is content-free — the answer is the target's location.
The antiproject family
Antiprojection's inner product is the weight contraction a ∨ b^☆ — the blade-wise negation of the exposed bulk contract — so the compositional spelling b join (a contract b) comes back orientation-flipped relative to the fused forms.
Point targets are one geometric operation with two spellings: the fused forms live on FlatPoint, the representation the algebra keeps non-degenerate, and the RoundPoint overloads forward through toFlat (the raw round-target forms collapse to the target's own weighted point-circle for null lifts). A circle antiprojected onto a point returns a Line, not a circle: every flat-point blade carries e4, so no round weight can come back — the flat limit of carrying the circle's attitude over to the point.
| Pairing | Result |
|---|---|
Line antiproject FlatPointLine antiproject RoundPoint | the parallel through the point |
Circle antiproject FlatPointCircle antiproject RoundPoint | the Line through the point perpendicular to its radial |
Line antiproject Dipole | the Circle through the endpoints incident with the line's bisector crossing |
Circle antiproject Dipole | the Circle through the endpoints paired to the circle |
A circle already through the endpoints antiprojects to itself. Dipole and FlatPoint have no antiprojection receivers: their only lower-grade target is a round point, where the operation degenerates.
Degenerate inputs: a line parallel to the dipole's carrier — or a collapsing round weight — throws DegenerateCircleException carrying the straightened line.
Functions
Circle antiproject Dipole => Circle
Returns the circle through the dipole's endpoints incident with this circle's pairing point on their perpendicular bisector.
Circle antiproject FlatPoint => Line
Returns the line through the point running the circle's way at the point's bearing — perpendicular to the radial through it.
Circle antiproject RoundPoint => Line
Returns the line through the point running the circle's way at the point's bearing — perpendicular to the radial through it.
Line antiproject Dipole => Circle
Returns the circle through the dipole's endpoints incident with the line's crossing of their perpendicular bisector.
Line antiproject FlatPoint => Line
Returns the parallel to the line through the point.
Line antiproject RoundPoint => Line
Returns the parallel to the line through the point.
Dipole project Circle => Dipole
Returns the dipole where the circle meets the circle through this dipole's endpoints orthogonal to it.
Dipole project Line => Dipole
Returns the dipole where the line cuts the circle through this dipole's endpoints centered on it.
FlatPoint project Segment => FlatPoint
Returns the point of the segment nearest to this point: the perpendicular foot when it falls within the segment, else the nearer endpoint.
FlatPoint project Circle => Dipole
Returns the dipole where the circle crosses the radial line through the point.
FlatPoint project Line => FlatPoint
Returns the point's perpendicular foot on the line.
RoundPoint project Circle => RoundPoint
Returns the round point that pairs the point into the circle: on the radial line through the point, incident with the circle.
RoundPoint project Dipole => RoundPoint
Returns the point of the dipole's carrier dividing the endpoints in the ratio of their squared distances from the given point.
RoundPoint project Line => RoundPoint
Returns the point's perpendicular foot on the line, sized by the squared distance to it.