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. β0(β1(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