3.3 branch -> trunk

This commit is contained in:
Andreas Fabri 2007-06-04 14:28:57 +00:00
parent 01e763217b
commit 21e20e4d42
13 changed files with 73 additions and 67 deletions

View File

@ -6,7 +6,7 @@
\ccUserChapter{2D Regularized Boolean Set-Operations} \ccUserChapter{2D Regularized Boolean Set-Operations}
\input{Boolean_set_operations_2/PkgDescription.tex} \input{Boolean_set_operations_2/PkgDescription.tex}
\minitoc
\begingroup \begingroup
\label{chapter_Boolean_set_operations_2} \label{chapter_Boolean_set_operations_2}
@ -23,6 +23,8 @@
\newlength{\BooleanSetOpsWidthRight} \newlength{\BooleanSetOpsWidthRight}
} }
\minitoc
\newcommand{\dcel}{{\sc Dcel}} \newcommand{\dcel}{{\sc Dcel}}
\input{Boolean_set_operations_2/bso_intro.tex} \input{Boolean_set_operations_2/bso_intro.tex}

View File

@ -9,7 +9,7 @@
% +------------------------------------------------------------------------+ % +------------------------------------------------------------------------+
\section{Introduction}
A variety of generators for geometric objects are provided in \cgal. A variety of generators for geometric objects are provided in \cgal.
They are useful as synthetic test data sets, e.g.~for testing They are useful as synthetic test data sets, e.g.~for testing
algorithms on degenerate object sets and for performance analysis. algorithms on degenerate object sets and for performance analysis.
@ -54,7 +54,7 @@ point set of a given size where the points are drawn from a specific
domain and \ccc{random_polygon_2} generates a random simple polygon from domain and \ccc{random_polygon_2} generates a random simple polygon from
points drawn from a specific domain. points drawn from a specific domain.
\paragraph{Random Perturbations} \subsection{Random Perturbations}
\ccIndexMainItem{random perturbations} \ccIndexMainItem{random perturbations}
Degenerate input sets like grid points can be randomly perturbed by a Degenerate input sets like grid points can be randomly perturbed by a
@ -63,7 +63,7 @@ challenges numerical stability of algorithms using inexact arithmetic and
exact predicates to compute the sign of expressions slightly off from zero. exact predicates to compute the sign of expressions slightly off from zero.
For this the function \ccc{perturb_points_2} is provided. For this the function \ccc{perturb_points_2} is provided.
\paragraph{Adding Degeneracies} \subsection{Adding Degeneracies}
\ccModifierCrossRefOff \ccModifierCrossRefOff
\ccIndexSubitem{degeneracies}{adding to input} \ccIndexSubitem{degeneracies}{adding to input}
\ccModifierCrossRefOn \ccModifierCrossRefOn
@ -74,7 +74,7 @@ useful for generating multiple copies of identical points.
The function \ccc{random_collinear_points_2()} adds collinearities to The function \ccc{random_collinear_points_2()} adds collinearities to
a point set. a point set.
\paragraph{Support Functions and Classes for Generators} \subsection{Support Functions and Classes for Generators}
The function \ccc{random_selection} chooses $n$ items at random from a random The function \ccc{random_selection} chooses $n$ items at random from a random
access iterator range which is useful to produce degenerate input data access iterator range which is useful to produce degenerate input data

View File

@ -39,9 +39,7 @@ point set).
\scalebox{0.5}{\includegraphics{Nef_2/complex}} \scalebox{0.5}{\includegraphics{Nef_2/complex}}
\end{center} \end{center}
\end{ccTexOnly} \end{ccTexOnly}
\caption{Two Nef polyhedra in the plane. A closed halfspace on the
left and a complex polyhedron on the right. Note that the points
on the squared boundary are at infinity.}\label{nefexamples}
\begin{ccHtmlOnly} \begin{ccHtmlOnly}
<CENTER> <CENTER>
<IMG BORDER=0 SRC="./halfplane.gif" ALIGN=middle <IMG BORDER=0 SRC="./halfplane.gif" ALIGN=middle
@ -50,6 +48,9 @@ ALT="a halfplane">
ALT="a complex polyhedron"> ALT="a complex polyhedron">
</CENTER> </CENTER>
\end{ccHtmlOnly} \end{ccHtmlOnly}
\caption{Two Nef polyhedra in the plane. A closed halfspace on the
left and a complex polyhedron on the right. Note that the points
on the squared boundary are at infinity.}\label{nefexamples}
\end{figure} \end{figure}
\section{Construction and Composition} \section{Construction and Composition}

View File

@ -1,11 +1,13 @@
\section{Introduction}
This chapter gives an overview of the number types supported by This chapter gives an overview of the number types supported by
\cgal. Number types must fulfill certain syntactical and semantic \cgal. Number types must fulfill certain syntactical and semantic
requirements, such that they can be successfully used in \cgal\ code. requirements, such that they can be successfully used in \cgal\ code.
In general they are expected to be a model of an algebraic structure In general they are expected to be a model of an algebraic structure
concepts and in case they model a subring of the real numbers they are concepts and in case they model a subring of the real numbers they are
also a model of \ccc{RealEmbeddable}. For an overview of the algebraic also a model of \ccc{RealEmbeddable}. For an overview of the algebraic
structure concepts see section~\ref{caf_ref::algebraic_structures}. structure concepts see Section~\ref{caf_ref::algebraic_structures}.
\section{Built-in Number Types} \section{Built-in Number Types}
@ -196,43 +198,4 @@ reflect their interoperability.
%also a random numbers generator \ccc{CGAL::Random}. %also a random numbers generator \ccc{CGAL::Random}.
{\em \small % \input{todo.txt}
TODO: move this part to chapter: kernel
\cgal\ kernel classes are parameterized by number types.
Depending on the problem and the input data that have to be handled,
one has to make a trade-off between efficiency and accuracy in
order to select an appropriate number type and kernel class.
In homogeneous representation, two number types are involved,
although only one of them appears as a template parameter in
the homogeneous kernel classes.
This type, for the sake of simplicity and readability called ring type, is
used for the representation of homogeneous coordinates and all
internal computations.
If it is assured that the second operand divides the first one, these
internal computations are basically division-free.
The ring type is a placeholder for an integer type (or an integral
domain type) rather than for elements of arbitrary rings.
The name should remind you that the division operation is not
needed for this number type.
Of course, also more general number types can be used as a ring type
in a homogeneous kernel class. In some computations, e.g.\ accessing
Cartesian coordinates, divisions cannot be avoided. In these computations a
second number type, the field type, is used. \cgal\ automatically generates
this number type as a \ccStyle{Quotient}\ccTexHtml{,
cf.\ Subsection~\ref{Quotient}}{}. For the Cartesian kernels
there is only one number type that is used for all calculations.
The kernel classes provide access to the number types
involved in the representation, although it is not expected that
such access is needed at this level, since low-level geometric
operations are wrapped in geometric primitives provided by \cgal.
This access can be useful if appropriate primitives are missing.
In a homogeneous kernel class \ccStyle{K}, ring type and field
type can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, respectively.
The number type used in Cartesian kernels is considered as
ring type or as field type depending on the context.
If can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, according
to the use of number types used in the homogeneous counterpart.
}

View File

@ -0,0 +1,40 @@
{\em \small
TODO: move this part to chapter: kernel
\cgal\ kernel classes are parameterized by number types.
Depending on the problem and the input data that have to be handled,
one has to make a trade-off between efficiency and accuracy in
order to select an appropriate number type and kernel class.
In homogeneous representation, two number types are involved,
although only one of them appears as a template parameter in
the homogeneous kernel classes.
This type, for the sake of simplicity and readability called ring type, is
used for the representation of homogeneous coordinates and all
internal computations.
If it is assured that the second operand divides the first one, these
internal computations are basically division-free.
The ring type is a placeholder for an integer type (or an integral
domain type) rather than for elements of arbitrary rings.
The name should remind you that the division operation is not
needed for this number type.
Of course, also more general number types can be used as a ring type
in a homogeneous kernel class. In some computations, e.g.\ accessing
Cartesian coordinates, divisions cannot be avoided. In these computations a
second number type, the field type, is used. \cgal\ automatically generates
this number type as a \ccStyle{Quotient}\ccTexHtml{,
cf.\ Subsection~\ref{Quotient}}{}. For the Cartesian kernels
there is only one number type that is used for all calculations.
The kernel classes provide access to the number types
involved in the representation, although it is not expected that
such access is needed at this level, since low-level geometric
operations are wrapped in geometric primitives provided by \cgal.
This access can be useful if appropriate primitives are missing.
In a homogeneous kernel class \ccStyle{K}, ring type and field
type can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, respectively.
The number type used in Cartesian kernels is considered as
ring type or as field type depending on the context.
If can be accessed as \ccStyle{K::RT} and \ccStyle{K::FT}, according
to the use of number types used in the homogeneous counterpart.
}

View File

@ -248,7 +248,7 @@ function at this optimal solution is $2^2 + 4(3-4)^2 = 8$.
\label{fig:QP-first_qp}} \label{fig:QP-first_qp}}
\end{figure} \end{figure}
\subsection{Constructing a program from data} \subsection{Constructing a Program from Data}
Here is how this quadratic program can be solved in \cgal\ Here is how this quadratic program can be solved in \cgal\
according to the first way (letting the model take care of according to the first way (letting the model take care of
the data). We use \ccc{int} as the input type, and the data). We use \ccc{int} as the input type, and
@ -282,7 +282,7 @@ If \texttt{GMP} is not installed, the values are of course the same,
but numerator and denominator might have a common divisor that is not but numerator and denominator might have a common divisor that is not
factored out. factored out.
\subsection{Constructing a program from a stream} \subsection{Constructing a Program from a Stream}
Here, the program data must be available in \ccc{MPSFormat} (the Here, the program data must be available in \ccc{MPSFormat} (the
\ccc{MPSFormat} page shows how our running example looks like in \ccc{MPSFormat} page shows how our running example looks like in
this format, and it briefly explains the format). Assuming that this format, and it briefly explains the format). Assuming that
@ -292,7 +292,7 @@ as before.
\ccIncludeExampleCode{QP_solver/first_qp_from_mps.cpp} \ccIncludeExampleCode{QP_solver/first_qp_from_mps.cpp}
\subsection{Constructing a program from iterators} \subsection{Constructing a Program from Iterators}
The following program again solves our running example from above, The following program again solves our running example from above,
with the same output, but this time with iterators over data stored with the same output, but this time with iterators over data stored
in suitable containers. You can see that we also store zero in suitable containers. You can see that we also store zero
@ -360,7 +360,7 @@ general quadratic or linear program), but all predefined models make
it easy to specify all sorts of default bounds, covering the free it easy to specify all sorts of default bounds, covering the free
case. case.
\subsection{The linear programming solver} \subsection{The Linear Programming Solver}
Let's go back to our first quadratic program from above and change it Let's go back to our first quadratic program from above and change it
into a linear program by simply removing the quadratic part of the into a linear program by simply removing the quadratic part of the
objective function: objective function:
@ -419,7 +419,7 @@ variable values:
1: 11/3 1: 11/3
\end{verbatim} \end{verbatim}
\subsection{The nonnegative quadratic programming solver} \subsection{The Nonnegative Quadratic Programming Solver}
If we go back to our first quadratic program and If we go back to our first quadratic program and
remove the constraint $y\leq 4$, we arrive at a nonnegative quadratic remove the constraint $y\leq 4$, we arrive at a nonnegative quadratic
program: program:
@ -469,7 +469,7 @@ variable values:
\ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_mps.cpp}\\ \ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_mps.cpp}\\
\ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_iterators.cpp} \ccReferToExampleCode{QP_solver/first_nonnegative_qp_from_iterators.cpp}
\subsection{The nonnegative linear programming solver} \subsection{The Nonnegative Linear Programming Solver}
Finally, a dedicated model and function is available for nonnnegative linear Finally, a dedicated model and function is available for nonnnegative linear
programs as well. Let's take our linear program from above and remove programs as well. Let's take our linear program from above and remove
the constraint $y\leq 4$ to obtain a nonnegative linear program. At the constraint $y\leq 4$ to obtain a nonnegative linear program. At
@ -553,7 +553,7 @@ most. As the exact type, we use \ccc{MP_Float} or \ccc{Gmpzf}
\ccIncludeExampleCode{QP_solver/convex_hull_containment.cpp} \ccIncludeExampleCode{QP_solver/convex_hull_containment.cpp}
\subsection{Using makers\label{sec:QP-makers}} \subsection{Using Makers\label{sec:QP-makers}}
You already noticed in the previous example that the actual You already noticed in the previous example that the actual
template arguments for template arguments for
\ccc{CGAL::Nonnegative_linear_program_from_iterators<A_it, B_it, R_it, C_it>} \ccc{CGAL::Nonnegative_linear_program_from_iterators<A_it, B_it, R_it, C_it>}
@ -679,7 +679,7 @@ This can be done by passing a suitably prepared object of the class
concern ``soft'' issues like verbosity, but there are two notable case concern ``soft'' issues like verbosity, but there are two notable case
where it is of critical importance to be able to change the defaults. where it is of critical importance to be able to change the defaults.
\subsection{Exponent overflow in double using floating-point filters\label{sec:QP-customization-filtering}} \subsection{Exponent Overflow in Double Using Floating-Point Filters\label{sec:QP-customization-filtering}}
The filtered version of the solver that is used for some problems The filtered version of the solver that is used for some problems
by default on input by default on input
type \ccc{double} internally constructs double-approximations of exact type \ccc{double} internally constructs double-approximations of exact
@ -700,7 +700,7 @@ to be safe from the issue described here (see
\ccReferToExampleCode{QP_solver/cycling.cpp} \ccReferToExampleCode{QP_solver/cycling.cpp}
for an example that shows how to change the pricing strategy). for an example that shows how to change the pricing strategy).
\subsection{The solver internally cycles\label{sec:QP-customization-cycling}} \subsection{The Solver Internally Cycles\label{sec:QP-customization-cycling}}
Consider the following program. It reads a nonnegative linear program from Consider the following program. It reads a nonnegative linear program from
the file \texttt{cycling.mps} (which is in the example directory as well), the file \texttt{cycling.mps} (which is in the example directory as well),
and then solves it in verbose mode, using \emph{Bland's rule}, see and then solves it in verbose mode, using \emph{Bland's rule}, see

View File

@ -37,7 +37,7 @@ algorithms; such quantities may be computed by the package {\em
Estimation of Local Differential Properties of Sampled Surfaces via Estimation of Local Differential Properties of Sampled Surfaces via
Polynomial Fitting}. Polynomial Fitting}.
Notice this package needs the third party libraries Note that this package needs the third party libraries
\ccThirdPartyLapack\ and \ccThirdPartyBlas\ for linear algebra operations. \ccThirdPartyLapack\ and \ccThirdPartyBlas\ for linear algebra operations.
\subsection{Overview} \subsection{Overview}

View File

@ -1,4 +1,4 @@
\subsection{Example ofRange Tree on Map-like Data\label{sec:range_tree_ex}} \subsection{Example for Range Tree on Map-like Data\label{sec:range_tree_ex}}
The following example program uses the predefined \ccc{ The following example program uses the predefined \ccc{
Range_tree_2} data structure together with the predefined traits Range_tree_2} data structure together with the predefined traits
@ -47,7 +47,7 @@ int main()
\subsection{Example of Range Tree on Set-like Data} \subsection{Example for Range Tree on Set-like Data}
This example illustrates the use of the range tree on This example illustrates the use of the range tree on
2-dimensional point data (no value is associated to a data item). 2-dimensional point data (no value is associated to a data item).

View File

@ -1,5 +1,5 @@
\subsection{Example of Segment Tree on Map-like Data\label{sec:segment_tree_ex}} \subsection{Example for Segment Tree on Map-like Data\label{sec:segment_tree_ex}}
The following example program uses the predefined \ccc{ The following example program uses the predefined \ccc{
Segment_tree_2} data structure together with the predefined traits Segment_tree_2} data structure together with the predefined traits
@ -65,7 +65,7 @@ int main()
\end{verbatim} \end{verbatim}
\subsection{Example of Segment Tree on Set-like Data} \subsection{Example for Segment Tree on Set-like Data}
This example illustrates the use of the predefined segment tree This example illustrates the use of the predefined segment tree
on 3-dimensional interval data (with no value associated). After on 3-dimensional interval data (with no value associated). After

View File

@ -500,7 +500,7 @@ pretty much alike a proper medial axis.
The most natural usage of straight skeletons is offsetting: growing and shrinking polygons (provided by this \cgal\ package). The most natural usage of straight skeletons is offsetting: growing and shrinking polygons (provided by this \cgal\ package).
Anther usage, perhaps its very first, is roof design: The straight skeleton of a polygonal roof directly gives the layout of each tent. If each skeleton edge is lifted from the plane a height equal to its offset distance, the resulting roof is "correct" in that water will always fall down to the contour edges (roof border) regardless of were in the roof it falls. \cite{cgal:ld-agrm-03} gives an algorithm for roof design based on the straight skeleton. Another usage, perhaps its very first, is roof design: The straight skeleton of a polygonal roof directly gives the layout of each tent. If each skeleton edge is lifted from the plane a height equal to its offset distance, the resulting roof is "correct" in that water will always fall down to the contour edges (roof border) regardless of were in the roof it falls. \cite{cgal:ld-agrm-03} gives an algorithm for roof design based on the straight skeleton.
Just like medial axes, 2D straight skeletons can also be used for 2D shape description and matching. Essentially, all the applications of image-based skeletonization (for which there is a vast literature) are also direct applications of the straight skeleton, specially since skeleton edges are simply straight line segments. Just like medial axes, 2D straight skeletons can also be used for 2D shape description and matching. Essentially, all the applications of image-based skeletonization (for which there is a vast literature) are also direct applications of the straight skeleton, specially since skeleton edges are simply straight line segments.

View File

@ -266,7 +266,7 @@ That is, you give each parameter a name by wrapping it into a function whose nam
When you use named parameters, the ordering is irrelevant, so this: \ccc{f(name(n).age(a).gender(g))} is equivalent to this: When you use named parameters, the ordering is irrelevant, so this: \ccc{f(name(n).age(a).gender(g))} is equivalent to this:
\ccc{f(age(a).gender(g).name(n))}, and you can just omit any named parameter that has a default value. \ccc{f(age(a).gender(g).name(n))}, and you can just omit any named parameter that has a default value.
\subsubsection{Sample call} \subsubsection{Sample Call}
\begin{ccExampleCode} \begin{ccExampleCode}
/* /*

View File

@ -511,7 +511,7 @@ three caching degeneracy removal policies support on-line insertions.
\subsection{Efficiency Considerations\label{subsec:vda2-efficiency}} \subsection*{Efficiency Considerations\label{subsec:vda2-efficiency}}
One last item that merits some discussion are the different choices One last item that merits some discussion are the different choices
from the point of view of time- and space-efficiency. from the point of view of time- and space-efficiency.

View File

@ -440,7 +440,7 @@ private:
// Specialization for the identity face degeneracy tester // Specialization for the identity face degeneracy tester
template<class DG> class Identity_face_rejector; template<class DG> struct Identity_face_rejector;
template<class DG> template<class DG>
class Cached_face_rejector<Identity_face_rejector<DG>,Tag_false> class Cached_face_rejector<Identity_face_rejector<DG>,Tag_false>