Book XI · Proposition 26

XI.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

Every step, checked

What it needs, and what needs it

Needs: XI.23

Used by: XI.27 XI.35

Rests on: XI.Def.11

Depth: 1 steps of argument above the first principles. Parallel postulate: not needed.

What it takes on trust

Nothing. It draws no intersections and reads nothing off the picture.

The proposition as code

@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)