This commit is contained in:
Monique Teillaud 2006-04-07 15:12:25 +00:00
parent 141d5f608e
commit f76ff4d963
2 changed files with 122 additions and 121 deletions

View File

@ -0,0 +1,121 @@
\section{Introduction}
The goal of the circular kernel is to offer to the user a large set of
functionalities on circles and circular arcs in the plane. All the
choices (interface, robustness, representation, and so on) made here
are consistent with the choices made in the \cgal\ kernel, for which we
refer the user to the 2D kernel manual.
In this first release, all functionalities necessary for computing an
arrangement of circular arcs and these line segments are
defined. Three traits classes are provided for the \cgal\ arrangement
package.
\section{Software Design}
The design is done in such a way that the algebraic concepts and the
geometric concepts are clearly separated. \ccc{Circular_kernel_2}
has therefore two template parameters:
\begin{itemize}
\item {} the \ccc{LinearKernel}, from which the circular kernel derives,
provides all elementary geometric objects like points, lines, circles, and
elementary functionality on them. It must be a model of the \cgal\ two
dimensional \ccc{Kernel} concept.
%The \cgal\ 2D Kernel can be used as parameter,
%but the user may plug his own kernel
%instead, as long as it follows the \cgal\ kernel concept.
\item {} the second parameter is the algebraic kernel, which is
responsible for computations on polynomials and algebraic numbers. It
has to be a model of concept \ccc{AlgebraicKernelForCircles}. The
robustness of the package relies on the fact that the algebraic kernel
provides exact computations on algebraic objects.
\end{itemize}
The circular kernel uses the extensibility scheme presented in the 2D
kernel manual (see Section~\ref{section-extensible-kernel}).
The types of \ccc{LinearKernel} are inherited
by the circular kernel and some types are taken from the
\ccc{AlgebraicKernelForCircles} parameter. Three new main geometric objects are
introduced by \ccc{Circular_kernel_2}: circular arcs, points of
circular arcs (used in particular for endpoints of arcs and
intersection points between arcs) and line segments whose endpoints
are points of this new type.
In fact, the circular kernel is documented as a concept, \ccc{CircularKernel},
and two models are provided:
\begin{itemize}
\item {} \ccc{Circular_kernel_2<LinearKernel,AlgebraicKernelForCircles>}, the basic kernel,
\item {} and
a predefined filtered kernel \ccc{Exact_circular_kernel_2},
that is based on similar techniques as
\ccc{Exact_predicates_exact_constructions_kernel}.
\end{itemize}
More work is in progress to increase the efficiency of this filtered kernel
and provide other filtering techniques.
%several filtered kernels are built on top of this basic kernel to
%increase effciency:\\
%\ccc{Lazy_curved_kernel<??>}, \\
%\ccc{Filtered_hexagon_curved_kernel<CircularKernel>}, and\\
%\ccc{Filtered_bbox_curved_kernel<CircularKernel>}. \\
%Kernels are enumerated here from finest to coarsest filtering
%technique. As in the 2D \cgal\ kernel, the idea is that cascading
%filters should give the most efficient result \footnote{In practice,
%benchmarking should still be done and further optimizations will be
%provided for future releases.}
\section{Examples}
\subsection{Computing an Arrangement of Random Circles}
This example shows how to construct incrementally an arrangement of
circles, using the traits class for arrangement of circular arcs
provided with the package.
\ccIncludeExampleCode{Curved_kernel/example_arrangement_random_circles.C}
\subsection{Constructing an Arrangement of Circles and Segments}
In this example, the traits class using the
\ccAnchor{http://www.boost.org/doc/html/variant.html}{boost::variant}
is used in order to provide arrangements with curves that can be
either circular arcs or line segments.
\ccIncludeExampleCode{Curved_kernel/example_arrangement_random_circles_segments.C}
\subsection{Using the Predefined Kernel}
\ccIncludeExampleCode{Curved_kernel/example_Exact_circular_kernel.C}
\section{Design and Implementation History}
The first pieces of prototype code were comparisons of algebraic
numbers of degree~2, written by Olivier Devillers
\cite{cgal:dfmt-amafe-00,cgal:dfmt-amafe-02}, and that are still used
in the current implementation of \ccc{CGAL::Root_of_2}.
Some work was then done in the direction of a ``kernel'' for
\cgal.\footnote{Monique Teillaud, First Prototype of a
\cgal\ Geometric Kernel with Circular Arcs, Technical Report
ECG-TR-182203-01, 2002\\Sylvain Pion and Monique Teillaud,
Towards a \cgal-like kernel for curves, Technical Report
ECG-TR-302206-01, 2003} and the first design emerged in
\cite{cgal:ekptt-tock-04}.
The code of this package was written by Sylvain Pion and Monique
Teillaud who also wrote the manual. Athanasios Kakargias worked on an
prototype version of this kernel in 2003. Julien Hazebrouck
participated in the implementation of this kernel in July and August
2005.
Some work is in progress on the implementation of a 3D kernel for
circles, circular arcs and spherical patches (with the participation
of Julien Hazebrouck and Damien Leroy).
This work was partially supported by the IST Programme of the EU as a
Shared-cost RTD (FET Open) Project under Contract No IST-2000-26473
(\ccAnchor{http://www-sop.inria.fr/prisme/ECG/}{ECG} - Effective
Computational Geometry for Curves and Surfaces).\\
This work is now partially supported by the IST Programme of the 6th
Framework Programme of the EU as a STREP (FET Open Scheme) Project
under Contract No IST-006413 (\ccAnchor{http://acs.cs.rug.nl/}{ACS} -
Algorithms for Complex Shapes).

View File

@ -6,124 +6,4 @@
\minitoc
\section{Introduction}
The goal of the circular kernel is to offer to the user a large set of
functionalities on circles and circular arcs in the plane. All the
choices (interface, robustness, representation, and so on) made here
are consistent with the choices made in the \cgal\ kernel, for which we
refer the user to the 2D kernel manual.
In this first release, all functionalities necessary for computing an
arrangement of circular arcs and these line segments are
defined. Three traits classes are provided for the \cgal\ arrangement
package.
\section{Software Design}
The design is done in such a way that the algebraic concepts and the
geometric concepts are clearly separated. \ccc{Circular_kernel_2}
has therefore two template parameters:
\begin{itemize}
\item {} the \ccc{LinearKernel}, from which the circular kernel derives,
provides all elementary geometric objects like points, lines, circles, and
elementary functionality on them. It must be a model of the \cgal\ two
dimensional \ccc{Kernel} concept.
%The \cgal\ 2D Kernel can be used as parameter,
%but the user may plug his own kernel
%instead, as long as it follows the \cgal\ kernel concept.
\item {} the second parameter is the algebraic kernel, which is
responsible for computations on polynomials and algebraic numbers. It
has to be a model of concept \ccc{AlgebraicKernelForCircles}. The
robustness of the package relies on the fact that the algebraic kernel
provides exact computations on algebraic objects.
\end{itemize}
The circular kernel uses the extensibility scheme presented in the 2D
kernel manual (see Section~\ref{section-extensible-kernel}).
The types of \ccc{LinearKernel} are inherited
by the circular kernel and some types are taken from the
\ccc{AlgebraicKernelForCircles} parameter. Three new main geometric objects are
introduced by \ccc{Circular_kernel_2}: circular arcs, points of
circular arcs (used in particular for endpoints of arcs and
intersection points between arcs) and line segments whose endpoints
are points of this new type.
In fact, the circular kernel is documented as a concept, \ccc{CircularKernel},
and two models are provided:
\begin{itemize}
\item {} \ccc{Circular_kernel_2<LinearKernel,AlgebraicKernelForCircles>}, the basic kernel,
\item {} and
a predefined filtered kernel \ccc{Exact_circular_kernel_2},
that is based on similar techniques as
\ccc{Exact_predicates_exact_constructions_kernel}.
\end{itemize}
More work is in progress to increase the efficiency of this filtered kernel
and provide other filtering techniques.
%several filtered kernels are built on top of this basic kernel to
%increase effciency:\\
%\ccc{Lazy_curved_kernel<??>}, \\
%\ccc{Filtered_hexagon_curved_kernel<CircularKernel>}, and\\
%\ccc{Filtered_bbox_curved_kernel<CircularKernel>}. \\
%Kernels are enumerated here from finest to coarsest filtering
%technique. As in the 2D \cgal\ kernel, the idea is that cascading
%filters should give the most efficient result \footnote{In practice,
%benchmarking should still be done and further optimizations will be
%provided for future releases.}
\section{Examples}
\subsection{Computing an Arrangement of Random Circles}
This example shows how to construct incrementally an arrangement of
circles, using the traits class for arrangement of circular arcs
provided with the package.
\ccIncludeExampleCode{Curved_kernel/example_arrangement_random_circles.C}
\subsection{Constructing an Arrangement of Circles and Segments}
In this example, the traits class using the
\ccAnchor{http://www.boost.org/doc/html/variant.html}{boost::variant}
is used in order to provide arrangements with curves that can be
either circular arcs or line segments.
\ccIncludeExampleCode{Curved_kernel/example_arrangement_random_circles_segments.C}
\subsection{Using the Predefined Kernel}
\ccIncludeExampleCode{Curved_kernel/example_Exact_circular_kernel.C}
\section{Design and Implementation History}
The first pieces of prototype code were comparisons of algebraic
numbers of degree~2, written by Olivier Devillers
\cite{cgal:dfmt-amafe-00,cgal:dfmt-amafe-02}, and that are still used
in the current implementation of \ccc{CGAL::Root_of_2}.
Some work was then done in the direction of a ``kernel'' for
\cgal.\footnote{Monique Teillaud, First Prototype of a
\cgal\ Geometric Kernel with Circular Arcs, Technical Report
ECG-TR-182203-01, 2002\\Sylvain Pion and Monique Teillaud,
Towards a \cgal-like kernel for curves, Technical Report
ECG-TR-302206-01, 2003} and the first design emerged in
\cite{cgal:ekptt-tock-04}.
The code of this package was written by Sylvain Pion and Monique
Teillaud who also wrote the manual. Athanasios Kakargias worked on an
prototype version of this kernel in 2003. Julien Hazebrouck
participated in the implementation of this kernel in July and August
2005.
Some work is in progress on the implementation of a 3D kernel for
circles, circular arcs and spherical patches (with the participation
of Julien Hazebrouck and Damien Leroy).
This work was partially supported by the IST Programme of the EU as a
Shared-cost RTD (FET Open) Project under Contract No IST-2000-26473
(\ccAnchor{http://www-sop.inria.fr/prisme/ECG/}{ECG} - Effective
Computational Geometry for Curves and Surfaces).\\
This work is now partially supported by the IST Programme of the 6th
Framework Programme of the EU as a STREP (FET Open Scheme) Project
under Contract No IST-006413 (\ccAnchor{http://acs.cs.rug.nl/}{ACS} -
Algorithms for Complex Shapes).
\input{Curved_kernel/CK}