cgal/Polygon/doc_tex/Polygon/polygon.tex

76 lines
2.5 KiB
TeX

\section{Introduction}
A polygon is a closed chain of edges. Several algorithms are available for
polygons. For some of those algorithms, it is necessary that the polygon is
simple. A polygon is simple if edges don't intersect, except consecutive edges,
which intersect in their common vertex.
The following algorithms are available:
\begin{itemize}
\item find the leftmost, rightmost, topmost and bottommost vertex.
\item compute the (signed) area.
\item check if a polygon is simple.
\item check if a polygon is convex.
\item find the orientation (clockwise or counterclockwise)
\item check if a point lies inside a polygon.
\end{itemize}
All those operations take two forward iterators as parameters in order to
describe the polygon. These parameters have a point type as value type.
The type \ccc{Polygon_2} can be used to represent polygons.
Polygons are dynamic. Vertices can be modified, inserted and erased.
They provide the algorithms described above as member functions.
Moreover, they provide ways of iterating over the vertices and edges.
Currently, the \ccc{Polygon_2} class is a nice wrapper around a container of
points, but little more. Especially, computed values are not cached.
That is, when the \ccc{is_simple()} member function is called twice or more,
the result is computed each time anew.
\section{Examples}
\subsection{The Polygon Class}
The following example creates a polygon and illustrates the usage of some member functions.
\ccIncludeExampleCode{Polygon/Polygon.cpp}
\begin{figure}
\begin{ccTexOnly}
\includegraphics[width=0.5\textwidth]{Polygon/pgn_algos}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img border=0 src="./pgn_algos.gif" align=middle alt="Example polygon">
</CENTER>
\end{ccHtmlOnly}
\caption{A polygon and some points
\label{I1_Fig_a_polygon}}
\end{figure}
\subsection{Algorithms Operating on Sequences of Points}
The following example creates a polygon and illustrates the usage of some
global functions that operate on sequences of points.
\ccIncludeExampleCode{Polygon/polygon_algorithms.cpp}
\subsection{Polygons in 3D Space}
Sometimes it is useful to run a 2D algorithm on 3D data.
Polygons may be contours of a 3D object, where the contours
are organized in parallel slices, generated by segmentation
of image data from a scanner.
In order to avoid an explixit projection on the \ccc{xy}
plane, one can use the traits class \ccc{Projection_traits_xy_3<K>}
which is part of the 2D and 3D Linear Geometric Kernel,
\ccIncludeExampleCode{Polygon/projected_polygon.cpp}