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 23 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.4 Other pre-defined surfaces

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 (17.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();;



14.4 Other pre-defined surfaces

This section contains all other pre-defined surfaces that are not covered in one of the other sections.

14.4-1 OneFace
‣ OneFace( )( operation )

Returns: a simplicial surface

Return a one-face as a simplicial surface. A one-face consists of one triangular face.

14.4-2 Butterfly
‣ Butterfly( )( operation )

Returns: a simplicial surface

Return a butterfly as a simplicial surface. A butterfly consists of two triangular faces that share an edge.

14.4-3 JanusHead
‣ JanusHead( )( operation )

Returns: a simplicial surface

Return a Janus-Head as a simplicial surface. A Janus-Head consists of two triangular faces that share three edges.

gap> janus := JanusHead();;



14.4-4 SimplicialUmbrella
‣ SimplicialUmbrella( nrFaces )( operation )
‣ SimplicialGon( nrFaces )( operation )

Returns: a simplicial surface

Return a simplicial surface consisting of one closed umbrella-path with nrFaces triangles. The labels are assigned according to the following illustration, in which n is nrFaces:

gap> umb4 := SimplicialUmbrella(4);
simplicial surface (5 vertices, 8 edges, and 4 faces)
gap> VerticesOfEdges(umb4);
[ [ 1, 5 ], [ 2, 5 ], [ 3, 5 ], [ 4, 5 ], [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 1, 4 ] ]
gap> EdgesOfFaces(umb4);
[ [ 1, 2, 5 ], [ 2, 3, 6 ], [ 3, 4, 7 ], [ 1, 4, 8 ] ]
gap> VerticesOfFaces(umb4);
[ [ 1, 2, 5 ], [ 2, 3, 5 ], [ 3, 4, 5 ], [ 1, 4, 5 ] ]
gap> umb2 := SimplicialUmbrella(2);
simplicial surface (3 vertices, 4 edges, and 2 faces)
gap> VerticesOfEdges(umb2);
[ [ 1, 3 ], [ 2, 3 ], [ 1, 2 ], [ 1, 2 ] ]
gap> EdgesOfFaces(umb2);
[ [ 1, 2, 3 ], [ 1, 2, 4 ] ]

14.4-5 SimplicialDoubleUmbrella
‣ SimplicialDoubleUmbrella( nrFaces )( operation )
‣ SimplicialDoubleGon( nrFaces )( operation )

Returns: a simplicial surface

Return a simplicial surface consisting of two closed umbrella-paths with nrFaces triangles which are joined at their boundary. The labels of one umbrella are assigned according to the illustration for SimplicialUmbrella, the additional vertex is labelled with nrFaces+2, the incident edges to this vertex are labelled from 2*nrFaces+1 to 4*nrFaces and the incident faces are labelled from nrFaces+1 to 2*nrFaces.

gap> doubleumb2:=SimplicialDoubleUmbrella(2);
simplicial surface (4 vertices, 6 edges, and 4 faces)
gap> VerticesOfEdges(doubleumb2);
[ [ 1, 3 ], [ 2, 3 ], [ 1, 2 ], [ 1, 2 ], [ 1, 4 ], [ 2, 4 ] ]
gap> EdgesOfFaces(doubleumb2);
[ [ 1, 2, 3 ], [ 1, 2, 4 ], [ 3, 5, 6 ], [ 4, 5, 6 ] ]
gap> doubleumb4:=SimplicialDoubleUmbrella(4);
simplicial surface (6 vertices, 12 edges, and 8 faces)
gap> IsIsomorphic(doubleumb4,Octahedron());
true

14.4-6 SimplicialOpenGeodesic
‣ SimplicialOpenGeodesic( nrFaces )( operation )
‣ SimplicialStrip( nrFaces )( operation )

Returns: a simplicial surface

Return a simplicial surface consisting of one non-closed geodesic-path with nrFaces triangles. The labels are assigned according to the following illustration (for n odd), in which n is nrFaces.

gap> geo4 := SimplicialOpenGeodesic(4);
simplicial surface (6 vertices, 9 edges, and 4 faces)
gap> VerticesOfEdges(geo4);
[ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ], [ 3, 5 ], [ 4, 5 ], 
  [ 4, 6 ], [ 5, 6 ] ]
gap> EdgesOfFaces(geo4);
[ [ 1, 2, 3 ], [ 3, 4, 5 ], [ 5, 6, 7 ], [ 7, 8, 9 ] ]
gap> VerticesOfFaces(geo4);
[ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 5 ], [ 4, 5, 6 ] ]
gap> 
gap> geo5 := SimplicialStrip(5);
simplicial surface (7 vertices, 11 edges, and 5 faces)
gap> VerticesOfEdges(geo5);
[ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ], [ 3, 5 ], [ 4, 5 ], 
  [ 4, 6 ], [ 5, 6 ], [ 5, 7 ], [ 6, 7 ] ]
gap> EdgesOfFaces(geo5);
[ [ 1, 2, 3 ], [ 3, 4, 5 ], [ 5, 6, 7 ], [ 7, 8, 9 ], [ 9, 10, 11 ] ]

14.4-7 SimplicialClosedGeodesic
‣ SimplicialClosedGeodesic( nrFaces )( operation )
‣ SimplicialGeodesic( nrFaces )( operation )

Returns: a simplicial surface

Return a simplicial surface consisting of one closed geodesic-path with nrFaces triangles (at least 3 faces are needed). The labels are assigned according to the following illustration (for n odd), in which n is nrFaces.

gap> geo3 := SimplicialClosedGeodesic(3);
simplicial surface (3 vertices, 6 edges, and 3 faces)
gap> VerticesOfEdges(geo3);
[ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 1, 2 ], [ 1, 3 ], [ 2, 3 ] ]
gap> EdgesOfFaces(geo3);
[ [ 1, 2, 3 ], [ 3, 4, 5 ], [ 1, 5, 6 ] ]
gap> VerticesOfFaces(geo3);
[ [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ] ]
gap> 
gap> geo6 := SimplicialGeodesic(6);
simplicial surface (6 vertices, 12 edges, and 6 faces)
gap> VerticesOfEdges(geo6);
[ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ], [ 3, 5 ], [ 4, 5 ],
  [ 4, 6 ], [ 5, 6 ], [ 1, 5 ], [ 1, 6 ], [ 2, 6 ] ]
gap> EdgesOfFaces(geo6);
[ [ 1, 2, 3 ], [ 3, 4, 5 ], [ 5, 6, 7 ], [ 7, 8, 9 ], [ 9, 10, 11 ], [ 1, 11, 12 ] ]

14.4-8 SimplexRingByIsomorphismType
‣ SimplexRingByIsomorphismType( isomorphismType )( operation )

Returns: a simplicial surface

This method constructs a simplex ring given its isomorphism type. A simplicial surface is a simplex ring if it is connected and each face has exactly one inner and two outer edges. They can be described uniquely by their isomorphism type which is a list [n_1,...,n_k]. The simplex ring with isomorphism type [n_1,...,n_k] has n_1+...+n_k faces and is constructed based on a closed geodesic with k faces where the i-th faces is subdivided in n_i faces. How the subdivision is defined can be seen in the picture below. The incidences between vertices and faces can also be observed there.

As an example consider the simplex ring with isomorphism type [1,2,3], where the left and right edge have to be identified:

gap> ring:=SimplexRingByIsomorphismType([1,2,3]);
simplicial surface (6 vertices, 12 edges, and 6 faces)
gap> UmbrellaDescriptorOfSurface(ring);
[ [ 2, 1, 6 ], [ 1, 2, 3, 4 ], [ 2, 3 ], [ 1, 6, 5, 4, 3 ], [ 4, 5 ], [ 5, 6 ] ]
gap> IsClosedSurface(ring);
false
gap> IsOrientableSurface(ring);
false
gap> IsSimplexRing(ring);
true

14.4-9 SimplexStringByIsomorphismType
‣ SimplexStringByIsomorphismType( isomorphismType )( operation )

Returns: a simplicial surface

This method constructs a simplex string given its isomorphism type. A simplicial surface is a simplex string if it is connected and it is a face or exactly two of its faces (end faces) have two boundary edges and all other faces have exactly one inner and two outer edges. They can be described uniquely by their isomorphism type which is a list [n_1,...,n_k]. The simplex string with isomorphism type [n_1,...,n_k] has n_1+...+n_k faces and is constructed based on a strip with k faces where the i-th faces is subdivided in n_i faces, as shown in 14.4-8.

As an example consider the simplex string with isomorphism type [1,2,3]:

gap> string:=SimplexStringByIsomorphismType([1,2,3]);
simplicial surface (8 vertices, 13 edges, and 6 faces)
gap> UmbrellaDescriptorOfSurface(string);
[ [ 1 ], [ 1, 2 ], [ 4, 3, 2, 1 ], [ 2, 3 ], [ 3, 4, 5, 6 ], [ 4, 5 ], [ 5, 6 ], 
  [ 6 ] ]
gap> IsSimplexString(string);
true
 [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 23 Ind

generated by GAPDoc2HTML