CGAL 5.0  2D Circular Geometry Kernel

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.
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:
Kernel
concept. The circular kernel derives from it, and it provides all elementary geometric objects like points, lines, circles, and elementary functionality on them. AlgebraicKernelForCircles
. The robustness of the package relies on the fact that the algebraic kernel provides exact computations on algebraic objects. The circular kernel uses the extensibility scheme presented in the 2D kernel manual (see Section Extensible Kernel). 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:
Circular_kernel_2<Kernel,AlgebraicKernelForCircles>
, the basic kernel, Exact_circular_kernel_2
, that is based on similar techniques as Exact_predicates_exact_constructions_kernel
. The first example shows how to construct circles or circular arcs from points, and how to compute intersections between them using the global function.
File Circular_kernel_2/intersecting_arcs.cpp
The following example shows how to use a functor of the kernel.
File Circular_kernel_2/functor_has_on_2.cpp
The first pieces of prototype code were comparisons of algebraic numbers of degree 2, written by Olivier Devillers [1],[2].
Some work was then done in the direction of a "kernel" for CGAL.Monique Teillaud, First Prototype of a CGAL Geometric Kernel with Circular Arcs, Technical Report ECGTR18220301, 2002 Sylvain Pion and Monique Teillaud, Towards a CGALlike kernel for curves, Technical Report ECGTR30220601, 2003 and the first design emerged in [3].
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
This work was partially supported by the IST Programme of the EU as a Sharedcost RTD (FET Open) Project under Contract No IST200026473 (ECG  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 IST006413 (ACS  Algorithms for Complex Shapes).