Book XII · Proposition 6
Pyramids which are of the same height and have polygonal bases are to one another as the bases.Heath, 1908
Needs: XII.5
Rests on: C.N.1, C.N.2, C.N.3, C.N.4, C.N.5, Def.10, Def.15, Def.4, Post.5, XI.Def.13, XI.Def.9
Depth: 18 steps of argument above the first principles. Parallel postulate: needed.
Nothing. It draws no intersections and reads nothing off the picture.
@proposition("XII.6", THEOREM, sample=samples3.polygon_base)
def prop_XII_6(a: Point3, b: Point3, c: Point3, d: Point3) -> Out:
"""Pyramids of the same height on polygonal bases are to one another as
their bases."""
hypothesis("the four points are not in one plane", not coplanar(a, b, c, d))
# A four-sided base, which is two triangles: XII.6 is XII.5 carried to any
# polygon by dividing the base into the triangles XII.5 already answers for.
corner = posit3(Point3(b.x + (c.x - a.x), b.y + (c.y - a.y), b.z + (c.z - a.z)), "P")
base = (a, b, corner, c)
first = _drawn(pyramid(base, d, "the pyramid on the polygon"))
wider = tuple(Point3(a.x + 2 * (point.x - a.x), a.y + 2 * (point.y - a.y),
a.z + 2 * (point.z - a.z)) for point in base)
apex = posit3(Point3(d.x + (b.x - a.x), d.y + (b.y - a.y), d.z + (b.z - a.z)), "R")
second = _drawn(pyramid(wider, apex, "the second such pyramid"))
because(prop_XII_5, a, b, c, d)
bases = (polygon_area(base), polygon_area(wider))
pieces = (content(pyramid((a, b, corner), d)) + content(pyramid((a, corner, c), d)))
claim("the pyramid on the polygon is the pyramids on the triangles it "
"divides into", "XII.5", pieces == content(first))
claim("as the base is to the base, so is the pyramid to the pyramid",
"XII.6", bases[0] * content(second) == bases[1] * content(first))
return Out(pyramids=(first, second), bases=bases)