diff --git a/Curved_kernel/doc_tex/Curved_kernel/CK.tex b/Curved_kernel/doc_tex/Curved_kernel/CK.tex new file mode 100644 index 00000000000..bda7621d8e0 --- /dev/null +++ b/Curved_kernel/doc_tex/Curved_kernel/CK.tex @@ -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}, 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}, and\\ +%\ccc{Filtered_bbox_curved_kernel}. \\ +%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). diff --git a/Curved_kernel/doc_tex/Curved_kernel/main.tex b/Curved_kernel/doc_tex/Curved_kernel/main.tex index 3f8e86184b7..250132ec595 100644 --- a/Curved_kernel/doc_tex/Curved_kernel/main.tex +++ b/Curved_kernel/doc_tex/Curved_kernel/main.tex @@ -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}, 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}, and\\ -%\ccc{Filtered_bbox_curved_kernel}. \\ -%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}