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.html
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.ios
circular kernel 的目標是提供一個用於平面圓和圓弧的大量的函數集。本版中,全部計算圓弧和這些線段排列的函數所有提供。三個traits類提供給了這個CGAL的arrangement 包。dom
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:ide
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:ui
Circular_kernel_2<Kernel,AlgebraicKernelForCircles>
, the basic kernel,Exact_circular_kernel_2
, that is based on similar techniques as Exact_predicates_exact_constructions_kernel
.設計將代數概念和幾何概念截然分開,因此 Circular_kernel_2
類有兩個模板參數:this
第一個參數必須是CGAL 3 維 kernel概念的模型。本circular kernel 由此概念繼承而來, 它提供了全部基本的幾何體,包括點、線、圓和它們的基本方程。spa
第二個參數是代數內核(algebraic kernel),它負責計算多項式和代數數。它必須是AlgebraicKernelForCircles概念的模型。本包的健壯性依賴於代數內核提供的對代數對象的精確計算。prototype
circular kernel 使用2D內核手冊中提到的可擴展的scheme(see Section Extensible Kernel)。Kernel的類型由 circular kernel繼承,有些類型來自於AlgebraicKernelForCircles參數。三個新的幾何對象由 Circular_kernel_2
引入:圓弧(circular arcs),圓弧的點(points of circular arcs,主要用於弧的端點和弧與弧的交點),和端點是圓弧上點的線段( line segments whose endpoints are points of this new type)。設計
實際上,circular kernel 是一個概念CircularKernel,它提供了2個模型:
Circular_kernel_2<Kernel,AlgebraicKernelForCircles>是基本內核
一個預先定義的過濾內核(filtered kernel)Exact_circular_kernel_2,它是基於與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],cgal:dfmt-amafe-02.
Some work was then done in the direction of a "kernel" for CGAL.[1] and the first design emerged in [2].
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 Shared-cost RTD (FET Open) Project under Contract No IST-2000-26473 (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 IST-006413 (ACS - Algorithms for Complex Shapes).