Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

14 Library of predefined surfaces
 14.1 Accessing all stored complexes
 14.2 Accessing the classifications
 14.3 Platonic solids

14 Library of predefined surfaces

While chapter 4 described how to construct polygonal complexes from their incidence structure, this chapter describes how to access the pre-defined surfaces and complexes in this package.

The library serves two main purposes:

Section 14.1 explains the main syntax that is used to access the library. It also contains the methods to access the complete collection of complexes.

Section 14.2 covers the specific classes of polygonal complexes that are (fully) contained in the package.

14.1 Accessing all stored complexes

This section explains how all polygonal complexes that are stored in the library can be accessed. This is done by the method AllTwistedPolygonalComplexes (14.1-1), but it can also be restricted further, for example by AllSimplicialSurfaces.

The syntax of this call can be a bit confusing at first, since it was chosen to give the user much flexibility. We will start with a few examples. The call

gap> AllSimplicialSurfaces( NumberOfFaces, 3 );
[ simplicial surface (3 vertices, 6 edges, and 3 faces)  ]

returns all simplicial surfaces from the library that have exactly three faces.

If we wanted all simplicial surfaces with 6, 8, or 9 edges, we could use

gap> AllSimplicialSurfaces( NumberOfEdges, [6,8,9] );
[ simplicial surface (3 vertices, 9 edges, and 6 faces),
  simplicial surface (4 vertices, 6 edges, and 4 faces), 
  simplicial surface (3 vertices, 6 edges, and 3 faces), 
  simplicial surface (3 vertices, 6 edges, and 4 faces) ]

It is even possible to combine these restrictions. To obtain all simplicial surfaces with 6 edges and 4 faces, we could use

gap> AllSimplicialSurfaces(NumberOfEdges, 6, NumberOfFaces, [4]);
[ simplicial surface (4 vertices, 6 edges, and 4 faces), 
  simplicial surface (3 vertices, 6 edges, and 4 faces) ]

In general, the arguments of AllSimplicialSurfaces alternate between a function and its result (or list of possible results). The strength of this syntax derives from its versatility - it is actually possible to use every conceivable function. Obviously, we can use functions defined by this package. For example, the following command returns all predefined tori:

gap> AllPolygonalComplexes( IsConnectedComplex, true, 
>            IsOrientableComplex, true, EulerCharacteristic, 0 );
[ simplicial surface (3 vertices, 9 edges, and 6 faces), 
  simplicial surface (9 vertices, 27 edges, and 18 faces), 
  simplicial surface (4 vertices, 12 edges, and 8 faces) ]

Since it is tedious to always write true, there is a shortcut implemented that interprets "missing" results as true:

gap> AllPolygonalComplexes( IsConnectedComplex, IsOrientableComplex, EulerCharacteristic, 0 );
[ simplicial surface (3 vertices, 9 edges, and 6 faces), 
  simplicial surface (9 vertices, 27 edges, and 18 faces), 
  simplicial surface (4 vertices, 12 edges, and 8 faces) ]

If this is not sufficient, any user can define their own functions to search for specific surfaces. For example, if one was interested in all non-orientable simplicial surfaces such that one vertex in incident to every face, we could find them like this:

gap> HasCentralVertex := function(surface)
>        local intersect;
>        intersect := Intersection(VerticesOfFaces(surface));
>        return Length(intersect) > 0;
> end;
function( surface ) ... end
gap> AllSimplicialSurfaces(IsOrientableSurface, false, HasCentralVertex);
[ simplicial surface (3 vertices, 6 edges, and 3 faces), 
  simplicial surface (3 vertices, 6 edges, and 4 faces), 
  simplicial surface (4 vertices, 12 edges, and 8 faces) ]

14.1-1 AllTwistedPolygonalComplexes
‣ AllTwistedPolygonalComplexes( fct1, res1, fct2, res2, ... )( function )
‣ AllPolygonalComplexes( fct1, res1, fct2, res2, ... )( function )
‣ AllTriangularComplexes( fct1, res1, fct2, res2, ... )( function )
‣ AllPolygonalSurfaces( fct1, res1, fct2, res2, ... )( function )
‣ AllSimplicialSurfaces( fct1, res1, fct2, res2, ... )( function )

Returns: a list of polygonal complexes

Return all twisted polygonal complexes that are stored in the library with the desired properties.

The number of arguments can be arbitrarily long. In general the arguments have to come in pairs. The first argument in such a pair is a function and the second argument is either the result of that function or a list of accepted results. For example

gap> AllTwistedPolygonalComplexes( NumberOfVertices, [10,12], IsOrientableComplex, false );

returns all non-orientable twisted polygonal complexes with 10 or 12 vertices from the library.

To obtain the platonic solids a custom function has to be written:

gap> DegreeRegular := function( complex )
>      local degrees;
>  
>      degrees := Set(FaceDegreesOfVertices(complex));
>      return Size(degrees) = 1 and degrees[1] >= 3;
>    end;;
gap> plat := AllPolygonalComplexes( IsPolygonalSurface, true,
>      EulerCharacteristic, 2, DegreeRegular, true,
>      IsConnectedSurface, true, IsClosedSurface, true);;
gap> Size(plat);
5

For user convenience the following simplifications may be used:

For example, the above command for the platonic solids can be simplified as follows:

gap> plat := AllPolygonalSurfaces( EulerCharacteristic, 2, DegreeRegular,
>      IsConnectedSurface, IsClosedSurface );;
gap> Size(plat);
5

To get just the platonic solids with triangular faces, the following command may be used:

gap> plat := AllSimplicialSurfaces( EulerCharacteristic, 2, DegreeRegular,
>      IsConnectedSurface, IsClosedSurface );;
gap> Size(plat);
3

To obtain just tetrahedron and octahedron, the number of faces can be restricted:

gap> plat := AllPolygonalComplexes( [4,8], 
>               EulerCharacteristic, 2, IsConnectedComplex, IsClosedComplex );;
gap> Size(plat);
2

14.2 Accessing the classifications

In this section, different classifications of polygonal complexes are described. In most cases, these are infinite families. The documentation of each method explains in detail which part of the classification can be relied upon.

The general syntax is identical to the one from AllTwistedPolygonalComplexes or AllSimplicialSurfaces (14.1-1).

Currently, the following classes are contained in the package:

TODO needs nicer introduction and streamlining

14.2-1 AllSimplicialSpheres
‣ AllSimplicialSpheres( fct1, res1, fct2, res2, ... )( function )

Returns: a list of simplicial surfaces

This method has the same syntax as AllTwistedPolygonalComplexes and AllSimplicialSurfaces (14.1-1), but is restricted to the simplicial spheres without 3--waists, i.e.

Since this class is infinite, not all of them can be accessed. Currently, all of those surfaces with at most 28 faces are stored.

gap> AllSimplicialSpheres([4,8,10]);
[ simplicial surface (7 vertices, 15 edges, and 10 faces), 
  simplicial surface (4 vertices, 6 edges, and 4 faces), 
  simplicial surface (6 vertices, 12 edges, and 8 faces) ]
gap> AllSimplicialSpheres(NumberOfVertices, 8);
[ simplicial surface (8 vertices, 18 edges, and 12 faces), 
  simplicial surface (8 vertices, 18 edges, and 12 faces) ]

14.2-2 AllGeodesicSelfDualSurfaces
‣ AllGeodesicSelfDualSurfaces( fct1, res1, fct2, res2, ... )( function )

Returns: a list of simplicial surfaces

This method has the same syntax as AllTwistedPolygonalComplexes and AllSimplicialSurfaces (14.1-1), but is restricted to the geodesic self-dual surfaces (TODO).

Since these are (probably) infinite, this method currently only gives access to the following surfaces:

gap> AllGeodesicSelfDualSurfaces();
[ simplicial surface (6 vertices, 15 edges, and 10 faces), 
  simplicial surface (3 vertices, 9 edges, and 6 faces), 
  simplicial surface (9 vertices, 27 edges, and 18 faces), 
  simplicial surface (21 vertices, 84 edges, and 56 faces), 
  simplicial surface (42 vertices, 168 edges, and 112 faces), 
  twisted polygonal surface (6 vertices, 24 edges, 16 faces, and 96 chambers),
  twisted polygonal surface (3 vertices, 12 edges, 8 faces, and 48 chambers), 
  simplicial surface (190 vertices, 855 edges, and 570 faces), 
  twisted polygonal surface (38 vertices, 171 edges, 114 faces, and 684 chambers),
  simplicial surface (10 vertices, 45 edges, and 30 faces) ]

14.2-3 AllDiscs
‣ AllDiscs( fct1, res1, fct2, res2, ... )( function )

Returns: a list of simplicial surfaces

This method has the same syntax as AllTwistedPolygonalComplexes and AllSimplicialSurfaces (14.1-1), but is restricted to simplicial discs. (TODO)

This list is very incomplete at the moment TODO.

gap> discs := AllDiscs();;
gap> Length(discs);
87
gap> AllDiscs(function(surf) return 7 in FaceDegreesOfVertices(surf); end);
[]
gap> List(discs, UmbrellaPathsOfVertices);;

14.3 Platonic solids

This section covers the platonic solids, i.e.

Since it might be useful to see the incidence structure at a glance, every one of those methods features a net of the constructed polygonal structure. Those nets are constructed by the method DrawSurfaceToTikz (16.2-1).

It also contains the method AllPlatonicSurfaces (14.3-1) to find those platonic surfaces with specified properties.

14.3-1 AllPlatonicSurfaces
‣ AllPlatonicSurfaces( fct1, res1, fct2, res2, ... )( function )

Returns: a list of polygonal surfaces

This method has the same syntax as AllTwistedPolygonalComplexes and AllSimplicialSurfaces (14.1-1), but is restricted to the platonic surfaces:

gap> AllPlatonicSurfaces();
[ simplicial surface (4 vertices, 6 edges, and 4 faces), 
  polygonal surface (8 vertices, 12 edges, and 6 faces), 
  simplicial surface (6 vertices, 12 edges, and 8 faces), 
  polygonal surface (20 vertices, 30 edges, and 12 faces), 
  simplicial surface (12 vertices, 30 edges, and 20 faces) ]

14.3-2 Tetrahedron
‣ Tetrahedron( )( operation )

Returns: a simplicial surface

Return a tetrahedron as a simplicial surface. A tetrahedron is the platonic solid with four triangular faces.

gap> tetra := Tetrahedron();;



14.3-3 Cube
‣ Cube( )( operation )

Returns: a polygonal surface

Return a cube as a polygonal surface. A cube is the platonic solid with six square faces.

gap> cube := Cube();;



14.3-4 Octahedron
‣ Octahedron( )( operation )

Returns: a simplicial surface

Return an octahedron as a simplicial surface. An octahedron is the platonic solid with eight triangular faces.

gap> octa := Octahedron();;



14.3-5 Dodecahedron
‣ Dodecahedron( )( operation )

Returns: a polygonal surface

Return a dodecahedron as a polygonal surface. A dodecahedron ist the platonic solid with 12 pentagon faces.

gap> dode := Dodecahedron();;



14.3-6 Icosahedron
‣ Icosahedron( )( operation )

Returns: a simplicial surface

Return an icosahedron as a simplicial surface. An icosahedron is the platonic solid with 20 triangular faces.

gap> ico := Icosahedron();;



 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Bib Ind

generated by GAPDoc2HTML