namespace CGAL {
/*!

\mainpage User Manual
\anchor Chapter_2D_Circular_Geometry_Kernel
\cgalAutoToc

\authors Pedro Machado Manh&atilde;es de Castro, Sylvain Pion, and Monique Teillaud

\section Circular_kernel_2Introduction 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 Circular_kernel_2Software Software Design

The design is done in such a way that the algebraic concepts and the
geometric concepts are clearly separated. `Circular_kernel_2`
has therefore two template parameters:
<UL>
<LI> the first parameter must model the \cgal
three dimensional `Kernel` concept. The circular kernel derives
from it, and it provides all elementary geometric objects like points,
lines, circles, and elementary functionality on them.
<LI> 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 `AlgebraicKernelForCircles`. The
robustness of the package relies on the fact that the algebraic kernel
provides exact computations on algebraic objects.
</UL>

The circular kernel uses the extensibility scheme presented in the 2D
kernel manual (see Section \ref sectionextensiblekernel).
The types of `Kernel` are inherited
by the circular kernel and some types are taken from the
`AlgebraicKernelForCircles` parameter. Three new main geometric objects are
introduced by `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, `CircularKernel`,
and two models are provided:
<UL>
<LI> `Circular_kernel_2<Kernel,AlgebraicKernelForCircles>`, the basic kernel,
<LI> and
a predefined filtered kernel `Exact_circular_kernel_2`,
that is based on similar techniques as
`Exact_predicates_exact_constructions_kernel`.
</UL>

\section Circular_kernel_2Examples Examples

The first example shows how to construct circles or circular arcs from
points, and how to compute intersections between them using the global
function.

\cgalExample{Circular_kernel_2/intersecting_arcs.cpp}

The following example shows how to use a functor of the kernel.

\cgalExample{Circular_kernel_2/functor_has_on_2.cpp}

\section Circular_kernel_2Design Design and Implementation History

The first pieces of prototype code were comparisons of algebraic
numbers of degree 2, written by Olivier Devillers
\cgalCite{cgal:dfmt-amafe-00},\cgalCite{cgal:dfmt-amafe-02}.

Some work was then done in the direction of a "kernel" for
\cgal.\cgalFootnote{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
\cgalCite{cgal:ekptt-tock-04}.

The code of this package was initially written by Sylvain Pion and
Monique Teillaud who also wrote the manual. Athanasios Kakargias had
worked on a prototype version of this kernel in 2003. Julien
Hazebrouck participated in the implementation in July and August
2005. The contribution of Pedro Machado Manh&atilde;es de Castro in
summer 2006 improved significantly the efficiency of this kernel. He
also added more functionality in 2008.

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
(<A HREF="https://www-sop.inria.fr/prisme/ECG/">ECG</A> - Effective
Computational Geometry for Curves and Surfaces) and by the IST
Programme of the 6th Framework Programme of the EU as a STREP (FET
Open Scheme) Project under Contract No IST-006413
(ACS - Algorithms for Complex
Shapes).


@todo fix manual for operator>>

@todo manual filtered bbox kernel, ref counting

@todo manual orientation: NO (only when points have same delta, so don't document)

@todo clean manual AK (concepts like Polynomial_1_2, access to a() b() c() ?
used in solve to check that solutions are the same)

@todo rendre Bbox filtered kernel completement generique ->
        utilisation dans linear kernel aussi

@todo echecs de filtres

@todo voir make_x_monotone pour que ca retourne des arcs
(necessite bricolage de la traits car Arr_2 demande des Object)

@todo interface intersect avec plusieurs outputIt types (types de retour differents)

@todo --> a transferer dans linear kernel ?
        - unoriented equal (pb general orientation dans noyau cgal...)

@todo construct intersection for *arcs* should use solve or solve in range

@todo  done (?)

@todo memory leaks in Filtered_bbox_circular_kernel_2

@todo from Andreas:
  there are new statements in constructors having no corresponding
  delete statements.
  This concerns the files in the directory:
  CGAL-3.3.1/include/CGAL/Filtered_bbox_circular_kernel_2/...with_bbox_2.h
  It should be enough to add destructors and add conditional
  deletes.

@todo  Reading the code I think that the IO routines also don't
  do what they should do, namely computing new bboxes.


*/
} /* namespace CGAL */

