mirror of https://github.com/CGAL/cgal
90 lines
4.1 KiB
TeX
90 lines
4.1 KiB
TeX
\section{Introduction}
|
|
|
|
The goal of the 3D spherical kernel is to offer to the user a large
|
|
set of functionalities on spheres, circles and circular arcs in the 3D
|
|
space. These functionalities require computing on algebraic numbers,
|
|
which motivates the creation of a new kernel concept extending the
|
|
\cgal\ \ccc{Kernel} concept, which is restricted to objects
|
|
and functionality in a \ccc{FieldNumberType}.
|
|
|
|
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 kernel manual
|
|
(Chapter~\ref{chapter-kernel-23}).
|
|
|
|
\section{Spherical Kernel Objects\label{section-SK-objects}}
|
|
|
|
New main geometric objects are introduced by \ccc{Spherical_kernel_3}:
|
|
circular arcs ((model of \ccc{SphericalKernel::CircularArc_3}), points
|
|
of circular arcs (model of \ccc{SphericalKernel::CircularArcPoint_3}),
|
|
and line segments (model of \ccc{SphericalKernel::LineArc_3}) whose
|
|
endpoints are points of this new type.
|
|
|
|
\ccc{SphericalKernel::CircularArcPoint_3} is used in particular for
|
|
endpoints of arcs and intersection points between spheres, circles or
|
|
arcs. The coordinates of these points are algebraic numbers of degree
|
|
two. Therefore, general predicates offered by the \ccc{Kernel} on
|
|
\ccc{Point_3}, which have coordinates in a \ccc{FieldNumberType},
|
|
would require heavy algebraic computations in algebraic extensions
|
|
of higher degrees and thus are not provided on
|
|
them, which explains the need for a new point type.
|
|
|
|
A consistent set of predicates and constructions is offered on this
|
|
new type of points. The spherical kernel currently implements a set of
|
|
fundamental functionalities like intersection, comparisons, inclusion,
|
|
etc. More might be provided in the future, as long as only algebraic
|
|
numbers of degree two are used.
|
|
|
|
\section{Software Design}
|
|
|
|
The design of \ccc{Spherical_kernel_3} is similar to the design of
|
|
\ccc{Circular_kernel_2} (see Chapter~\ref{chapter-circular-kernel}).
|
|
It has two template parameters:
|
|
\begin{itemize}
|
|
\item {} the first parameter must model the \cgal\
|
|
three dimensional \ccc{Kernel} concept. The spherical kernel derives
|
|
from it, and it provides all elementary geometric objects like points,
|
|
lines, spheres, circles and elementary functionality on them.
|
|
%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
|
|
must model the concept \ccc{AlgebraicKernelForSpheres}. The
|
|
robustness of the package relies on the fact that the algebraic kernel
|
|
provides exact computations on algebraic objects.
|
|
\end{itemize}
|
|
|
|
The 3D spherical kernel uses the extensibility scheme presented in the
|
|
kernel manual (see Section~\ref{section-extensible-kernel}). The types
|
|
of \ccc{Kernel} are inherited by the 3D spherical kernel and some
|
|
types are taken from the \ccc{AlgebraicKernelForSpheres}
|
|
parameter. \ccc{Spherical_kernel_3} introduces new geometric objects
|
|
as mentioned in Section~\ref{section-SK-objects}.
|
|
|
|
In fact, the spherical kernel is documented as a concept,
|
|
\ccc{SphericalKernel} and two models are provided:
|
|
\begin{itemize}
|
|
\item {} \ccc{Spherical_kernel_3<Kernel,AlgebraicKernelForSpheres>}, the basic kernel,
|
|
\item {} and a predefined kernel \ccc{Exact_circular_kernel_3}.
|
|
\end{itemize}
|
|
|
|
\section{Example}
|
|
\textit{following example to be improved, and more examples and explanations to be added...}
|
|
|
|
\ccIncludeExampleCode{Circular_kernel_3/spherical_kernel_3.cpp}
|
|
|
|
\section{Design and Implementation History}
|
|
|
|
This package follows the 2D circular kernel package (see
|
|
Chapter~\ref{chapter-circular-kernel}), which induced the basic
|
|
choices of design.
|
|
|
|
Julien Hazebrouck and Damien Leroy participated in a first
|
|
prototype. Sylvain Pion is acknowledged for helpful discussions.
|
|
|
|
This work was 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).
|