Book XI · Proposition 26
On a given straight line, and at a given point on it, to construct a solid angle equal to a given solid angle.Heath, 1908
Needs: XI.23
Rests on: XI.Def.11
Depth: 1 steps of argument above the first principles. Parallel postulate: not needed.
Nothing. It draws no intersections and reads nothing off the picture.
@proposition("XI.26", CONSTRUCTION, sample=samples3.two_corners)
def prop_XI_26(o: Point3, a: Point3, b: Point3, c: Point3,
d: Point3, e: Point3, f: Point3, g: Point3) -> Out:
"""On a given straight line, and at a given point on it, construct a solid
angle equal to a given solid angle."""
hypothesis("the arms of the given angle are not in one plane",
not coplanar(o, a, b, c))
hypothesis("the given straight line has two distinct ends", d != e)
given = _solid_angle_of(o, (a, b, c))
hypothesis("no two of the given plane angles are together a straight angle",
all(sign(1 - angle.cos * angle.cos) > 0 for angle in given),
guard=True)
for arm in (a, b, c):
line3(o, arm)
line3(d, e, "the given straight line")
because(prop_XI_23, o, a, b, c)
arms = tuple(posit3(point, name) for point, name in
zip(_arms_making(d, vector_between(d, e), given), ("P", "Q", "R")))
for arm in arms:
line3(d, arm)
made = _solid_angle_of(d, arms)
claim("the first arm is set up along the given straight line, at the given "
"point on it", "XI.Def.11",
on_line3(arms[0], Line3.through(d, e))
and sign(dot3(vector_between(d, arms[0]), vector_between(d, e))) > 0)
claim("the angle constructed is contained by plane angles equal to the "
"given ones", "XI.26", made == given)
claim("and it is a solid angle, its arms not in one plane", "XI.23",
not coplanar(d, *arms))
return Out(corner=d, arms=arms, angles=made)