Description
A Polyhedron represents a rational polyhedron. It can be bounded or unbounded, need not be full dimensional or may contain a proper affine subspace. It can be empty or zero dimensional. It is saved as a hash table which contains the vertices, generating rays, and the basis of the lineality space of the Polyhedron as well as the defining affine half-spaces and hyperplanes. The output of a Polyhedron looks like this:
i1 : convexHull(matrix {{0,0,-1,-1},{2,-2,1,-1},{0,0,0,0}},matrix {{1},{0},{0}})
o1 = Polyhedron{...1...}
o1 : Polyhedron
|
This table displays a short summary of the properties of the Polyhedron. Note that the number of rays and vertices are modulo the lineality space. So for example a line in QQ^2 has one vertex and no rays. However, one can not access the above information directly, because this is just a virtual hash table generated for the output. The data defining a Polyhedron is extracted by the functions included in this package. A Polyhedron can be constructed as the convex hull (
convexHull) of a set of points and a set of rays or as the intersection (
polyhedronFromHData) of a set of affine half-spaces and affine hyperplanes.
For example, consider the square and the square with an emerging ray for the convex hull:
i2 : V = matrix {{1,1,-1,-1},{1,-1,1,-1}}
o2 = | 1 1 -1 -1 |
| 1 -1 1 -1 |
2 4
o2 : Matrix ZZ <-- ZZ
|
i3 : convexHull V
o3 = Polyhedron{...1...}
o3 : Polyhedron
|
i4 : R = matrix {{1},{1}}
o4 = | 1 |
| 1 |
2 1
o4 : Matrix ZZ <-- ZZ
|
i5 : convexHull(V,R)
o5 = Polyhedron{...1...}
o5 : Polyhedron
|
If we take the intersection of the half-spaces defined by the directions of the vertices and 1 we get the crosspolytope:
i6 : HS = transpose V
o6 = | 1 1 |
| 1 -1 |
| -1 1 |
| -1 -1 |
4 2
o6 : Matrix ZZ <-- ZZ
|
i7 : v = R || R
o7 = | 1 |
| 1 |
| 1 |
| 1 |
4 1
o7 : Matrix ZZ <-- ZZ
|
i8 : P = polyhedronFromHData(HS,v)
o8 = P
o8 : Polyhedron
|
i9 : vertices P
o9 = | -1 1 0 0 |
| 0 0 -1 1 |
2 4
o9 : Matrix QQ <-- QQ
|
This can for example be embedded in 3-space on height 1:
i10 : HS = HS | matrix {{0},{0},{0},{0}}
o10 = | 1 1 0 |
| 1 -1 0 |
| -1 1 0 |
| -1 -1 0 |
4 3
o10 : Matrix ZZ <-- ZZ
|
i11 : hyperplanesTmp = matrix {{0,0,1}}
o11 = | 0 0 1 |
1 3
o11 : Matrix ZZ <-- ZZ
|
i12 : w = matrix {{1}}
o12 = | 1 |
1 1
o12 : Matrix ZZ <-- ZZ
|
i13 : P = polyhedronFromHData(HS,v,hyperplanesTmp,w)
o13 = P
o13 : Polyhedron
|
i14 : vertices P
o14 = | -1 1 0 0 |
| 0 0 -1 1 |
| 1 1 1 1 |
3 4
o14 : Matrix QQ <-- QQ
|
See also
Working with polyhedra.