Regular subdivisons of point configurations

Regular subdivsions of point sets appear in several different applications. polymake allows to define a regular subdivision of a point configuration (e.g. the lattice points of a lattice polytope) via weights on the points. The weights define a height function on the points, and the subdivision is the lower hull of the polytope defined by the lifted points.

ATTENTION: SYNTAX SUBJECT TO CHANGE SOON!

Generic Weights

If it is known in advance that the given weights are generic (i.e. define a triangulation), then we can obtain the subdivison as a simplicial complex, otherwise we obtain a list of subsets of the vertices, where each set defines a face of the subdivision.

Point configurations are contained in the application polytope. We assume first that our weights are generic, and construct a simplicial complex.

polytope > $pc=new PointConfiguration<Rational>(POINTS=>[[1,0,0],[1,1,0],[1,0,1],[1,1,1],[1,2,2]], WEIGHTS=>[0,0,0,-1,0], GENERIC_WEIGHTS=>1);

The given five points define a planar 4-gon with interior point (1,1). The weights must be given in the same order as the vertices. So in our case the interior point has weight -1, and all others have weight 0. This is a generic choice of weights, which we certify by setting GENERIC_WEIGHTS to true.

We can now ask for the triangulation given by these weights:

print $pc->TRIANGULATION->FACETS;
{0 1 2}
{1 2 3}

In the case of a triangulation we can ask for many other properties, e.g.

print $pc->TRIANGULATION->MINIMAL_NON_FACES;
{1 2}
{0 4}

Check the properties of SimplicialComplex for available properties. You can also visualize your triangulation:

$pc->VISUAL->TRIANGULATION;

If you use javaview for visualization, then this might look similar to the following:

Observe the order of the commands: We want to have a visualization of our point set together with our triangulation. We can also reverse the order of the commands: $pc→TRIANGULATION→VISUAL. In this case, we obtain a visualization of the triangulation as an abstract simplicial complex.

Non-generic Weights

If your weights are not generic or you are unsure, then you should ask for a POLYTOPAL_SUBDIVISION (note that calling TRIANGULATION does not lead to an error, but if WEIGHTS_GENERIC is not set to true, then another method for triangulation is chosen, so the TRIANGULATION then has nothing to do with your weights.)

polytope > $pc=new PointConfiguration(POINTS=>[[1,0,0,0],[1,0,1,0],[1,1,0,0],[1,1,1,0],[1,0,0,1],[1,1,0,1],[1,1,1,0],[1,1,1,1],[1,0,0,2]], WEIGHTS=>[1,0,0,1,0,1,1,0,1]);

These weights do not define a triangulation:

print $pc->POLYTOPAL_SUBDIVISION;
{0 1 2 4}
{1 4 7 8}
{1 2 4 7}
{2 4 5 7 8}
{1 2 3 6 7}

Starting with the coming version 2.9.8 you can also visualize your subdivision, if it is at most 3-dimensional:

polytope > $pc->VISUAL->POLYTOPAL_SUBDIVISION;

For the image we have used the javaview option Explode Group of Geometries to make the cells of the subdivision visible.

Currently there are not many properties that can be derived from such a subdivision. Sometimes interesting are the splits of this subdivision:

print $pc->SPLITS;
0 1 -1 -1
0 1 -1 0
0 1 0 -1
1 -1 -1 -1
1 -1 -1 -1/2
1 -1 -1 1
1 -1 1/2 -1/2
1 -1/2 -1 -1/2
1 0 -1 -1

This list gives all hyperplanes that generate a regular subdivision into exactly two cells. With

print $pc->SPLITS_IN_SUBDIVISION;
{3 5}

you can obtain the list of those splits that are coarsenings of your polytopal subdivision.

Tropical Plücker Vectors and Matroid Decompositions of Hypersimplices

A tropical Plücker vector (which is a special lifting function on the vertices of the (d,n)-hypersimplex induces a particularly interesting kind of regular subdivision. The example below is for d=2 and n=4.

polytope > $p=new Vector<Rational>([1,0,0,0,0,0]);
polytope > $msd=regular_subdivision(hypersimplex(2,4)->VERTICES,$p);

Each cell of this subdivision is a matroid polytope, that is, the convex hull of characteristic vectors of the bases of some matroid on n elements of rank d. The vertices of the hypersimplices happen to be listed in lexicographical ordering. With this extra knowledge we can cook up suitable labels for pretty-printing the maximal cells.

polytope > print rows_labeled($msd,undef,["12","13","14","23","24","34"]);
0:12 13 14 23 24
1:13 14 23 24 34

In this case the (2,4)-hypersimplex (a.k.a. the regular octahedron) is split into two egyptian pyramids.

tutorial/regular_subdivisions.txt · Last modified: 2012/02/25 13:36 by joswig
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki