Lines, Proportions & Spreads¶
A Line Is a Proportion Derived from the Relationship of Two Points
We are often taught to picture a line as an “infinite string of points.” Constructively, the truth is sharper:
A point on a line cannot be known unless that line intersects another element. Anything else is speculation.
When two distinct points \(P_1 = (x_1, y_1)\) and \(P_2 = (x_2, y_2)\) are given (G.2), aligning the unmarked straightedge projects a constant linear proportion [ P₁ P₂ ] across the field:
Notice the symmetry: interchanging \(P_1\) and \(P_2\) negates \((a, b, c)\) simultaneously, leaving the locus [ P₁ P₂ ] = [ P₂ P₁ ] invariant.
Exact Line–Line Selection¶
Two non-parallel lines \(a_1 x + b_1 y + c_1 = 0\) and \(a_2 x + b_2 y + c_2 = 0\) with non-vanishing determinant \(\Delta = a_1 b_2 - a_2 b_1 \neq 0\) select a unique rational point in the same algebraic number field as their coefficients:
Pure straightedge operations (projective incidence) never introduce square roots! Because of this algebraic closure, theorems of pure collinearity and concurrency—such as Pappus’s Hexagon Theorem and the Complete Quadrangle construction of the Harmonic Fourth (geometor/pappus)—hold over any commutative field.
Inclination Without Transcendental Angles: Spread¶
Rather than measuring the inclination of two lines with transcendental arccos angles, geometor.model and geometor/wildberger compute their exact rational spread:
\(s = 0\) — parallel or coincident lines (\(0^\circ\));
\(s = \frac{1}{4}\) — \(30^\circ\) / \(150^\circ\) inclination;
\(s = \frac{1}{2}\) — diagonal \(45^\circ\) inclination (\(\sqrt{2}\) square diagonal);
\(s = \frac{3}{4}\) — equilateral \(60^\circ\) / \(120^\circ\) inclination (\(\sqrt{3}\) Vesica Piscis);
\(s = 1\) — perpendicularity (\(90^\circ\) orthogonal poles);
\(s = \frac{5 \mp \sqrt{5}}{8}\) — pentagonal / decagonal golden inclinations (\(36^\circ\) and \(72^\circ\)).
import sympy as sp
import sympy.geometry as spg
from geometor.model.invariants import line_spread
l_base = spg.Line2D((0, 0), (1, 0))
l_vesica = spg.Line2D((0, 0), (sp.Rational(1, 2), sp.sqrt(3) / 2))
assert line_spread(l_base, l_vesica) == sp.Rational(3, 4)