REFERENCES:
[Fetter2012] | Hans L. Fetter, “A Polyhedron Full of Surprises”, Mathematics Magazine 85 (2012), no. 5, 334-342. |
A class of constructors for commonly used, famous, or interesting polytopes.
TESTS:
sage: TestSuite(polytopes).run(skip='_test_pickling')
Return the Birkhoff polytope with n! vertices. Each vertex is a (flattened) n by n permutation matrix.
INPUT:
EXAMPLES:
sage: b3 = polytopes.Birkhoff_polytope(3)
sage: b3.n_vertices()
6
A non-uniform icosahedron with interesting properties.
See [Fetter2012] for details.
OUTPUT:
The Kirkman icosahedron, a 3-dimensional polyhedron with 20 vertices, 20 faces, and 38 edges.
EXAMPLES:
sage: KI = polytopes.Kirkman_icosahedron()
sage: KI.f_vector()
(1, 20, 38, 20, 1)
sage: vertices = KI.vertices()
sage: edges = [[vector(edge[0]),vector(edge[1])] for edge in KI.bounded_edges()]
sage: edge_lengths = [norm(edge[0]-edge[1]) for edge in edges]
sage: union(edge_lengths)
[7, 8, 9, 11, 12, 14, 16]
Also known as the truncated icosahedron, an Archimedean solid. It has 32 faces and 60 vertices. Rational coordinates are not exact.
EXAMPLES:
sage: bb = polytopes.buckyball()
sage: bb.n_vertices()
60
sage: bb.n_inequalities() # number of facets
32
sage: bb.base_ring()
Rational Field
Return a cross-polytope in dimension dim_n. These are the generalization of the octahedron.
INPUT:
OUTPUT:
A Polyhedron object of the dim_n-dimensional cross-polytope, with exact coordinates.
EXAMPLES:
sage: four_cross = polytopes.cross_polytope(4)
sage: four_cross.is_simple()
False
sage: four_cross.n_vertices()
8
An Archimedean solid with 12 vertices and 14 faces. Dual to the rhombic dodecahedron.
EXAMPLES:
sage: co = polytopes.cuboctahedron()
sage: co.n_vertices()
12
sage: co.n_inequalities()
14
Return a cyclic polytope.
INPUT:
OUTPUT:
A cyclic polytope of dim_n with points_n vertices on the moment curve (t,t^2,...,t^n), as Polyhedron object.
EXAMPLES:
sage: c = polytopes.cyclic_polytope(4,10)
sage: c.n_inequalities()
35
Return a dodecahedron.
INPUT:
EXAMPLES:
sage: d12 = polytopes.dodecahedron()
sage: d12.n_inequalities()
12
Return an Archimedean solid with 48 vertices and 26 faces.
EXAMPLES:
sage: gr = polytopes.great_rhombicuboctahedron()
sage: gr.n_vertices()
48
sage: gr.n_inequalities()
26
The hypersimplex in dimension dim_n with d choose k vertices, projected into (dim_n - 1) dimensions.
INPUT:
OUTPUT:
A Polyhedron object representing the hypersimplex.
EXAMPLES:
sage: h_4_2 = polytopes.hypersimplex(4,2) # combinatorially equivalent to octahedron
sage: h_4_2.n_vertices()
6
sage: h_4_2.n_inequalities()
8
Return an icosahedron with edge length 1.
INPUT:
OUTPUT:
A Polyhedron object of a floating point or rational approximation to the regular 3d icosahedron.
If base_ring=QQ, a rational approximation is used and the points are not exactly the vertices of the icosahedron. The icosahedron’s coordinates contain the golden ratio, so there is no exact representation possible.
EXAMPLES:
sage: ico = polytopes.icosahedron()
sage: sum(sum( ico.vertex_adjacency_matrix() ))/2
30
Return a cube in the given dimension
INPUT:
OUTPUT:
A Polyhedron object of the dim_n-dimensional cube, with exact coordinates.
EXAMPLES:
sage: four_cube = polytopes.n_cube(4)
sage: four_cube.is_simple()
True
Return a rational approximation to a regular simplex in dimension dim_n.
INPUT:
OUTPUT:
A Polyhedron object of the dim_n-dimensional simplex.
EXAMPLES:
sage: s5 = polytopes.n_simplex(5)
sage: s5.dim()
5
A matrix of rational approximations to orthonormal vectors to (1,...,1).
INPUT:
OUTPUT:
A matrix over QQ whose rows are close to an orthonormal basis to the subspace normal to (1,...,1).
EXAMPLES:
sage: from sage.geometry.polyhedron.library import Polytopes
sage: m = Polytopes.orthonormal_1(5)
sage: m
[ 70711/100000 -7071/10000 0 0 0]
[ 1633/4000 1633/4000 -81649/100000 0 0]
[ 7217/25000 7217/25000 7217/25000 -43301/50000 0]
[ 22361/100000 22361/100000 22361/100000 22361/100000 -44721/50000]
Return the parallelotope spanned by the generators.
INPUT:
OUTPUT:
The parallelotope. This is the multi-dimensional generalization of a parallelogram (2 generators) and a parallelepiped (3 generators).
EXAMPLES:
sage: polytopes.parallelotope([ (1,0), (0,1) ])
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 4 vertices
sage: polytopes.parallelotope([[1,2,3,4],[0,1,0,7],[3,1,0,2],[0,0,1,0]])
A 4-dimensional polyhedron in QQ^4 defined as the convex hull of 16 vertices
This face-regular, vertex-uniform polytope is dual to the truncated icosahedron. It has 60 faces and 32 vertices.
EXAMPLES:
sage: pd = polytopes.pentakis_dodecahedron()
sage: pd.n_vertices()
32
sage: pd.n_inequalities() # number of facets
60
The standard permutahedron of (1,...,n) projected into n-1 dimensions.
INPUT:
OUTPUT:
A Polyhedron object representing the permutahedron.
EXAMPLES:
sage: perm4 = polytopes.permutahedron(4)
sage: perm4
A 3-dimensional polyhedron in QQ^3 defined as the convex hull of 24 vertices
sage: polytopes.permutahedron(5).show() # long time
Graphics3d Object
Take a ndim-dimensional point and projects it onto the plane perpendicular to (1,1,...,1).
INPUT:
- fpoint - a list of ndim numbers
EXAMPLES:
sage: from sage.geometry.polyhedron.library import Polytopes
sage: Polytopes.project_1([1,1,1,1,2])
[1/100000, 1/100000, 1/50000, -559/625]
Return a regular polygon with \(n\) vertices. Over the rational field the vertices may not be exact.
INPUT:
EXAMPLES:
sage: octagon = polytopes.regular_polygon(8)
sage: len(octagon.vertices())
8
sage: polytopes.regular_polygon(3).vertices()
(A vertex at (-125283617/144665060, -500399958596723/1000799917193445),
A vertex at (0, 1),
A vertex at (94875313/109552575, -1000799917193444/2001599834386889))
sage: polytopes.regular_polygon(3, base_ring=RealField(100)).vertices()
(A vertex at (0.00000000000000000000000000000, 1.0000000000000000000000000000),
A vertex at (0.86602540378443864676372317075, -0.50000000000000000000000000000),
A vertex at (-0.86602540378443864676372317076, -0.50000000000000000000000000000))
sage: polytopes.regular_polygon(3, base_ring=RealField(10)).vertices()
(A vertex at (0.00, 1.0),
A vertex at (0.87, -0.50),
A vertex at (-0.86, -0.50))
This face-regular, vertex-uniform polytope is dual to the cuboctahedron. It has 14 vertices and 12 faces.
EXAMPLES:
sage: rd = polytopes.rhombic_dodecahedron()
sage: rd.n_vertices()
14
sage: rd.n_inequalities()
12
Return the standard 600-cell polytope.
OUTPUT:
A Polyhedron object of the 4-dimensional 600-cell, a regular polytope. In many ways this is an analogue of the icosahedron. The coordinates of this polytope are rational approximations of the true coordinates of the 600-cell, some of which involve the (irrational) golden ratio.
EXAMPLES:
sage: p600 = polytopes.six_hundred_cell() # not tested - very long time
sage: len(list(p600.bounded_edges())) # not tested - very long time
120
Return an Archimedean solid with 24 vertices and 26 faces.
EXAMPLES:
sage: sr = polytopes.small_rhombicuboctahedron()
sage: sr.n_vertices()
24
sage: sr.n_inequalities()
26
Return the standard 24-cell polytope.
OUTPUT:
A Polyhedron object of the 4-dimensional 24-cell, a regular polytope. The coordinates of this polytope are exact.
EXAMPLES:
sage: p24 = polytopes.twenty_four_cell()
sage: v = next(p24.vertex_generator())
sage: for adj in v.neighbors(): print adj
A vertex at (-1/2, -1/2, -1/2, 1/2)
A vertex at (-1/2, -1/2, 1/2, -1/2)
A vertex at (-1, 0, 0, 0)
A vertex at (-1/2, 1/2, -1/2, -1/2)
A vertex at (0, -1, 0, 0)
A vertex at (0, 0, -1, 0)
A vertex at (0, 0, 0, -1)
A vertex at (1/2, -1/2, -1/2, -1/2)