mirror of https://github.com/CGAL/cgal
This commit is contained in:
parent
141d5f608e
commit
f76ff4d963
|
|
@ -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).
|
||||||
|
|
@ -6,124 +6,4 @@
|
||||||
|
|
||||||
\minitoc
|
\minitoc
|
||||||
|
|
||||||
\section{Introduction}
|
\input{Curved_kernel/CK}
|
||||||
|
|
||||||
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).
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue