Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Components

This content has been copy-pasted from the previous guide. It is up-to-date but should be improved at some point.


Darts

Darts are the finest grain composing combinatorial maps. The structure of the map is given by the relationship between darts, defined through beta functions. Additionally, a null dart is defined, we denote it .

In our implementation, darts exist implicitly through indexing and their associated data. There are no dart objects in a strict sense, there is only a given number of dart, their associated data ordered by an array-like logic, and a record of “unused” slots that can be used for dart insertion. Because of this, we assimilate dart and dart index.

Beta functions

Each combinatorial map of dimension N defines N beta functions linking the set of darts together (e.g. a 2-map contains β1 and β2). These functions model the topology of the map, giving information about connections of the different cells of the map / mesh. In our case, we mostly use:

  • β1, a (partial) permutation,
  • β2, β3, two (partial) involutions

Additionally, we define β0 as the inverse of β1, i.e. β01(d)) = d. This comes from a practical consideration for performances and efficiency of the implementation.

The βi functions can be interpreted as navigation functions along the i-th dimensions: β1 makes you navigate along the edges, β2 along the faces, etc. This can be generalized to N dimensions, but we are only interested in 2D and 3D at the moment.

Properties

For a given dart d, we define two properties:

  • d is i-free if βi(d) = ∅, being the null dart
  • d is free if it is i-free for all i

Construction Example

Embed
Start from unorganized darts
Embed
Organize those using β1
Embed
Add β2 images; For details on vertices, refer to the Embedding section
Embed
Build up a larger map