% +------------------------------------------------------------------------+
% | Reference manual page: Partition_2_ref/intro.tex
% +------------------------------------------------------------------------+
% | 26.6.2000   Susan Hert
% | Package: Partition_2
% | 
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+

%\clearpage
%\section{Reference Pages for 2D Polygon Partitioning}

\ccRefChapter{2D Polygon Partitioning}
\label{chap:partition_2_ref}
\ccChapterAuthor{Susan Hert}

\ccEnableRawListOfRefpages


\begin{ccTexOnly}
\ifnum\ccNewRefManualStyle=\ccTrue
\end{ccTexOnly}
A {\em partition}\ccIndexMainItemDef{partition} of a polygon is a set 
of polygons such that the interiors of the polygons do not intersect and 
the union of the polygons is equal to the interior of the original polygon.
Functions are available for partitioning planar polygons into two 
types of subpolygons --- $y$-monotone polygons and convex polygons.  

The function that produces a $y$-monotone partitioning is based on the 
algorithm presented in \cite{bkos-cgaa-97} which requires $O(n \log n)$ time 
and $O(n)$ space for a polygon with $n$ vertices and guarantees nothing 
about the number of polygons produced with respect to the optimal number.
Three functions are provided for producing
convex partitionings. Two of these functions produce approximately optimal 
partitions and one results in an optimal partition, where ``optimal'' is
defined in terms of the number of partition polygons.   The two functions
that implement approximation algorithms are guaranteed to produce no more 
than four times the optimal number of convex pieces.  The optimal partitioning
function provides an implementation of Greene's dynamic programming algorithm
\cite{g-dpcp-83}, which requires $O(n^4)$ time and $O(n^3)$ space to produce a 
convex partitioning. One of the approximation algorithms is also due to 
Greene \cite{g-dpcp-83} and requires $O(n \log n)$ time and $O(n)$ space
to produce a convex partitioning given a $y$-monotone partitioning.  The
other approximation algorithm is a result of Hertel and
Mehlhorn \cite{hm-ftsp-83}, which requires $O(n)$ time and space to produce
a convex partitioning from a triangulation of a polygon.
Each of the partitioning functions uses a traits class to supply the
primitive types and predicates used by the algorithms.
\begin{ccTexOnly}
\fi
\end{ccTexOnly}



\ccHeading{Assertions}

\begin{ccPackage}{polygon partitioning}
\ccIndexAssertionFlag[polygon partitioning]
The assertion flags for this package use \ccc{PARTITION} in their names
({\em e.g.}, \ccc{CGAL_PARTITION_NO_POSTCONDITIONS}).
The precondition checks for the planar polygon partitioning functions
are:  counterclockwise ordering of the input vertices and simplicity of the 
polygon these vertices represent.
\ccIndexSubitem[C]{approx_convex_partition_2}{postconditions}
\ccIndexSubitem[C]{greene_approx_convex_partition_2}{postconditions}
\ccIndexSubitem[C]{optimal_convex_partition_2}{postconditions}
\ccIndexSubitem[C]{y_monotone_partition_2}{postconditions}
The postcondition checks are:  simplicity, counterclockwise orientation,
and convexity (or $y$-monotonicity) of the partition polygons
and validity of the partition ({\em i.e.}, the partition polygons are 
nonoverlapping and the union of these polygons is the same as the
original polygon)
\ccIndexSubitemDef{partition}{valid}.
\end{ccPackage}

\section{Classified Reference Pages}

\subsection*{Concepts}

\lcTex{
\ccRefConceptPage{ConvexPartitionIsValidTraits_2}\\
\ccRefConceptPage{IsYMonotoneTraits_2}\\
\ccRefConceptPage{OptimalConvexPartitionTraits_2}\\
\ccRefConceptPage{PartitionTraits_2}\\
\ccRefConceptPage{PartitionIsValidTraits_2}\\
\ccRefConceptPage{YMonotonePartitionIsValidTraits_2}\\
\ccRefConceptPage{YMonotonePartitionTraits_2} \\
}

\lcHtml{
\input{Partition_2_ref/ConvexPartitionIsValidTraits_2}
\input{Partition_2_ref/IsYMonotoneTraits_2}
\input{Partition_2_ref/OptimalConvexPartitionTraits_2}
\input{Partition_2_ref/PartitionTraits_2}
\input{Partition_2_ref/PartitionIsValidTraits_2}
\input{Partition_2_ref/YMonotonePartitionIsValidTraits_2}
\input{Partition_2_ref/YMonotonePartitionTraits_2}
}

\subsection*{Function Object Concepts}

\lcTex{\ccRefConceptPage{PolygonIsValid} \\}
\lcHtml{\input{Partition_2_ref/PolygonIsValid}}

\subsection*{Classes}

\lcTex{
\ccRefIdfierPage{CGAL::Partition_is_valid_traits_2<Traits, PolygonIsValid>}\\
\ccRefIdfierPage{CGAL::Partition_traits_2<R>} \\
}

\lcHtml{
\input{Partition_2_ref/Partition_is_valid_traits_2}
\input{Partition_2_ref/Partition_traits_2}
}

\subsection*{Function Object Classes}

\lcTex{
\ccRefIdfierPage{CGAL::Is_convex_2<Traits>}\\
\ccRefIdfierPage{CGAL::Is_vacuously_valid<Traits>}\\
\ccRefIdfierPage{CGAL::Is_y_monotone_2<Traits>} \\
}

\lcHtml{
\input{Partition_2_ref/Is_convex_2}
\input{Partition_2_ref/Is_vacuously_valid}
\input{Partition_2_ref/Is_y_monotone_2_FO}
}

\subsection*{Functions}

\lcTex{
\ccRefIdfierPage{CGAL::approx_convex_partition_2} \\
\ccRefIdfierPage{CGAL::convex_partition_is_valid_2} \\
\ccRefIdfierPage{CGAL::greene_approx_convex_partition_2} \\
\ccRefIdfierPage{CGAL::is_y_monotone_2} \\
\ccRefIdfierPage{CGAL::optimal_convex_partition_2} \\
\ccRefIdfierPage{CGAL::partition_is_valid_2} \\
\ccRefIdfierPage{CGAL::y_monotone_partition_2} \\
\ccRefIdfierPage{CGAL::y_monotone_partition_is_valid_2} \\
}

\lcHtml{
\input{Partition_2_ref/approx_convex_partition_2}
\input{Partition_2_ref/convex_partition_is_valid_2}
\input{Partition_2_ref/greene_approx_convex_partition_2}
\input{Partition_2_ref/is_y_monotone_2}
\input{Partition_2_ref/optimal_convex_partition_2} 
\input{Partition_2_ref/partition_is_valid_2} 
\input{Partition_2_ref/y_monotone_partition_2} 
\input{Partition_2_ref/y_monotone_partition_is_valid_2}
}

\ccPrintSortedListOfRefpages

\clearpage
%% EOF %%
