remove $$s

This commit is contained in:
Guillaume Damiand 2011-07-04 15:03:32 +00:00
parent 17f73fd851
commit 8c7d87ad57
1 changed files with 240 additions and 237 deletions

View File

@ -5,6 +5,10 @@
\def\betazero{\ccTexHtml{$\beta_0$}{&beta;<SUB>0</SUB>}}
\def\betaun{\ccTexHtml{$\beta_1$}{&beta;<SUB>1</SUB>}}
\def\betadeux{\ccTexHtml{$\beta_2$}{&beta;<SUB>2</SUB>}}
\def\betai{\ccTexHtml{$\beta_i$}{&beta;<SUB>i</SUB>}}
\def\pmun{\ccTexHtml{$p^{-1}$}{p<SUP>-1</SUP>}}
% \newcommand{\orb}[1]{&lang;#1&rang;}
\newcommand{\orb}[1]{\langle{}#1\rangle{}}
@ -27,14 +31,13 @@ dimension.\footnote{A 2D combinatorial map is equivalent to a halfedge
We denote \cell{i} for an \emph{i}-dimensional cell (for example in 3D,
0-cells are \emph{vertices}, 1-cells are \emph{edges}, 2-cells are
\emph{facets}, and 3-cells are \emph{volumes}). A \emph{boundary
relation} is defined on these cells, giving for each \cell{i} $c$
the set of \cells{(i-1)} contained in the boundary of $c$. Two cells
$c_1$ and $c_2$ are \emph{incident} if there is a path of cells,
relation} is defined on these cells, giving for each \cell{i} \emph{c}
the set of \cells{(i-1)} contained in the boundary of \emph{c}. Two cells
\emph{c1} and \emph{c2} are \emph{incident} if there is a path of cells,
starting from the cell of biggest dimension to the other cell, such
that each cell of the path (except the first one) belongs to the
boundary of the previous cell in the path. Two \cells{i} $c$ and $c'$
are \emph{adjacent} if there is an \cell{(i-1)} incident to both $c$
and $c'$. You can see an example of a 2D object and a 3D object in
boundary of the previous cell in the path. Two \cells{i} \emph{c3} and \emph{c4} are \emph{adjacent} if there is an \cell{(i-1)} incident to both \emph{c3}
and \emph{c4}. You can see an example of a 2D object and a 3D object in
Figure~\ref{fig-exemple-3Dmanifold} showing some cells of the
subdivision and some adjacency and incidence relations.
\begin{figure}[ht]
@ -55,21 +58,21 @@ subdivision and some adjacency and incidence relations.
\end{ccHtmlOnly}
\caption{Example of subdivided objects that can be described by
combinatorial maps. \textbf{Left}: A 2D object composed of
three facets (2-cells), named $f_1$, $f_2$ and $f_3$, nine
edges (1-cells) and seven vertices (0-cells). $f_1$ and
$f_2$ are adjacent along edge $e_1$, thus $e_1$ is incident both
to $f_1$ and $f_2$. Vertex $v_1$ is incident to edge $e_1$, thus
$v_1$ is incident to $f_1$ and $f_2$ by transitivity.
three facets (2-cells), named \emph{f1}, \emph{f2} and \emph{f3}, nine
edges (1-cells) and seven vertices (0-cells). \emph{f1} and
\emph{f2} are adjacent along edge \emph{e1}, thus \emph{e1} is incident both
to \emph{f1} and \emph{f2}. Vertex \emph{v1} is incident to edge \emph{e1}, thus
\emph{v1} is incident to \emph{f1} and \emph{f2} by transitivity.
\textbf{Right}: A 3D object (only partially represented for vertices and edges)
composed of three volumes (3-cells), named $vol_1$, $vol_2$
and $vol_3$, twelve facets (2-cells) (there is one facet
$f_4$ between $vol_1$ and $vol_2$, and similarly between $vol_1$
and $vol_3$ and $vol_2$ and $vol_3$), sixteen edges (1-cells),
and eight vertices (0-cells). $vol_1$ and $vol_2$ are adjacent
along facet $f_4$, thus $f_4$ is incident both to $vol_1$ and
$vol_2$. Edge $e_4$ is incident to the three facets between
$vol_1$ and $vol_2$, $vol_1$ and $vol_3$, and $vol_2$ and
$vol_3$. $e_4$ is also incident to the three volumes by
composed of three volumes (3-cells), named \emph{vol1}, \emph{vol2}
and \emph{vol3}, twelve facets (2-cells) (there is one facet
\emph{f4} between \emph{vol1} and \emph{vol2}, and similarly between \emph{vol1}
and \emph{vol3} and \emph{vol2} and \emph{vol3}), sixteen edges (1-cells),
and eight vertices (0-cells). \emph{vol1} and \emph{vol2} are adjacent
along facet \emph{f4}, thus \emph{f4} is incident both to \emph{vol1} and
\emph{vol2}. Edge \emph{e4} is incident to the three facets between
\emph{vol1} and \emph{vol2}, \emph{vol1} and \emph{vol3}, and \emph{vol2} and
\emph{vol3}. \emph{e4} is also incident to the three volumes by
transitivity.}
\label{fig-exemple-3Dmanifold}
\end{figure}
@ -79,8 +82,8 @@ cells and the incidence and adjacency relations, using only one basic
element called \emph{dart}, and a set of \emph{pointers} between these
darts. A dart can be thought as a part of an oriented edge (1-cell),
together with a part of incident cells of dimensions 0, 2, 3,\ldots,
\emph{d}. When a dart $d_0$ describe a part of an \cell{i} $c$, we say that
$d_0$ \emph{belongs} to $c$, and that $c$ \emph{contains} $d_0$. Let
\emph{d}. When a dart \emph{d0} describe a part of an \cell{i} \emph{c}, we say that
\emph{d0} \emph{belongs} to \emph{c}, and that \emph{c} \emph{contains} \emph{d0}. Let
us look at the example in Figure~\ref{fig-exemple-combi-maps} showing
the 2D and 3D combinatorial maps describing the two objects given in
Figure~\ref{fig-exemple-3Dmanifold}.
@ -110,7 +113,7 @@ Figure~\ref{fig-exemple-3Dmanifold}.
\end{figure}
First let us start in 2D (Figure~\ref{fig-exemple-combi-maps} (Left)).
Facet $f_1$ is described by four darts. These darts are linked
Facet \emph{f1} is described by four darts. These darts are linked
together with pointers. Starting from a dart and following a \betaun{} %\mbeta{1}
pointer, we get to a dart which belongs to the same facet but to the
next edge (1-cell, which explains the index~1 of~$\beta_1$).
@ -118,7 +121,7 @@ Starting from any dart and following $\beta_1$ pointers, we can reach
exactly all the darts describing the facet. Starting from a dart and
following a $\beta_2$ pointer, we get to a dart which belongs to the
same edge but to the neighboring facet (2-cell, which explains the
index~$2$ of~$\beta_2$). Starting from any dart and following
index~2 of~$\beta_2$). Starting from any dart and following
$\beta_2$ pointers, we can reach exactly all the darts describing the
edge (in 2D one or two darts).
@ -126,8 +129,8 @@ Things are slightly different for vertices. Indeed, each $\beta_i$
points to a dart belonging to a different \cell{i}, but also to a
different 0-cell (vertex). This is so because two linked darts have
opposite orientations. For this reason, starting from any dart
belonging to a vertex $v$, we have to follow $\beta_2$ then $\beta_1$
to reach exactly the darts describing the vertex $v$. In fact, by
belonging to a vertex \emph{v}, we have to follow $\beta_2$ then $\beta_1$
to reach exactly the darts describing the vertex \emph{v}. In fact, by
composing two $\beta_i$s, we always obtain a dart belonging to the
same vertex.
@ -138,7 +141,7 @@ example (Figure~\ref{fig-exemple-combi-maps} (Right)). In addition to
$\beta_1$ and $\beta_2$ of the 2D case, there is a new pointer
$\beta_3$.
If we take a closer look at the central edge $e_4$ shown in
If we take a closer look at the central edge \emph{e4} shown in
Figure~\ref{fig-intuitive-exemple} (Left), we can see that it is
described by six darts linked together. Starting from a dart and
following a $\beta_3$ pointer, we get to a dart which belongs to the
@ -148,7 +151,7 @@ a dart and following a $\beta_2$ pointer, we get to a dart which
belongs to the same edge, to the same volume, but to the neighboring
facet (2-cell). Starting from any of these six darts and following
$\beta_2$ and $\beta_3$ pointers, we can reach exactly the six darts
describing edge $e_4$.
describing edge \emph{e4}.
%
% Finally, following a $\beta_1$ pointer, we get to a
% dart which belongs to the same facet, the same volume but on the
@ -175,9 +178,9 @@ describing edge $e_4$.
\end{ccHtmlOnly}
\caption{Two zooms on the 3D combinatorial map given in
Figure~\ref{fig-exemple-combi-maps} (Right).
\textbf{Left}:~Zoom around the central edge $e_4$ which details
\textbf{Left}:~Zoom around the central edge \emph{e4} which details
the six darts belonging to the edge. \textbf{Right}:~Zoom
around the facet between volumes $vol_2$ and $vol_3$ which
around the facet between volumes \emph{vol2} and \emph{vol3} which
details the eight darts belonging to the facet.}
\label{fig-intuitive-exemple}
\end{figure}
@ -206,26 +209,26 @@ volume.
% this reason, starting from any dart belonging to a vertex $v$, we have
For vertices, we have to follow $\beta_2$ then $\beta_1$, and
$\beta_3$ then $\beta_1$ to reach exactly the darts describing the
vertex $v$. Indeed, as in 2D, we have to compose two $\beta_i$s to
vertex \emph{v}. Indeed, as in 2D, we have to compose two $\beta_i$s to
obtain a dart belonging to the same vertex.
In some cases, the general rule that by following a $\beta_i$ we get a
dart which belongs to the neighboring \cell{i} is not true, as for example
for darts belonging to the boundary of the represented
object. For example, in Figure~\ref{fig-exemple-3Dmanifold} (Left), any dart
$d_0$ that does not belong to edge $e_1$, $e_2$ and $e_3$
belongs to a 2-cell, and there is no neighboring facet along the edge containing $d_0$.
\emph{d0} that does not belong to edge \emph{e1}, \emph{e2} and \emph{e3}
belongs to a 2-cell, and there is no neighboring facet along the edge containing \emph{d0}.
% this is the
% case for $\beta_2$ for all the darts that does not belong to edge
% $e_1$, $e_2$ and $e_3$.
% Indeed, these darts belong to a 2-cell, and
% there is no neighboring facet along the edge containing these darts.
Another example is in Figure~\ref{fig-exemple-3Dmanifold} (Right), for
any dart $d_0$ that belongs to facet $f_5$.
any dart \emph{d0} that belongs to facet \emph{f5}.
% this is the case for
% $\beta_3$ for example for all the darts belonging to facet
% $f_5$. Indeed, these darts
$d_0$ belongs to volume $vol_2$, but there is no neighboring volume
\emph{d0} belongs to volume \emph{vol2}, but there is no neighboring volume
along this facet. The general rule is also not true for unbounded
cells. For example if we remove a dart in
Figure~\ref{fig-exemple-combi-maps} (Left), we obtain an unbounded
@ -233,7 +236,7 @@ facet having a dart without next dart for $\beta_1$, and if we remove
a facet in Figure~\ref{fig-exemple-combi-maps} (Right), we obtain an
unbounded volume having some darts without neighboring facet for
$\beta_2$. In such a case, there is a particular value called
$\varnothing$ used to describe that a dart $d_0$ is not linked to
$\varnothing$ used to describe that a dart \emph{d0} is not linked to
another dart in dimension~\emph{i}.
% No it is false (case when c_i=c'_i) and we exchange also c_0...
@ -302,20 +305,20 @@ Section~\ref{sec_definition}, and a package description is given in
Section~\ref{sec-software-design}.
\subsection{Combinatorial Map and Darts}\label{ssec-combi-map-and-darts}
A \emph{d}D combinatorial map is a set of darts $D$. A dart $d_0$ is an
element that can be \emph{linked} with $d+1$ darts by pointers called
$\mb{i}$, with $0 \leq i \leq d$. Dart $d_0$ is said \emph{i-free}
when $\mb{i}(d_0)=\varnothing$. Each $\mb{i}$, for $2 \leq i \leq d$,
is its own inverse, i.e., if dart $d_0$ is not \emph{i}-free, then
$\mb{i}(\mb{i}(d_0))=d_0$. This is different for $\mb{0}$ and
$\mb{1}$: $\mb{0}$ is the inverse of $\mb{1}$, i.e., if darts $d_1$
and $d_2$ are such that $\mb{1}(d_1)=d_2$, then
$\mb{0}(d_2)=d_1$. Given dart $d_1$, if there is no dart $d_2$ such
that $\mb{1}(d_2)=d_1$, then $\mb{0}(d_1)=\varnothing$. $\varnothing$
is a constant, which does not belong to the set of darts $D$ of the
A \emph{d}D combinatorial map is a set of darts \emph{D}. A dart \emph{d0} is an
element that can be \emph{linked} with \emph{d+1} darts by pointers called
$\mb{i}$, with 0 $\leq$ \emph{i} $\leq$ \emph{d}. Dart \emph{d0} is said \emph{i-free}
when $\mb{i}$(\emph{d0})=$\varnothing$. Each $\mb{i}$, for 2 $\leq$ \emph{i} $\leq$ \emph{d},
is its own inverse, i.e., if dart \emph{d0} is not \emph{i}-free, then
$\mb{i}$($\mb{i}$(\emph{d0}))=\emph{d0}. This is different for $\mb{0}$ and
$\mb{1}$: $\mb{0}$ is the inverse of $\mb{1}$, i.e., if darts \emph{d1}
and \emph{d2} are such that $\mb{1}$(\emph{d1})=\emph{d2}, then
$\mb{0}$(\emph{d2})=\emph{d1}. Given dart \emph{d1}, if there is no dart \emph{d2} such
that $\mb{1}$(\emph{d2})=\emph{d1}, then $\mb{0}$(\emph{d1})=$\varnothing$. $\varnothing$
is a constant, which does not belong to the set of darts \emph{D} of the
combinatorial map. However, by definition $\varnothing$ is linked with
itself for all $\beta_i$s: $\forall i$, $0 \leq i \leq d$,
$\mb{i}(\varnothing)=\varnothing$.
itself for all $\beta_i$s: $\forall$ \emph{i}, 0 $\leq$ \emph{i} $\leq$ \emph{d},
$\mb{i}(\varnothing)$=$\varnothing$.
% There is a particular value called
% $\varnothing$ used to describe that a dart $d_0$ is not linked to
@ -333,16 +336,16 @@ $\mb{i}(\varnothing)=\varnothing$.
A combinatorial map is \emph{without i-boundary} if there is no
\emph{i}-free dart, and it is \emph{without boundary} if it is without
\emph{i}-boundary for all dimensions $1 \leq i \leq d$.
\emph{i}-boundary for all dimensions 1 $\leq$ \emph{i} $\leq$ \emph{d}.
We show in Figure~\ref{fig-exemple-carte3d} a 3D object and the
corresponding 3D combinatorial map. This map has 40 darts represented
by arrows, some darts being numbered. In this combinatorial map, we
have for example $\beta_1(1)=2$, $\beta_2(1)=10$, and
$\beta_3(1)=5$. This combinatorial map is without 1-boundary and
2-boundary, but has some 3-boundary, because some darts are $3$-free,
for example $\beta_3(10)=\varnothing$ and $\beta_3(12)=\varnothing$.
have for example $\beta_1$(1)=2, $\beta_2$(1)=10, and
$\beta_3$(1)=5. This combinatorial map is without 1-boundary and
2-boundary, but has some 3-boundary, because some darts are 3-free,
for example $\beta_3$(10)=$\varnothing$ and $\beta_3$(12)=$\varnothing$.
%
\def\LargFig{.4\textwidth}
\begin{figure}
@ -361,14 +364,14 @@ for example $\beta_3(10)=\varnothing$ and $\beta_3(12)=\varnothing$.
</CENTER>
\end{ccHtmlOnly}
\caption{Example of a 3D combinatorial map. \textbf{Left}:~A 3D object
made of two volumes adjacent along facet $f_2$. \textbf{Right}:~The
made of two volumes adjacent along facet \emph{f2}. \textbf{Right}:~The
corresponding 3D combinatorial map. Darts are drawn with
arrows, sometimes numbered. Two darts linked by $\beta_1$ are
drawn consecutively (for example $\beta_1(10)=11$), and two
drawn consecutively (for example $\beta_1$(10)=11), and two
darts linked by $\beta_2$ are drawn parallel, in reverse
orientations, with a little gray segment joining them (for
example $\beta_2(1)=10$). $\beta_3$ pointers are represented by
blue segments (for example $\beta_3(1)=5$).}
example $\beta_2$(1)=10). $\beta_3$ pointers are represented by
blue segments (for example $\beta_3$(1)=5).}
\label{fig-exemple-carte3d}
\end{figure}
@ -384,7 +387,7 @@ given dart, and how incidence and adjacency relations are defined in
terms of darts.
The first important property of a combinatorial map is that
each dart belongs to an \cell{i}, $\forall i$, $0 \leq i \leq d$.
each dart belongs to an \cell{i}, $\forall$ \emph{i}, 0 $\leq$ \emph{i} $\leq$ \emph{d}.
For example in 3D, a dart belongs to a vertex, an edge, a facet, and a
volume. This means that a 3D combinatorial map containing an isolated
dart contains exactly one vertex, one edge, one facet and one volume.
@ -395,45 +398,45 @@ dart contains exactly one vertex, one edge, one facet and one volume.
The second important property is that cells of a combinatorial map
correspond to specific \emph{orbits}. Given a set
$S \subseteq \{\beta_1,\ldots,\beta_d\}$ and a dart
$d_0$, the \emph{orbit} $\orb{S}(d_0)$ is the set of darts that can be
reached from $d_0$ by following any combination of any $\beta_i$'s in $S$
\emph{S} $\subseteq \{\beta_1,\ldots,\beta_d\}$ and a dart
\emph{d0}, the \emph{orbit} $\orb{S}$(\emph{d0}) is the set of darts that can be
reached from \emph{d0} by following any combination of any $\beta_i$'s in \emph{S}
and their inverses (to simplify notations, we can use for example
$\orb{\beta_1,\beta_4}(d_0)$ to denote $\orb{S}(d_0)$ with
$S=\{\beta_1,\beta_4\}$).
$\orb{\beta_1,\beta_4}$(\emph{d0}) to denote $\orb{S}$(\emph{d0}) with
\emph{S}=$\{\beta_1,\beta_4\}$).
Given a dart $d_0$, in general, $\mb{i}(d_0)$ (with $1\leq i \leq d$)
belongs to the same cells as $d_0$, only the \cell{i} and 0-cell are
different. There are two exceptions: (1)~if $d_0$ is \emph{i}-free, then
$\mb{i}(d_0)=\varnothing$; (2)~if $\mb{i}(d_0)$ belongs to the same \cell{i}
as $d_0$ (case of multi-incidence). For example if an edge is an isolated
loop, it is incident twice to the same vertex, then given a dart $d_0$
belonging to this edge, $\mb{1}(d_0)$ goes to the next edge, which is in
Given a dart \emph{d0}, in general, $\mb{i}$(\emph{d0}) (with 1$\leq$ \emph{i} $\leq$ d)
belongs to the same cells as \emph{d0}, only the \cell{i} and 0-cell are
different. There are two exceptions: (1)~if \emph{d0} is \emph{i}-free, then
$\mb{i}$(\emph{d0})=$\varnothing$; (2)~if $\mb{i}$(\emph{d0}) belongs to the same \cell{i}
as \emph{d0} (case of multi-incidence). For example if an edge is an isolated
loop, it is incident twice to the same vertex, then given a dart \emph{d0}
belonging to this edge, $\mb{1}$(\emph{d0}) goes to the next edge, which is in
fact the same edge.
Since $\mb{i}(d_0)$ (with $1\leq i \leq d$) allows to change the
current \cell{i}, all the darts that can be reached from $d_0$ by
using any combination of $\mb{j}$'s, $\forall j$, $1 \leq j \leq d$ and
$j\neq i$ and their inverse are contained in the same \cell{i} as
$d_0$. The \cell{i} containing $d_0$ is defined in terms of orbit by
$\orb{\beta_1,\ldots,\beta_{i-1},\beta_{i+1},\ldots,\beta_d}(d_0)$.
Since $\mb{i}$(\emph{d0}) (with 1$\leq$ \emph{i} $\leq$ \emph{d}) allows to change the
current \cell{i}, all the darts that can be reached from \emph{d0} by
using any combination of $\mb{j}$'s, $\forall$ \emph{j}, 1 $\leq$ \emph{j} $\leq$ \emph{d} and
\emph{j}$\neq$ \emph{i} and their inverse are contained in the same \cell{i} as
\emph{d0}. The \cell{i} containing \emph{d0} is defined in terms of orbit by
$\orb{\beta_1,\ldots,\beta_{i-1},\beta_{i+1},\ldots,\beta_d}$(\emph{d0}).
% since $\mb{0}$ is not a relation
% (but only a notation for $\mb{1}^{-1}$). Thus,
There is a special case for vertices. Given a dart $d_0$, the set of
darts contained in the same vertex as $d_0$ are the darts that can be
reached from $d_0$ by using any combination of $\mb{i}\circ\mb{j}$,
$\forall i,j$, $1 \leq i< j \leq d$, and their inverse. The 0-cell
containing $d_0$ is defined in terms of orbit by
$\orb{\{\mb{i}\circ\mb{j}|\forall i,j: 1\leq i<j \leq d\}}(d_0)$.
There is a special case for vertices. Given a dart \emph{d0}, the set of
darts contained in the same vertex as \emph{d0} are the darts that can be
reached from \emph{d0} by using any combination of $\mb{i}\circ\mb{j}$,
$\forall$ \emph{i},\emph{j}, 1 $\leq$ \emph{i< j} $\leq$ \emph{d}, and their inverse. The 0-cell
containing \emph{d0} is defined in terms of orbit by
$\orb{\{\mb{i}\circ\mb{j}|\forall i,j: 1\leq \emph{i<j} \leq d\}}$(\emph{d0}).
% $\orb{\mb{1}\circ\mb{2},\ldots,\mb{1}\circ\mb{d},\{\mb{i}\circ\mb{j}|\forall
% i,j: 2\leq i<j \leq d\}}(a)$.
Orbit $\orb{\beta_1,\ldots,\beta_d}(d_0)$ is the \emph{connected
component} containing dart $d_0$. A combinatorial map is
Orbit $\orb{\beta_1,\ldots,\beta_d}$(\emph{d0}) is the \emph{connected
component} containing dart \emph{d0}. A combinatorial map is
\emph{connected} if this set is equal to the set of all the darts
of the combinatorial map.
%, and it is a subset of all the darts otherwise.
@ -447,7 +450,7 @@ of the combinatorial map.
% que tu fasse un passe pour obtenir plus de ``phrases sans $..$''
A last important property of cells is that for all dimensions \emph{i} the
set of \cells{i} forms a partition of the set of darts $D$, i.e. for
set of \cells{i} forms a partition of the set of darts \emph{D}, i.e. for
any \emph{i}, the union of the sets of darts of all the \cells{i} is equal
to \emph{D}, and the sets of darts of two different \cells{i} are disjoint.
@ -455,71 +458,71 @@ Let us give some examples of cells in 3D, for the 3D combinatorial map
of Figure~\ref{fig-exemple-carte3d}:
\begin{itemize}
\item All the darts belonging to the same edge can be obtained by any
combination of $\mb{2}$ and $\mb{3}$: for example edge $e$ of the
combination of $\mb{2}$ and $\mb{3}$: for example edge \emph{e} of the
object corresponds in the combinatorial map to the set of darts
$\{1,5,9,10\}$. Given any dart belonging to this edge, we retrieve
\{1,5,9,10\}. Given any dart belonging to this edge, we retrieve
all the other darts by, for example, a breadth-first traversal. In terms
of orbits, this 1-cell corresponds to $\orb{\beta_2,\beta_3}(1)$.
of orbits, this 1-cell corresponds to $\orb{\beta_2,\beta_3}$(1).
\item All the darts belonging to the same facet can be obtained by any
combination of $\mb{1}$ and $\mb{3}$: for example facet $f_2$
combination of $\mb{1}$ and $\mb{3}$: for example facet \emph{f2}
corresponds in the combinatorial map to the set of darts
$\{1,2,3,4,5,6,7,8\}$. Facet $f_1$ corresponds to the set of darts
$\{10,11,12,13\}$. Note that these last darts are $3$-free since
\{1,2,3,4,5,6,7,8\}. Facet \emph{f1} corresponds to the set of darts
\{10,11,12,13\}. Note that these last darts are 3-free since
there is no other volume sharing this facet. In terms of orbits,
$f_2$ corresponds to $\orb{\beta_1,\beta_3}(1)$ and $f_1$
corresponds to $\orb{\beta_1,\beta_3}(10)$.
\emph{f2} corresponds to $\orb{\beta_1,\beta_3}$(1) and \emph{f1}
corresponds to $\orb{\beta_1,\beta_3}$(10).
\item All the darts belonging to the same volume can be obtained by
any combination of $\mb{1}$ and $\mb{2}$: for example volume $vol_1$
any combination of $\mb{1}$ and $\mb{2}$: for example volume \emph{vol1}
corresponds in the combinatorial map to the set of the twenty-four
darts representing the cube. In terms of orbits, $vol_1$ corresponds
to $\orb{\beta_1,\beta_2}(1)$.
darts representing the cube. In terms of orbits, \emph{vol1} corresponds
to $\orb{\beta_1,\beta_2}$(1).
\item All the darts belonging to the same vertex can be obtained by
any combination of $\mb{1}\circ\mb{2}$,
$\mb{1}\circ\mb{3}$ and $\mb{2}\circ\mb{3}$ and their inverse
functions. In our example, vertex $v$ of the object corresponds
in the combinatorial map to the set of darts $\{1,6,9,11,14,15\}$.
functions. In our example, vertex \emph{v} of the object corresponds
in the combinatorial map to the set of darts \{1,6,9,11,14,15\}.
Starting from dart 1, we obtain for example dart
$14=(\mb{1}\circ\mb{2})^{-1}(1)=\mb{2}\circ\mb{0}(1)$, dart
$11=\mb{1}\circ\mb{2}(1)$, and dart $9=\mb{2}\circ\mb{3}(1)$.
14=$(\mb{1}\circ\mb{2})^{-1}$(1)=$\mb{2}\circ\mb{0}$(1), dart
11=$\mb{1}\circ\mb{2}$(1), and dart 9=$\mb{2}\circ\mb{3}$(1).
Intuitively, the set of darts corresponding to a vertex contains all
the darts represented by arrows starting from this vertex. In terms
of orbits, $v$ corresponds to $\orb{\beta_1 \circ \beta_2,
\beta_1 \circ \beta_3, \beta_2 \circ \beta_3}(1)$.
of orbits, \emph{v} corresponds to $\orb{\beta_1 \circ \beta_2,
\beta_1 \circ \beta_3, \beta_2 \circ \beta_3}$(1).
\end{itemize}
Using this definition of cells as sets of darts, we can retrieve all the
incidence and adjacency relations between the cells of the subdivision
in a combinatorial map. Two cells are \emph{incident} if the
intersection of their two sets of darts is non empty (whatever the
dimension of the two cells). Two \cells{i}, $1\leq i \leq d$, are
dimension of the two cells). Two \cells{i}, 1$\leq$ \emph{i} $\leq$ \emph{d}, are
\emph{adjacent} if there is an \cell{(i-1)} incident to both cells.
In the example of Figure~\ref{fig-exemple-carte3d}, vertex $v$ and
edge $e$ are incident since the intersection of the two corresponding
sets of darts is $\{1,9\}\neq \emptyset$. Vertex $v$ is incident to facet
$f_2$ since the intersection of the two corresponding sets of darts is
$\{1,6\}\neq \emptyset$. Edge $e$ and facet $f_1$ are incident
In the example of Figure~\ref{fig-exemple-carte3d}, vertex \emph{v} and
edge \emph{e} are incident since the intersection of the two corresponding
sets of darts is \{1,9\}$\neq \emptyset$. Vertex \emph{v} is incident to facet
\emph{f2} since the intersection of the two corresponding sets of darts is
\{1,6\}$\neq \emptyset$. Edge \emph{e} and facet \emph{f1} are incident
since the intersection of the two corresponding sets of darts is
$\{10\}\neq \emptyset$. Finally, facets $f_1$ and $f_2$ are adjacent
since edge $e$ is incident to both facets.
\{10\} $\neq \emptyset$. Finally, facets \emph{f1} and \emph{f2} are adjacent
since edge \emph{e} is incident to both facets.
We can consider \cells{i} in a dimension $d'$ with $i \leq d' \leq
d$. The idea is to consider the \cells{i} as if the combinatorial map
was in $d'$ dimension. For that, we only take into account the
$\beta_j$s for $j \leq d'$. The \cell{i} containing $d_0$ in dimension
$d'$ is the orbit
$\orb{\beta_1,\ldots,\beta_{i-1},\beta_{i+1},\ldots,\beta_{d'}}(d_0)$, and
We can consider \cells{i} in a dimension \emph{d'} with \emph{i} $\leq$ \emph{d'} $\leq$
\emph{d}. The idea is to consider the \cells{i} as if the combinatorial map
was in \emph{d'} dimension. For that, we only take into account the
$\beta_j$s for \emph{j} $\leq$ \emph{d'}. The \cell{i} containing \emph{d0} in dimension
\emph{d'} is the orbit
$\orb{\beta_1,\ldots,\beta_{i-1},\beta_{i+1},\ldots,\beta_{d'}}$(\emph{d0}), and
the 0-cell is the orbit $\orb{\{\mb{i}\circ\mb{j}|\forall i,j: 2\leq
i<j \leq d'\}}(d_0)$. By default, \cells{i} are considered in
dimension $d$, the dimension of the combinatorial map.
i<j \leq d'\}}$(\emph{d0}). By default, \cells{i} are considered in
dimension \emph{d}, the dimension of the combinatorial map.
In the example of Figure~\ref{fig-exemple-carte3d}, the 2-cell
containing dart 1 is facet $f_2$ which is the set of darts
$\{1,2,3,4,5,6,7,8\}$. If we consider the same 2-cell in dimension~2,
we obtain the set of darts $\{1,2,3,4\}$. Intuitively we ``forget''
containing dart 1 is facet \emph{f2} which is the set of darts
\{1,2,3,4,5,6,7,8\}. If we consider the same 2-cell in dimension~2,
we obtain the set of darts \{1,2,3,4\}. Intuitively we ``forget''
$\beta_3$ and we obtain the set of darts of the facet containing dart
1 restricted to the volume containing this dart.
@ -548,8 +551,8 @@ to \cells{i} by an injection:
Since \cells{i} are not explicitely represented in combinatorial maps,
the association between \cells{i} and \emph{i}-attributes is transferred to
darts: if attribute $a$ is associated to \cell{i} $c$, all the darts
belonging to $c$ are associated to $a$.
darts: if attribute \emph{a} is associated to \cell{i} \emph{c}, all the darts
belonging to \emph{c} are associated to \emph{a}.
% dart $d_0$ is associated to attribute $a$ when the \cell{i}
% containing $d_0$ is associated to $a$.
@ -609,7 +612,7 @@ define a global ``left'' and ``right'' direction in each point of the
embedded object. In 2D, quasi-manifolds are manifolds, but this is no
longer true in higher dimension as we can see in the example presented
in Figure~\ref{fig-quasivariete}. In this example, the object to the
right is not a manifold since the neighborhood of the point $p$ in the
right is not a manifold since the neighborhood of the point \emph{p} in the
object is not homeomorphic\footnote{Intuitively, two objects are
homeomorphic if each object can be continuously deformed into the
second one. In such a case, the two objects have exactly the same
@ -638,8 +641,8 @@ object is not homeomorphic\footnote{Intuitively, two objects are
Combinatorial maps can only represent quasi-manifolds due to the
definition of $\beta$ pointers. As we have seen in
Section~\ref{ssec-cells-in-map}, $\mb{i}(d_0)$ (with $1\leq i \leq d$)
belongs to the same cells as $d_0$, only the \cell{i} and 0-cell are
Section~\ref{ssec-cells-in-map}, $\mb{i}$(\emph{d0}) (with 1$\leq$ \emph{i} $\leq$ \emph{d})
belongs to the same cells as \emph{d0}, only the \cell{i} and 0-cell are
different. In other words, $\mb{i}$ links two \cells{i} that
share a common \cell{(i-1)}: it is not possible to link more than two
\cells{i} along a same \cell{(i-1)}.
@ -691,7 +694,7 @@ combinatorial maps.
Due to this additional condition, any objects can not be represented
by a combinatorial map but only orientable quasi-manifolds. We need to
study now the inverse relation. Does any set of darts linked together by
$\mb{i}$'s, with $0 \leq i \leq d$ correspond to a quasi-manifold? As
$\mb{i}$'s, with 0 $\leq$ \emph{i} $\leq$ \emph{d} correspond to a quasi-manifold? As
we can see in Figure~\ref{fig-pb-carte}, the answer is no.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -715,7 +718,7 @@ we can see in Figure~\ref{fig-pb-carte}, the answer is no.
$\beta_1$, $\beta_2$ and $\beta_3$ which does not represend a 3D
quasi-manifold, and thus which are not 3D combinatorial map.
\textbf{Left}: In this example, all the darts are 3-free except
$\beta_3(1)=5$ and $\beta_3(4)=6$ (and vice-versa).
$\beta_3$(1)=5 and $\beta_3$(4)=6 (and vice-versa).
\textbf{Right}: In this example, darts linked by $\beta_3$
are not in the same order in both 3-cells.
}
@ -726,8 +729,8 @@ we can see in Figure~\ref{fig-pb-carte}, the answer is no.
In the first example (Left), there are two 3-cells (one to the left
for the cube, a second to the right for the pyramid) which are
``partially adjacent'' along one 2-cell. Indeed, only two darts
of the 2-cell are linked by $\beta_3$. We have $\beta_3(1)=5$ and
$\beta_3(4)=6$ (and reciprocally). This configuration is not possible
of the 2-cell are linked by $\beta_3$. We have $\beta_3$(1)=5 and
$\beta_3$(4)=6 (and reciprocally). This configuration is not possible
in a quasi-manifold: two \cells{d} are always glue along an ``entire''
\cells{(d-1)}.
@ -860,7 +863,7 @@ accessed through \emph{handles}. A handle is a model of the
<img src="fig/png/Diagramme_class.png" alt=""></A>
</CENTER>
\end{ccHtmlOnly}
\caption{UML diagram of the main classes of the package. $k$ is the number of
\caption{UML diagram of the main classes of the package. \emph{k} is the number of
non void attributes.}
\label{fig-diagram_class}
\end{figure}
@ -893,8 +896,8 @@ handle to the type of used darts (given in the items class).
iterate over specific subsets of darts of the combinatorial map (see
Section~\ref{ssec-range}). It also defines several methods to link
and to unlink darts by $\beta_i$s (see
Section~\ref{ssec-link-darts}). We said that a dart $d_0$ is \emph{i}-free
if $\mb{i}(d_0)=\varnothing$. The $\varnothing$ constant is
Section~\ref{ssec-link-darts}). We said that a dart \emph{d0} is \emph{i}-free
if $\mb{i}$(\emph{d0})=$\varnothing$. The $\varnothing$ constant is
represented in the class \ccc{Combinatorial_map} through a
\ccc{static const Dart_handle}
called \nulldart. Finally, some high levels
@ -941,8 +944,8 @@ the tuple must be either a model of the \ccc{CellAttribute} concept or
\ccc{void}, \emph{(i-1)}-attributes are disabled: we say that
\emph{(i-1)}-attributes are \emph{void}. Otherwise, \emph{(i-1)}-attributes are
enabled and have the given type: we say \emph{(i-1)}-attributes are
\emph{non void}. If the size of the tuple is \emph{k}, with $k <
dimension+1$, $\forall i: k \leq i \leq dimension$, \emph{i}-attributes are
\emph{non void}. If the size of the tuple is \emph{k}, with \emph{k} <
dimension+1, $\forall$ \emph{i}: \emph{k} $\leq$ \emph{i} $\leq$ dimension, \emph{i}-attributes are
void.
The class \ccc{Combinatorial_map_min_items<d>} is a model of the
@ -1114,7 +1117,7 @@ Sections~\ref{ssec-adv-marks}). In the following, we denote by
The combinatorial map offers iterators to traverse the darts
of a specific orbit, to traverse all darts of one cell, or
one dart per cell, and to traverse all $i$-attributes.
one dart per cell, and to traverse all \emph{i}-attributes.
Instead of the \ccc{begin()/end()} member function pair as we know it
from \stl\ containers, and from most \cgal\ data structures, the
@ -1125,16 +1128,16 @@ There are three different categories of dart range classes:
\begin{itemize}
\item \ccc{Dart_range}: range of all the darts of a combinatorial map;
\item \ccc{Dart_of_orbit_range<Beta...>}: range of all the darts of
the orbit $\orb{Beta...}(d0)$ for a given $d0$. $Beta...$ is a
sequence of integers $i_1,\ldots,i_k$, each $i_j \in
\{0,\ldots,d\}$. These integers must satisfy: $i_1<i_2<\ldots<i_k$,
and $(i_1\neq 0$ or $i_2 \neq 1)$ (for example
the orbit $\orb{Beta...}$(\emph{d0}) for a given \emph{d0}. $Beta...$ is a
sequence of integers $i_1,\ldots,i_k$, each $i_j \in$
\{0,\ldots,\emph{d}\}. These integers must satisfy: $i_1<i_2<\ldots<i_k$,
and $(i_1\neq$ 0 or $i_2 \neq$ 1) (for example
\ccc{Dart_of_orbit_range<1,2>} for the orbit
$\orb{\mb{1},\mb{2}}(d0)$);
$\orb{\mb{1},\mb{2}}$(\emph{d0}));
\item \ccc{Dart_of_cell_range<i,dim>}: range of all the darts of
the \cell{i} containing a given dart. The \cell{i} is considered in
dimension \ccc{dim} (with $0 \leq dim \leq d$, $dim=d$ by default),
with $0\leq i \leq dim+1$. If $i=dim+1$,
dimension \ccc{dim} (with 0 $\leq$ \emph{dim} $\leq$ \emph{d}, \emph{dim}=\emph{d} by default),
with 0$\leq$ \emph{i} $\leq$ \emph{dim+1}. If \emph{i}=\emph{dim+1},
\ccc{Dart_of_cell_range<i,dim>} is the range of all the darts of
the connected component containing a given dart.
\end{itemize}
@ -1148,27 +1151,27 @@ There are three different categories of dart range classes:
There are also two different classes of ranges containing one dart per
\cell{i}. Note that in these classes, the dart of each \cell{i} can
be any dart of the cell. Moreover, each \cell{i} (and \cell{j} in the
second case) is considered in dimension \ccc{dim} (with $0 \leq dim
\leq d$, $dim=d$ by default).
second case) is considered in dimension \ccc{dim} (with 0 $\leq$ \emph{dim}
$\leq$ \emph{d}, \emph{dim=d} by default).
\begin{itemize}
\item \ccc{One_dart_per_cell_range<i,dim>}: range containing one dart of
each \cell{i} of the combinatorial map, $0\leq i \leq dim+1$ (for
each \cell{i} of the combinatorial map, 0$\leq$ \emph{i} $\leq$ \emph{dim+1} (for
example \ccc{One_dart_per_cell_range<2>} for the range of one dart per
2-cell of the combinatorial map);
\item \ccc{One_dart_per_incident_cell_range<i,j,dim>}: range
containing one dart of each \cell{i} incident to the \cell{j}
containing a given dart, with $0\leq i \leq dim+1$ and $0\leq j
\leq dim+1$ (for example
containing a given dart, with 0$\leq$ \emph{i} $\leq$ \emph{dim+1} and 0$\leq$ \emph{j}
$\leq$ \emph{dim+1} (for example
\ccc{One_dart_per_incident_cell_range<0,3>} for the range of
one dart per vertex of the volume incident to the starting dart).
If $i==j$, the range contains only the given dart.
If \emph{i}=\emph{j}, the range contains only the given dart.
\end{itemize}
The iterators of the \ccc{Dart_range} are bidirectional iterators,
while the iterators of the other four ranges are forward iterators.
The value type of all these iterators is \ccc{Dart}.
Additionally, there is a range over non void $i$-attributes:
Additionally, there is a range over non void \emph{i}-attributes:
\ccc{Attribute_range<i>::type}, having a bidirectional iterator with
value type \ccc{Attribute_type<i>::type}.
@ -1294,8 +1297,8 @@ $\beta$ pointers of existing darts.
result of \ccc{sew<3>(1,5)} (or \ccc{sew<3>(2,8)}, or
\ccc{sew<3>(3,7)}, or \ccc{sew<3>(4,6)}). Darts (1,5), (2,8),
(3,7) and (4,6) are linked together by $\beta_3$. The two 2-cells
$c_1=\{1,2,3,4\}$ and $c_2=\{5,6,7,8\}$ are merged after the sew
into the 2-cell $\{1,2,3,4,5,6,7,8\}$. We are in the case where
\emph{c1}=\{1,2,3,4\} and \emph{c2}=\{5,6,7,8\} are merged after the sew
into the 2-cell \{1,2,3,4,5,6,7,8\}. We are in the case where
the two attributes are non NULL, thus the first one is kept, and
all the darts of $c_2$ are associated with the first attribute.}
\label{fig-exemple-sew}
@ -1324,43 +1327,43 @@ The \ccc{link_beta} and \ccc{unlink_beta} methods only modify
\end{ccAdvanced}
\end{itemize}
Linking two darts $d_1$ and $d_2$ by $\beta_i$, with $2\leq i\leq d$
and $d_1 \neq d_2$, consists in modifying two $\beta_i$ pointers such that
$\beta_i(d_1)=d_2$ and $\beta_i(d_2)=d_1$. For $i=1$, the modification
is $\beta_1(d_1)=d_2$ (and thus $\beta_0(d_2)=d_1$ by definition of
$\beta_0$); in this case we can have $d_1=d_2$ (a dart linked with
Linking two darts \emph{d1} and \emph{d2} by $\beta_i$, with 2$\leq$ \emph{i}$\leq$ \emph{d}
and \emph{d1} $\neq$ \emph{d2}, consists in modifying two $\beta_i$ pointers such that
$\beta_i$(\emph{d1})=\emph{d2} and $\beta_i$(\emph{d2})=\emph{d1}. For \emph{i}=1, the modification
is $\beta_1$(\emph{d1})=\emph{d2} (and thus $\beta_0$(\emph{d2})=\emph{d1} by definition of
$\beta_0$); in this case we can have \emph{d1=d2} (a dart linked with
itself corresponds to an edge which is a loop).
Reciprocally, unlinking a given dart $d_0$ by $\beta_i$, with $2\leq
i\leq d$, consists in modifying two $\beta_i$ pointers
such that $\beta_i(\beta_i(d_0))=\varnothing$ and
$\beta_i(d_0)=\varnothing$. For $i=1$, the modification is
$\beta_1(d_0)=\varnothing$ (and thus
$\beta_0(\beta_1(d_0))=\varnothing$ by definition of $\beta_0$). Note
Reciprocally, unlinking a given dart \emph{d0} by $\beta_i$, with 2$\leq$
\emph{i}$\leq$ \emph{d}, consists in modifying two $\beta_i$ pointers
such that $\beta_i(\beta_i$(\emph{d0}))=$\varnothing$ and
$\beta_i$(\emph{d0})=$\varnothing$. For \emph{i=1}, the modification is
$\beta_1$(\emph{d0})=$\varnothing$ (and thus
$\beta_0(\beta_1$(\emph{d0}))=$\varnothing$ by definition of $\beta_0$). Note
that is it possible to unlink a given dart for $\beta_i$ only if it is
not $i$-free.
not \emph{i}-free.
The \ccc{sew<i>(dh1,dh2)} methods consist mainly to link two by two
several darts by $\mb{i}$. This operation is possible only if there is
a bijection $f$ between all the darts of the orbit
$D_1=\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}(d_1)$ and
$D_2=\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}(d_2)$
satisfying: $f(d_1)=d_2$, and for all $d'_1 \in D_1$, for all $j\in
a bijection \emph{f} between all the darts of the orbit
\emph{D1}=$\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}$(\emph{d1}) and
\emph{D2}=$\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}$(\emph{d2})
satisfying: f(\emph{d1})=\emph{d2}, and for all \emph{e} $\in$ \emph{D1}, for all $j\in
\{1,\ldots,i-2,i+2,\ldots,d\}$,
$f(\mb{j}(d'_1))=\mb{j}^{-1}(f(d'_1))$. Intuitively, this condition
\emph{f}($\mb{j}$(\emph{e}))=$\mb{j}^{-1}$(\emph{f}(\emph{e})). Intuitively, this condition
ensures the validity of the combinatorial map by verifying that
condition discussed in Section~\ref{ssec-combimap-validity} will be
satisfied after the operation. This can be tested by using the method
\ccc{is_sewable<i>(dh1,dh2)}. For example, the function
\ccc{is_sewable<i>} would return \ccc{false} if we tried to sew a
triangular facet with a quad facet. Note that given two darts $d_1$
and $d_2$, if there is such a bijection, it is uniquely defined. So giving
triangular facet with a quad facet. Note that given two darts \emph{d1}
and \emph{d2}, if there is such a bijection, it is uniquely defined. So giving
the two darts as arguments of the \ccc{sew<i>} is enough to retrieve
all the pairs of darts to link.
If such a bijection exists, the \ccc{sew<i>(dh1,dh2)} operation
consists only in linking by $\beta_i$ each couple of darts $d_1$ and
$d_2$ such that $d_2=f(d_1)$.
consists only in linking by $\beta_i$ each couple of darts \emph{d1} and
\emph{d2} such that \emph{d2}=\emph{f}(\emph{d1}).
% links by $\beta_i$ two by two all the darts of
% the orbit $\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}(d1)$
@ -1381,15 +1384,15 @@ In addition, the sew operations update the associations between darts
and non void attributes in order to guarantee that all the darts
belonging to a given cell are associated with the same attribute
(which is a condition of combinatorial map validity). For each couple
of \cells{j} $c_1$ and $c_2$ that are merged into one \cell{j} during
the sew, we have to update the two associated attributes $attr_1$ and
$attr_2$. If both are NULL, there is nothing to do. If one is NULL
of \cells{j} \emph{c1} and \emph{c2} that are merged into one \cell{j} during
the sew, we have to update the two associated attributes \emph{attr1} and
\emph{attr2}. If both are NULL, there is nothing to do. If one is NULL
and the other not, we only associate the non NULL attribute to all the
darts of the resulting cell. When the two attributes are non NULL, we
first apply functor \ccc{On_merge} on the two attributes $attr_1$ and
$attr_2$ (see Section~\ref{ssec-attributes}). Then, we associate the
attribute $attr_1$ to all darts of the resulting \cell{j}. Finally,
attribute $attr_2$ is removed from the combinatorial map.
first apply functor \ccc{On_merge} on the two attributes \emph{attr1} and
\emph{attr2} (see Section~\ref{ssec-attributes}). Then, we associate the
attribute \emph{attr1} to all darts of the resulting \cell{j}. Finally,
attribute \emph{attr2} is removed from the combinatorial map.
Note that when the two attributes are non NULL, the first one is
kept. But user can customize this behavior in order to update the
@ -1402,34 +1405,34 @@ second attribute is kept.
For example, in Figure~\ref{fig-exemple-sew}, we want to 3-sew the two
initial volumes. \ccc{sew<3>(1,5)} links by $\mb{3}$ the pairs of
darts $(1,5)$, $(2,8)$, $(3,7)$ and $(4,6)$, thus the combinatorial map
darts (1,5), (2,8), (3,7) and (4,6), thus the combinatorial map
obtained is valid. 2-attributes are updated so that all the darts
belonging to the 2-cell containing dart 1 become associated to the
same 2-attribute after the operation.
%
Similarly, \ccc{unsew<i>} operations unlink $\mb{i}$ for all the darts
in the orbit $\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}(d_0)$,
in the orbit $\orb{\mb{1},\ldots,\mb{i-2},\mb{i+2},\ldots,\mb{d}}$(\emph{d0}),
and thus guarantee to obtain a valid combinatorial map. This
operation is possible for any non $i$-free dart.
operation is possible for any non \emph{i}-free dart.
As for the sew operations, attributes are updated to
guarantee that two darts belonging to two different \cells{j} are
associated to two different $j$-attributes. If the unsew operation
splits a \cell{j} $c$ in two \cells{j} $c_1$ and $c_2$, and if $c$ is
associated to a $j$-attribute $attr_1$, then this attribute is duplicated
into $attr_2$, and all the darts belonging to $c_2$ are associated
associated to two different \emph{j}-attributes. If the unsew operation
splits a \cell{j} \emph{c} in two \cells{j} \emph{c1} and \emph{c2}, and if \emph{c} is
associated to a \emph{j}-attribute \emph{attr1}, then this attribute is duplicated
into \emph{attr2}, and all the darts belonging to \emph{c2} are associated
with this new attribute. Finally, we call the functor \ccc{On_split}
on the two attributes $attr_1$ and $attr_2$ (see
on the two attributes \emph{attr1} and \emph{attr2} (see
Section~\ref{ssec-attributes}).
Let us consider the combinatorial map given in
Figure~\ref{fig-exemple-sew} (Right). If we call \ccc{unsew<3>(2)}, we
obtain the combinatorial map in Figure~\ref{fig-exemple-sew} (Left)
(except for the color of the attribute associated to the
2-cell $\{5,6,7,8\}$ which would be \texttt{\#00ff00}). The \ccc{unsew<3>}
2-cell \{5,6,7,8\} which would be \texttt{\#00ff00}). The \ccc{unsew<3>}
operation has duplicated the 2-attribute associated to the 2-cell
$\{1,2,3,4,5,6,7,8\}$ since this 2-cell is split in two after the
\{1,2,3,4,5,6,7,8\} since this 2-cell is split in two after the
unsew operation.
\begin{ccAdvanced}
@ -1467,9 +1470,9 @@ unsew operation.
In Figure~\ref{fig-exemple-sew} (Left), if we call
\ccc{link_beta<3>(1,5)}, in the resulting combinatorial map we have
now $\mb{3}(1)=5$ and $\mb{3}(5)=1$. This combinatorial map is no
now $\mb{3}$(1)=5 and $\mb{3}$(5)=1. This combinatorial map is no
longer valid (for example dart 2 is 3-free and we should have
$\mb{3}(2)=8$).
$\mb{3}$(2)=8).
\end{ccAdvanced}
@ -1499,7 +1502,7 @@ valid.
The first one is \ccc{remove_cell<CMap,i>(cm,dh0)} which modifies the
combinatorial map to remove the \cell{i} containing dart \ccc{d0},
with $0 \leq i \leq d$. This operation is possible if $i==d$ or if the given
with 0 $\leq$ \emph{i} $\leq$ \emph{d}. This operation is possible if \emph{i}=\emph{d} or if the given
\cell{i} is incident to at most two \cells{(i+1)} which can be tested
thanks to \ccc{is_removable<CMap,i>(cm,dh0)}. If the removed \cell{i}
was incident to two different \cells{(i+1)}, these two cells are
@ -1577,9 +1580,9 @@ example on Figure~\ref{fig-insert-vertex}).
\ccc{remove_cell<1>} operations. \textbf{Left}:~Initial
combinatorial map. \textbf{Right}:~After the insertion of two
1-cells: a first one between the two 0-cells containing darts
\ccc{d1} and \ccc{d2}, and a second one between the two 0-cells
containing darts \ccc{d3} and \ccc{d4}. Now if we remove the two
1-cells containing darts \ccc{d5} and \ccc{d6}, we obtain the
\ccc{d2} and \ccc{d3}, and a second incident to the 0-cell
containing dart \ccc{d1}. Now if we remove the two
1-cells containing darts \ccc{d4} and \ccc{d5}, we obtain the
initial combinatorial map.}
\label{fig-insert-edge}
\end{figure}
@ -1587,12 +1590,12 @@ example on Figure~\ref{fig-insert-vertex}).
\ccc{insert_cell_1_in_cell_2<CMap>(cm,dh1,dh2)} adds a 1-cell in
the 2-cell containing darts \ccc{d1} and \ccc{d2}, between the two
0-cells containing darts \ccc{d1} and \ccc{d2}. The 2-cell is split
in two. This operation is possible if $d1 \in \orb{\beta_1}(d2)$
in two. This operation is possible if \emph{d1} $\in \orb{\beta_1}(d2)$
which can be tested thanks to
\ccc{is_insertable_cell_1_in_cell_2(cm,dh1,dh2)}. In the example on
Figure~\ref{fig-insert-edge}, it is possible to insert an edge
between darts $d1$ and $d2$, and between $d3$ and $d4$, but it is
not possible to insert an edge between $d1$ and $d3$.
between darts \emph{d1} and \emph{d2}, and between \emph{d3} and \emph{d4}, but it is
not possible to insert an edge between \emph{d1} and \emph{d3}.
%\item
\ccc{insert_dangling_cell_1_in_cell_2<CMap>(cm,dh0)} adds a 1-cell in
@ -1754,7 +1757,7 @@ combinatorial map contains only one 3-cell. Indeed, the \ccc{sew<4>}
operation has identified by pairs all the darts of the two 3-cells
by definition of the sew operation (see Section~\ref{ssec-link-darts})
which, in 4D, links by $\beta_3$ all the darts in
$\orb{\mb{1},\mb{2}}(d_1)$ and in $\orb{\mb{1},\mb{2}}(d_2)$. The
$\orb{\mb{1},\mb{2}}$(\emph{d1}) and in $\orb{\mb{1},\mb{2}}$(\emph{d2}). The
situation is similar (but in higher dimension) to the
configuration where we have two triangles in a 3D combinatorial map,
and you use \ccc{sew<3>} between these two triangles. The two triangles
@ -1836,47 +1839,47 @@ objects without boundaries. This definition was extended
objects with boundaries, based on the notions of partial permutations
and partial involutions.
Intuitively, a \emph{partial permutation} on a finite set $E$ is a
mapping from $E\cup\{\varnothing\}$ to $E\cup\{\varnothing\}$ which is
Intuitively, a \emph{partial permutation} on a finite set \emph{E} is a
mapping from \emph{E}$\cup$\{$\varnothing$\} to \emph{E}$\cup$\{$\varnothing$\} which is
injective on the subset of the domain that does not map to
$\varnothing$. More precisely, a mapping $p:E \cup \{\varnothing\}
\rightarrow E \cup \{\varnothing\}$ is a \emph{partial permutation}
defined on $E$ if:
$\varnothing$. More precisely, a mapping p:E $\cup$ \{$\varnothing$\}
$\rightarrow$ \emph{E} $\cup$ \{$\varnothing$\} is a \emph{partial permutation}
defined on \emph{E} if:
\begin{enumerate}
\item $p(\varnothing)=\varnothing$;
\item $\forall e_1 \in E$, $\forall e_2 \in E$,
$p(e_1)=p(e_2)\neq \varnothing \Rightarrow e_1=e_2$.
\item \emph{p}($\varnothing$)=$\varnothing$;
\item $\forall$ \emph{e1} $\in$ \emph{E}, $\forall$ \emph{e2} $\in$ \emph{E},
p(\emph{e1})=p(\emph{e2})$\neq \varnothing \Rightarrow$ \emph{e1}=\emph{e2}.
\end{enumerate}
The inverse $p^{-1}$ of this partial permutation is also a partial
The inverse \pmun{} of this partial permutation is also a partial
permutation and is defined by:
\begin{enumerate}
\item $p^{-1}(\varnothing)=\varnothing$;
\item $\forall e \in E$, if it exists $a\in E$ such that $p(a)=e$,
then $p^{-1}(e)=a$, otherwise $p^{-1}(e)=\varnothing$.
\item \pmun{}($\varnothing$)=$\varnothing$;
\item $\forall$ \emph{e} $\in$ \emph{E}, if it exists \emph{a}$\in$ \emph{E} such that \emph{p}(\emph{a})=\emph{e},
then \pmun{}(\emph{e})=a, otherwise \pmun{}(\emph{e})=$\varnothing$.
\end{enumerate}
Let $E$ be a set, and $p$ a partial permutation on $E$. An element
$e$ is called a \emph{fixed point} for $p$ if $p(e)=e$. $p$ is a
\emph{partial involution} if $\forall e \in E: p(e)\neq \varnothing
\Rightarrow p(p(e))=e$.
Let \emph{E} be a set, and \emph{p} a partial permutation on \emph{E}. An element
\emph{e} is called a \emph{fixed point} for \emph{p} if \emph{p(e)=e}. \emph{p} is a
\emph{partial involution} if $\forall$ \emph{e} $\in$ \emph{E}: \emph{p}(\emph{e})$\neq \varnothing
\Rightarrow$ \emph{p}(\emph{p}(\emph{e}))=\emph{e}.
Now we can give the definition of a combinatorial map in any dimension.
Let $d \geq 0$. A \emph{d}-dimensional combinatorial map (or
\emph{d}-map) is a (d+1)-tuple $M=(D,\beta_1,\ldots,\beta_d)$
Let \emph{d} $\geq$ 0. A \emph{d}-dimensional combinatorial map (or
\emph{d}-map) is a (d+1)-tuple \emph{M}=(\emph{D},$\beta_1,\ldots,\beta_d)$
where:
\begin{enumerate}
\item $D$ is a finite set of darts;
\item $\beta_1$ is a partial permutation on $D$;
\item $\forall i, \, 2 \leq i \leq d$, $\beta_i$ is a
partial involution on $D$ without fixed point;
\item\label{cond-composition} $\forall i:\, 0 \leq i \leq d-2$,
$\forall j:\, 3 \leq j \leq d$, $i+2 \leq j$,
\item \emph{D} is a finite set of darts;
\item $\beta_1$ is a partial permutation on \emph{D};
\item $\forall$ \emph{i}, 2 $\leq$ \emph{i} $\leq$ \emph{d}, $\beta_i$ is a
partial involution on \emph{D} without fixed point;
\item\label{cond-composition} $\forall$ \emph{i}: 0 $\leq$ \emph{i} $\leq$ \emph{d-2},
$\forall$ \emph{j}: 3 $\leq$ \emph{j} $\leq$ \emph{d}, \emph{i+2} $\leq$ \emph{j},
$\beta_{i}\circ\beta_{j}$ is a partial involution.
\end{enumerate}
A $d$-dimensional combinatorial map represents a subdivision of an
orientable $d$-dimensional quasi-manifold. A dart is an abstract element
A \emph{d}-dimensional combinatorial map represents a subdivision of an
orientable \emph{d}-dimensional quasi-manifold. A dart is an abstract element
which is only required to define partial permutations. The last line of
the definition fixes constraints which guarantee the topological
validity of the represented object, i.e., the fact that it is a
@ -1884,18 +1887,18 @@ quasi-manifold. This definition allows us to verify the validity of a
given combinatorial map by checking if each item of the definition is
satisfied.
Given a set of partial permutations $S=\{f_1,\ldots,f_k\}$, we denote
Given a set of partial permutations \emph{S}=\{$f_1,\ldots,f_k$\}, we denote
by $\orb{S}$ the \emph{permutation group} generated by
$\{f_1,\ldots,f_k\}$ and whose group operation is the composition of
partial permutations. The orbit $\orb{f_1,\ldots,f_k}(a)$ is the set
of darts which can be obtained from $a$ by elements of $\orb{S}$:
$\orb{f_1,\ldots,f_k}(a)=\{\phi(a)|\phi \in \orb{S}\}\setminus\{\varnothing\}$.
\{$f_1,\ldots,f_k$\} and whose group operation is the composition of
partial permutations. The orbit $\orb{f_1,\ldots,f_k}$(\emph{a}) is the set
of darts which can be obtained from \emph{a} by elements of $\orb{S}$:
$\orb{f_1,\ldots,f_k}$(\emph{a})=\{$\phi$(\emph{a})|$\phi \in \orb{S}$\}$\setminus$\{$\varnothing$\}.
Let $d_0 \in D$ be a dart. Given $i$, $1\leq i \leq d$,
the \cell{i} containing $d_0$ is
$\orb{\beta_1,\ldots,\beta_{i-1},\beta_{i+1},\ldots,\beta_d}(d_0)$.
The $0$-cell containing $d_0$ is
$\orb{\{\mb{i}\circ\mb{j}|\forall i,j: 1\leq i<j \leq d\}}(d_0)$.
Let \emph{d0} $\in$ \emph{D} be a dart. Given \emph{i}, 1$\leq$ \emph{i} $\leq$ \emph{d},
the \cell{i} containing \emph{d0} is
$\orb{\beta_1,\ldots,\beta_{i-1},\beta_{i+1},\ldots,\beta_d}$(\emph{d0}).
The \emph{0}-cell containing \emph{d0} is
$\orb{\{\mb{i}\circ\mb{j}|\forall i,j: 1\leq i<j \leq d\}}$(\emph{d0}).
% \subsection{In 2D}
% In 2D, a 2-map is $M=(D,\beta_1,\beta_2)$ where $\beta_1$ is a partial