mirror of https://github.com/CGAL/cgal
58 lines
2.1 KiB
TeX
58 lines
2.1 KiB
TeX
The specification of a polygon surface mesh consists of combinatorial
|
|
entities: vertices, edges, and faces, and numerical quantities:
|
|
attributes such as vertex positions, vertex normals, texture
|
|
coordinates, face colors, etc. The \italic{connectivity} describes the
|
|
incidences between elements and is implied by the topology of the
|
|
mesh. For example, two vertices or two faces are adjacent if there
|
|
exists an edge incident to both.\\
|
|
|
|
% definition
|
|
|
|
A \italic{halfedge data structure} is an edge-centered data structure
|
|
capable of maintaining incidence informations of vertices, edges and
|
|
faces, for example for planar maps, polyhedra, or other orientable,
|
|
two-dimensional surfaces embedded in arbitrary dimension. Each edge is
|
|
decomposed into two halfedges with opposite orientations. One incident
|
|
face and one incident vertex are stored in each halfedge. For each
|
|
face and each vertex, one incident halfedge is stored (see
|
|
Fig.\ref{fig:halfedge}).
|
|
|
|
% halfedge
|
|
|
|
\begin{figure}[htb]
|
|
\centering{\includegraphics[width=7.0cm]{figs/halfedge}}
|
|
\caption{One halfedge and its incident primitives.}
|
|
\label{fig:halfedge}
|
|
\end{figure}
|
|
|
|
Notice that the halfedge data structure is only a combinatorial data
|
|
structure, geometric interpretation being added by classes built on
|
|
top of the halfedge data structure. On example is the class
|
|
\italic{CGAL::Polyhedron\_3} used in this tutorial. The
|
|
halfedge data structure has been very successful for the design of
|
|
algorithms on meshes for several reasons:
|
|
|
|
\begin{itemize}
|
|
|
|
\item
|
|
an edge-based data structure leads to a constant size structure,
|
|
contrary to face-based data structures with inevitable variable
|
|
topological structure when dealing with arbitrary vertex valence and
|
|
face degrees.
|
|
|
|
\item
|
|
a halfedge encodes the orientation of an edge, facilitating the mesh
|
|
traversal.
|
|
|
|
\item
|
|
navigation around each vertex by visiting all surrounding edges or
|
|
faces is made easy.
|
|
|
|
\item
|
|
each halfedge can be associated with a unique corner, that is a couple
|
|
$\{$face,vertex$\}$. The storage of attributes such as normals or
|
|
texture coordinates per corner (instead of per vertex) is thus
|
|
allowed.
|
|
|
|
\end{itemize}
|