mirror of https://github.com/CGAL/cgal
76 lines
2.5 KiB
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}
|