Dipole

constructor(gx: Double, gy: Double, gz: Double, px: Double, py: Double, pz: Double)

Builds the dipole (gx, gy, gz, px, py, pz), unitized, zero-sanitized, and blade-checked.

A round weight ‖(gx, gy)‖ that doesn't round to zero is divided out of every component, leaving the g-part the carrier line's unit normal and offset. A weight that rounds to zero at the SCALE quantum splits on gz: non-zero leaves the dipole at infinity with all six components raw (at-infinity weights are data — no unitization, no canonicalization), while a whole g-part of zero means the blade lies in the e41/e42/e43 span — it is the flat point (px, py, pz), not a dipole, and the constructor throws. Accepted components must satisfy the Plücker blade constraint gx·px + gy·py + gz·pz = 0 — what separates a factorizable wedge of two points from a general bivector; the residual is evaluated on the unitized components and must round to zero. Signed zeroes sanitize to +0.0.

Parameters

gx

The e23 component: the carrier normal's x-component.

gy

The e31 component: the carrier normal's y-component.

gz

The e12 component: the carrier's offset term.

px

The e41 component of the flat bulk.

py

The e42 component of the flat bulk.

pz

The e43 component of the flat bulk.

Throws

When the whole g-part rounds to zero — the blade collapses to the payload FlatPoint(px, py, pz).

When the Plücker residual doesn't round to zero; carries the residual for diagnostics.