Algebraic_kernel_for_circles (instead of Algebraic_kernel)

This commit is contained in:
Pedro Machado Manhaes de Castro 2006-08-25 10:47:55 +00:00
parent b91bc8a404
commit 6c27d0f406
17 changed files with 914 additions and 0 deletions

View File

@ -0,0 +1,153 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::ConstructPolynomial_1_2}
\ccDefinition
\ccCreationVariable{cpol}
A model \ccVar\ of this type must provide:
\ccMethod{AlgebraicKernelForCircles_2_2::Polynomial_1_2
operator()(const AlgebraicKernelForCircles_2_2::RT a,
const AlgebraicKernelForCircles_2_2::RT b,
const AlgebraicKernelForCircles_2_2::RT c);}
{Constructs polynomial \ccc{ax+by+c}.}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::ConstructPolynomialForCircles_2_2}
\ccCreationVariable{cpol}
A model \ccVar\ of this type must provide:
\ccMethod{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2
operator()(const AlgebraicKernelForCircles_2_2::FT a,
const AlgebraicKernelForCircles_2_2::FT b,
const AlgebraicKernelForCircles_2_2::FT rsq);}
{Constructs polynomial \ccc{(x-a)^2 + (y-b)^2 - rsq}.}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::Solve}
\ccDefinition
\ccCreationVariable{sol}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
OutputIterator
operator()(const AlgebraicKernelForCircles_2_2::Polynomial_1_2 &p1,
const AlgebraicKernelForCircles_2_2::Polynomial_1_2 &p2,
OutputIterator res);}
{Copies in the output iterator the common roots of \ccc{p1} and \ccc{p2}, with their multiplicity, as objects of type \ccc{std::pair< AlgebraicKernelForCircles_2_2::RootForCircles_2_2, int>}.} \footnote{???}
\ccMethod{template < class OutputIterator >
OutputIterator
operator()(const AlgebraicKernelForCircles_2_2::Polynomial1_2 &p1,
const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p2,
OutputIterator res);}
{Same as previous.}
\ccMethod{template < class OutputIterator >
OutputIterator
operator()(const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p1,
const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p2,
OutputIterator res);}
{Same as previous.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Solve;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::solve}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernel_4_2::Solve}
\ccDefinition
\ccCreationVariable{sol}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
OutputIterator
operator()(const AlgebraicKernel_4_2::Polynomial_2_2 &p1,
const AlgebraicKernel_4_2::Polynomial_2_2 &p2,
OutputIterator res);}
{Copies in the output iterator the common roots of \ccc{p1} and \ccc{p2}, with their multiplicity, as objects of type \ccc{std::pair< AlgebraicKernel_4_2::RootOf_4, int>}.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Solve;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::solve}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::XCriticalPoints}
\ccDefinition
\ccCreationVariable{xcrit}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
OutputIterator
operator()(const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p,
OutputIterator res);}
{Copies in the output iterator the \ccc{x}-critical points of polynomial
\ccc{p}, as objects of type \ccc{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}.}
\ccMethod{template < class OutputIterator >
AlgebraicKernelForCircles_2_2::RootForCircles_2_2
operator()(const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p,
bool i);}
{Computes the \ccc{i}th \ccc{x}-critical point of polynomial \ccc{p}.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::X_critical_points;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::x_critical_points}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::YCriticalPoints}
\ccDefinition
\ccCreationVariable{ycrit}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
OutputIterator
operator()(const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p,
OutputIterator res);}
{Copies in the output iterator the \ccc{y}-critical points of polynomial
\ccc{p}, as objects of type \ccc{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}.}
\ccMethod{template < class OutputIterator >
AlgebraicKernelForCircles_2_2::RootForCircles_2_2
operator()(const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 &p,
bool i);}
{Computes the \ccc{i}th \ccc{y}-critical point of polynomial \ccc{p}.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Y_critical_points;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::y_critical_points}
\end{ccRefConcept}

View File

@ -0,0 +1,100 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::CompareX}
\ccDefinition
\ccCreationVariable{cmpx}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
CGAL::Comparison_result
operator()(const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r1,
const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r2);}
{Compares the \ccc{x} variables of two \ccc{RootForCircles_2_2}.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Compare_x;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::compare_x}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::CompareY}
\ccDefinition
\ccCreationVariable{cmpy}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
CGAL::Comparison_result
operator()(const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r1,
const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r2);}
{Compares the \ccc{y} variables of two \ccc{RootForCircles_2_2}.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Compare_y;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::compare_y}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::CompareXY}
\ccDefinition
\ccCreationVariable{cmpxy}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
CGAL::Comparison_result
operator()(const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r1,
const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r2);}
{Compares two \ccc{RootForCircles_2_2} lexicographically.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Compare_xy;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::compare_xy}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::SignAt}
\ccDefinition
\ccCreationVariable{sign}
A model \ccVar\ of this type must provide:
\ccMethod{template < class OutputIterator >
CGAL::Sign
operator()(const AlgebraicKernelForCircles_2_2::Polynomial_1_2 & p,
const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r);}
{Computes the sign of polynomial \ccc{p} evaluated at a root \ccc{r}.}
\ccMethod{template < class OutputIterator >
CGAL::Sign
operator()(const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 & p,
const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & r);}
{Same as previous.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2::Sign_at;}
\ccSeeAlso
\ccRefIdfierPage{CGAL::sign_at}
\end{ccRefConcept}

View File

@ -0,0 +1,76 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2}
\ccDefinition
The \ccc{AlgebraicKernelForCircles_2_2} concept is meant to provide the
curved kernel with all the algebraic functionalities required for the
manipulation of circular arcs.
\ccTypes
A model of \ccc{AlgebraicKernelForCircles_2_2} is supposed to provide
\ccNestedType{RT}{A model of \ccc{RingNumberType}. }%In addition, the
%class \ccc{Root_of_traits_2<RT>} must be defined and provide a nested
%type \ccc{Type} which must be the same as \ccc{Root_of_2} and a
%function \ccc{make_root_of_2(RT,RT,RT,bool)} whose return type is
%\ccc{Type}.}
\ccGlue
\ccNestedType{FT}{A model of \ccc{FieldNumberType}\ccc{<RT>}.}
\footnote{concept template...?}
\ccNestedType{Polynomial_1_2}{A model of
\ccc{AlgebraicKernelForCircles_2_2::Polynomial_1_2}, for bivariate polynomials of degree up
to~1.}
\ccGlue
\ccNestedType{Polynomial_for_circles_2_2}{A model of
\ccc{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}, for bivariate polynomials
of degree up to~2 that can store equations of circles.}
\ccNestedType{Root_of_2}{A model of
\ccc{AlgebraicKernelForCircles_2_2::RootOf_2}, for algebraic numbers
of degree up to~2.}
\ccGlue
\ccNestedType{Root_for_circles_2_2}{A model of
\ccc{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}, for
solutions of systems of two models of
\ccc{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}.}
\ccNestedType{Construct_polynomial_1_2}{A model of
\ccc{AlgebraicKernelForCircles_2_2::ConstructPolynomial_1_2}.}
\ccGlue
\ccNestedType{Construct_polynomial_for_circles_2_2}{A model of
\ccc{AlgebraicKernelForCircles_2_2::ConstructPolynomialForCircles_2_2}.}
\ccNestedType{Solve}{A model of the concept \ccc{AlgebraicKernelForCircles_2_2::Solve}.}
\ccNestedType{Sign_at}{A model of the concept \ccc{AlgebraicKernelForCircles_2_2::SignAt}.}
\footnote{no \_2 (or \_2\_2) for functors ????????? problem of compatibility
with CK and the current kernel. On the other hand, allows to have only
one functor for several types of arguments}
\ccNestedType{X_critical_points}{A model of the concept
\ccc{AlgebraicKernelForCircles_2_2::XCriticalPoints}.}
\ccGlue
\ccNestedType{Y_critical_points}{A model of the concept
\ccc{AlgebraicKernelForCircles_2_2::YCriticalPoints}.}
\ccNestedType{Compare_x}{A model of the concept
\ccc{AlgebraicKernelForCircles_2_2::CompareX}.}
\ccGlue
\ccNestedType{Compare_y}{A model of the concept
\ccc{AlgebraicKernelForCircles_2_2::CompareY}.}
\ccGlue
\ccNestedType{Compare_xy}{A model of the concept
\ccc{AlgebraicKernelForCircles_2_2::CompareXY}.}
\ccHasModels
\ccc{Algebraic_kernel_for_circles_2_2}
\ccSeeAlso
\ccRefIdfierPage{CGAL::Curved_kernel<BasicGeometricKernel,AlgebraicKernel>}
\end{ccRefConcept}

View File

@ -0,0 +1,37 @@
\begin{ccRefConcept}{AlgebraicKernel_4_2}
\ccDefinition
The \ccc{AlgebraicKernel_4_2} concept is meant to provide the
curved kernel with all the algebraic functionalities required for the
manipulation of conic arcs.
\ccTypes
A model of \ccc{AlgebraicKernel_4_2} is supposed to provide
\ccNestedType{RT}{A model of \ccc{RingNumberType}. In addition, the class \ccc{Root_of_traits_4<RT>} must be defined and provide a nested type \ccc{Type} which must be the same as \ccc{Root_of_4} and a function \ccc{make_root_of_4(RT,RT,RT,RT,RT,int)} whose return type is \ccc{Type}.}\footnote{\ccc{make_root_of_4} to be replaced by solve, since we don't always want a resultant...}
\ccGlue
\ccNestedType{FT}{A model of \ccc{FieldNumberType<RT>}.} \footnote{concept template...?}
\ccc{RT} is supposed to be \ccc{Rational_traits<FT>}.
\ccNestedType{Root_of_4}{A model of \ccc{RootOf_4}, for algebraic numbers
of degree up to~4.}
\ccGlue
\ccNestedType{Polynomial_2_2}{A model of \ccc{Polynomial_2_2}, for bivariate polynomials of degree up to~2.}
\ccNestedType{Construct_polynomial_2_2}{A model of \ccc{ConstructPolynomial_2_2.}}
\ccNestedType{Solve}{A model of the concept \ccc{AlgebraicKernel_4_2::Solve}.}
\ccHasModels
\footnote{to be done}
\ccSeeAlso
\ccRefIdfierPage{Algebraic_kernel_4_2::RootOf_4}\\
\ccRefIdfierPage{Algebraic_kernel_4_2::Polynomial_2_2}\\
\ccRefIdfierPage{CGAL::Curved_kernel<BasicGeometricKernel,AlgebraicKernel>}
\end{ccRefConcept}

View File

@ -0,0 +1,5 @@
\begin{ccRefClass}{Algebraic_kernel_for_circles_2_2<RT>}
Model of \ccc{AlgebraicKernelForCircles_2_2}
\end{ccRefClass}

View File

@ -0,0 +1,183 @@
%%%%%%%%%%%%%% predicates
\begin{ccRefFunction}{compare_x}
\ccFunction{template < class AlgebraicKernelForCircles_2_2>
Comparison_result compare_x
(const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r1,
const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r2);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Compare_X}.}
\ccSeeAlso
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::CompareX}
\end{ccRefFunction}
\begin{ccRefFunction}{compare_y}
\ccFunction{template < class AlgebraicKernelForCircles_2_2>
Comparison_result compare_y
(const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r1,
const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r2);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Compare_Y}.}
\ccSeeAlso
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::CompareY}
\end{ccRefFunction}
\begin{ccRefFunction}{compare_xy}
\ccFunction{template < class AlgebraicKernelForCircles_2_2>
Comparison_result compare_xy
(const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r1,
const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r2);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Compare_XY}.}
\ccSeeAlso
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::CompareXY}
\end{ccRefFunction}
\begin{ccRefFunction}{sign_at}
\ccFunction{template < class AlgebraicKernelForCircles_2_2, class OutputIterator >
OutputIterator sign_at
(const AlgebraicKernelForCircles_2_2::Polynomial_for_circles_2_2 &p,
const AlgebraicKernelForCircles_2_2::Root_for_circles_2_2 &r);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Sign_at}.}
\ccSeeAlso
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::SignAt}
\end{ccRefFunction}
%%%%%%%%%%%%%%%%%%%%%%%% constructions
\begin{ccRefFunction}{construct_polynomial_1_2}
\ccDefinition
\ccFunction{template < class AlgebraicKernelForCircles_2_2>
AlgebraicKernelForCircles_2_2::Polynomial_1_2
construct_polynomial_1_2
(AlgebraicKernelForCircles_2_2::RT a,
AlgebraicKernelForCircles_2_2::RT b,
AlgebraicKernelForCircles_2_2::RT c);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::ConstructPolynomial_1_2}.}
\end{ccRefFunction}
\begin{ccRefFunction}{construct_polynomial_for_circles_2_2}
\ccDefinition
\ccFunction{template < class AlgebraicKernelForCircles_2_2>
AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2
construct_polynomial_for_circles_2_2
(AlgebraicKernelForCircles_2_2::RT a,
AlgebraicKernelForCircles_2_2::RT b,
AlgebraicKernelForCircles_2_2::RT c);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::ConstructPolynomialForCircles_2_2}.}
\end{ccRefFunction}
\begin{ccRefFunction}{solve}
\ccDefinition
\ccFunction{template < class AlgebraicKernelForCircles_2_2, class OutputIterator >
OutputIterator solve
(const AlgebraicKernelForCircles_2_2::Polynomial_1_2 &p1,
const AlgebraicKernelForCircles_2_2::Polynomial_1_2 &p2,
OutputIterator res);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Solve}.}
\ccFunction{template < class AlgebraicKernelForCircles_2_2, class OutputIterator >
OutputIterator solve
(const AlgebraicKernelForCircles_2_2::Polynomial_1_2 &p1,
const AlgebraicKernelForCircles_2_2::Polynomial_for_circles_2_2 &p2,
OutputIterator res);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Solve}.}
\ccFunction{template < class AlgebraicKernelForCircles_2_2, class OutputIterator >
OutputIterator solve
(const AlgebraicKernelForCircles_2_2::Polynomial_for_circles_2_2 &p1,
const AlgebraicKernelForCircles_2_2::Polynomial_for_circles_2_2 &p2,
OutputIterator res);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::Solve}.}
\ccSeeAlso
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::Solve}
\end{ccRefFunction}
\begin{ccRefFunction}{x_critical_points}
\ccFunction{template < class AlgebraicKernelForCircles_2_2, class OutputIterator >
OutputIterator
x_critical_points
(const typename AlgebraicKernelForCircles_2_2::Polynomial_for_circles_2_2 & c,
OutputIterator res);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::XCriticalPoints}.}
\end{ccRefFunction}
\begin{ccRefFunction}{x_critical_point}
\ccFunction{template < class AlgebraicKernelForCircles_2_2 >
AlgebraicKernelForCircles_2_2::Root_for_circles_2_2
x_critical_points(const typename AK::Polynomial_for_circles_2_2 & c,
bool i);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::XCriticalPoints}.}
\end{ccRefFunction}
\begin{ccRefFunction}{y_critical_points}
\ccFunction{template < class AlgebraicKernelForCircles_2_2, class OutputIterator >
OutputIterator
y_critical_points
(const typename AlgebraicKernelForCircles_2_2::Polynomial_for_circles_2_2 & c,
OutputIterator res);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::YCriticalPoints}.}
\end{ccRefFunction}
\begin{ccRefFunction}{y_critical_point}
\ccFunction{template < class AlgebraicKernelForCircles_2_2 >
AlgebraicKernelForCircles_2_2::Root_for_circles_2_2
x_critical_point(const typename AK::Polynomial_for_circles_2_2 & c,
bool i);}
{Calls the operator() of \ccc{AlgebraicKernelForCircles_2_2::YCriticalPoints}.}
\end{ccRefFunction}
\begin{ccRefFunction}{make_root_of_2}
\ccFunction{template < class RT >
Root_of_2<RT>
make_root_of_2(RT a, RT b, RT c, bool s);}
{Returns the smaller (resp. larger) root of equation $aX^2+bX+c=0$
if \ccc{s} is true (resp. false).
\ccc{RT} is supposed to be a \ccc{RingNumberType}, and \ccc{Root_of_2<RT>} is
the type given by \ccc{Root_of_traits_2<RT>}.}
\ccFunction{template < class RT >
Root_of_2<RT>
make_root_of_2(FT a, FT b, FT c, bool s);}
{.}
\footnote{groumpf. \ccc{Root_of_taits} is templated by RT but we also need (do we?) make-root-of with FT. Relation between RT and FT...?}
\ccSeeAlso
\ccRefIdfierPage{CGAL::Root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::Root_of_traits_2<RT>}
\end{ccRefFunction}

View File

@ -0,0 +1,39 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::Polynomial_1_2}
\ccDefinition
The \ccc{AlgebraicKernelForCircles_2_2::Polynomial_1_2} represents bivariate
polynomials of degree 1 whose coefficients are of type \ccc{RT}, a
model of \ccc{RingNumberType}.
\ccTypes
\ccCreation
\ccCreationVariable{pol}
\ccConstructor{Polynomial_1_2();}{Default constructor.}
%\ccAccessFunctions
%\ccFunction{const RT & a() const;}{}
%\ccGlue
%\ccFunction{const RT & b() const;}{}
%\ccGlue
%\ccFunction{const RT & c() const;}{}
%\ccOperations
%The comparison operator \ccc{==} must be provided.
%\ccFunction{bool operator ==(const AlgebraicKernelForCircles_2_2::Polynomial_1_2 & p,
% const AlgebraicKernelForCircles_2_2::Polynomial_1_2 & q);}{}
\ccHasModels
\ccc{Polynomial_1_2}
\ccSeeAlso
\ccRefIdfierPage{AlgebraicKernelForCircles_2_2}
\end{ccRefConcept}

View File

@ -0,0 +1,5 @@
\begin{ccRefClass}{Polynomial_1_2<RT>}
Model of \ccc{AlgebraicKernelForCircles_2_2::Polynomial_1_2}
\end{ccRefClass}

View File

@ -0,0 +1,53 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}
\ccDefinition
The \ccc{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2} represents
bivariate polynomials of degree up to~2 capable of storing equations
of circles, whose center has coordinates of type \ccc{FT}, a model of
\ccc{FieldNumberType}, as well as the square of the radius.
\footnote{Of course the name looks bad since it mixes geometry with algebra.
suggestions welcome}
\ccCreation
\ccCreationVariable{pol}
\ccConstructor{PolynomialForCircles_2_2();}{Default constructor.}
%\ccConstructor{PolynomialForCircles_2_2(const FT & a, const FT & b, const FT & rsq);}{Constructs polynomial \ccc{(x-a)^2 + (y-b)^2 - rsq}.}
%\ccAccessFunctions
%\ccMethod{const FT & a();}{\ccc{x}-coordinate of the center of the circle.}
%\ccGlue
%\ccMethod{const FT & b();}{\ccc{y}-coordinate of the center of the circle.}
%\ccGlue
%\ccMethod{const FT & r_sq();}{Square radius of the center of the circle.}
\ccOperations
The comparison operator \ccc{==} must be provided.
\ccFunction{bool operator ==
(AlgebraicKernelForCircles_2_2::const PolynomialForCircles_2_2 & p,
const AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2 & q);}{}
\ccHasModels
\ccc{Polynomial_for_circles_2_2}
\ccSeeAlso
\ccRefIdfierPage{AlgebraicKernelForCircles_2_2}
\end{ccRefConcept}
\begin{ccRefConcept}{Algebraic_kernel_4_2::Polynomial_2_2}
\ccDefinition
The \ccc{Algebraic_kernel_4_2::Polynomial_2_2} represents bivariate
polynomials of degree up to~2 whose coefficients are of type \ccc{RT},
a model of \ccc{RingNumberType}.
\end{ccRefConcept}

View File

@ -0,0 +1,5 @@
\begin{ccRefClass}{Polynomial_for_circles_2_2<FT>}
Model of \ccc{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}
\end{ccRefClass}

View File

@ -0,0 +1,32 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}
\ccDefinition
The \ccc{AlgebraicKernelForCircles_2_2::RootForCircles_2_2} concept represents
algebraic numbers that can store the roots of systems of two
\ccc{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}
equations of degree 2 in two variables \ccc{x} and \ccc{y}.
%\ccAccessFunctions
%\ccFunction{const AlgebraicKernelForCircles_2_2::RootOf_2 & x();}{}
%\ccGlue
%\ccFunction{const AlgebraicKernelForCircles_2_2::RootOf_2 & y();}{}
\ccOperations
The comparison operator \ccc{==} must be provided.
\ccFunction{bool operator ==(const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & p,
const AlgebraicKernelForCircles_2_2::RootForCircles_2_2 & q);}{}
\ccHasModels
\ccc{Root_for_circles_2_2}
\ccSeeAlso
\ccRefIdfierPage{AlgebraicKernelForCircles_2_2}
\end{ccRefConcept}

View File

@ -0,0 +1,59 @@
\begin{ccRefConcept}{AlgebraicKernelForCircles_2_2::RootOf_2}
\ccDefinition
The \ccc{AlgebraicKernelForCircles_2_2::RootOf_2} concept represents algebraic numbers of
degree up to~2 over a \ccc{RingNumberType} denoted as \ccc{RT}.
\ccc{FT} denotes the \ccc{FieldNumberType} constructed from \ccc{RT}.
\footnote{see \ccc{make_rational}, we need something to get FT from RT in a clean way.}
\ccCreation
\footnote{How to get RT...?}
\ccFunction{RootOf_2 make_root_of_2(RT a, RT b, RT c, bool s);}{Returns
the smaller (resp. larger) root of equation $aX^2+bX+c=0$ if \ccc{s} is true
(resp. false).}
\footnote{numbering of roots from 0 or 1? to be checked}
\ccGlue
\ccFunction{RootOf_2 make_root_of_2(FT a, FT b, FT c, bool s);}{Returns
the smaller (resp. larger) root of equation $aX^2+bX+c=0$ if \ccc{s} is true
(resp. false).}
\ccOperations
The comparison operators \ccc{==, !=, <, >, <=, >=} as well as the \ccc{sign}
and \ccc{compare} functions need to be
provided to compare elements of types \ccc{RootOf_2, RT} and \ccc{FT}.
In addition, the following operations must be provided:
\def\ccTagRmEigenClassName{\ccFalse}
\ccFunction{RootOf_2 operator+(const RT &a, const RootOf_2 &r);}{}
\ccGlue
\ccFunction{RootOf_2 operator+(const FT &a, const RootOf_2 &r);}{}
\ccGlue
\ccFunction{RootOf_2 operator+(const RootOf_2 &r, const RT &a);}{}
\ccGlue
\ccFunction{RootOf_2 operator+(const RootOf_2 &r, const FT &a);}{}
and similarly for operators -, * and /.
\ccFunction{RootOf_2 square(const RootOf_2 & r);}{}
\def\ccTagRmEigenClassName{\ccTrue}
\ccHasModels
\ccc{double}, \ccc{Root_of_2<RT>}, etc \footnote{to be precised}
\ccSeeAlso
\ccRefIdfierPage{CGAL::Root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::Root_of_traits_2<RT>}\\
\ccRefIdfierPage{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}\\
\ccRefIdfierPage{AlgebraicKernelForCircles_2_2}
\end{ccRefConcept}

View File

@ -0,0 +1,5 @@
\begin{ccRefClass}{Root_for_circles_2_2<FT>}
Model for \ccc{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}
\end{ccRefClass}

View File

@ -0,0 +1,5 @@
\begin{ccRefClass}{Root_of_2<RT>}
Model for \ccc{AlgebraicKernelForCircles_2_2::RootOf_2}
\end{ccRefClass}

View File

@ -0,0 +1,13 @@
\begin{ccRefClass}{Root_of_traits_2<RT>}
\footnote{name should be changed because it is used ''the other way round'' here, compared with usual use. Find a name with \textit{associative} inside, or/and \textit{extended/extension}...}
\ccDefinition
Associates types for algebraic numbers to \ccc{RT}, supposed to be a \ccc{RingNumberType}.
\ccTypes
\ccNestedType{Root_of_2;}{Model of \ccc{RootOf_2.}}
\end{ccRefClass}

View File

@ -0,0 +1,121 @@
\ccRefChapter{Algebraic Kernel}
\textbf{Submission - Monique - with Sylvain's help...}
\begin{ccAdvanced}
As in Curved-kernel, I use the ``Advanced'' environment in this
document to distinguish between my current submission to the CGAL
editorial board and plans for the future, related to ACS. The
``Advanced'' parts will disappear if/when this is released.
\end{ccAdvanced}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Concepts}
\footnote{Same big question as for curved-kernel. Should the kernel here
be described as a concept or a class?}
\ccRefConceptPage{AlgebraicKernelForCircles_2_2}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::Polynomial_1_2}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::RootOf_2}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}
\begin{ccAdvanced}
\ccRefConceptPage{AlgebraicKernel_4_2}\\
\ccRefConceptPage{Algebraic_kernel_4_2::Polynomial_2_2}\\
\ccRefConceptPage{AlgebraicKernel_4_2::RootOf_2_2}\\
\ccRefConceptPage{AlgebraicKernel_4_2::RootOf_4}\\
(The indices may look strange but there is indeed a logic: solve on two
Polynomial-2-2's gives Root-of-4's...)
General remark about the suffix \ccc{_d_v}: \ccc{_d} stands
for the degree of the polynomials and the algebraic numbers, and
\ccc{_v} stands for the number of variables, which is analogous to the
dimension for CGAL geometric objects. I had already mentioned this in an
earlier version of this document (presented at the CGAL meeting at
INRIA in march 05), and it is consistent with what Menelaos proposed
later (CGAL meeting in Pisa in june 05) for a hierarchy of algebraic kernels.
\end{ccAdvanced}
\subsubsection*{Functors}
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ConstructPolynomial_1_2}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ConstructPolynomialForCircles_2_2}
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ComputeA}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ComputeB}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ComputeC}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ComputeRsq}\\
(to be documented)
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ComputeX}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::ComputeY}\\
(to be documented)
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::Solve}
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::SignAt}
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::XCriticalPoints}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::YCriticalPoints}
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::CompareX}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::CompareY}\\
\ccRefConceptPage{AlgebraicKernelForCircles_2_2::CompareXY}
\begin{ccAdvanced}
\ccRefConceptPage{AlgebraicKernel_4_2::ConstructPolynomial_2_2}\\
\ccRefConceptPage{AlgebraicKernel_4_2::Solve}\\
etc
\end{ccAdvanced}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Classes}
\footnote{how does the linking work when concepts and classes have the same name...? example \ccc{Polynomial_2_2}}
\ccRefIdfierPage{CGAL::Algebraic_kernel_for_circles_2_2<RT>}
\ccRefIdfierPage{CGAL::Polynomial_1_2<RT>}\\
\ccRefIdfierPage{CGAL::Polynomial_for_circles_2_2<FT>}
\ccRefIdfierPage{CGAL::Root_of_2<RT>}\\
\ccRefIdfierPage{CGAL::Root_for_circles_2_2<FT>}
\ccRefIdfierPage{CGAL::Root_of_traits_2<RT>}
\begin{ccAdvanced}
\ccRefIdfierPage{CGAL::Root_of_4<RT>}\\
\ccRefIdfierPage{CGAL::Polynomial_2_2<RT>}\\
\ccRefIdfierPage{CGAL::Root_of_2_2<RT>}\\
\ccRefIdfierPage{CGAL::Root_of_traits_4<RT>}
\end{ccAdvanced}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Functions}
\subsubsection*{Predicates}
\ccRefIdfierPage{CGAL::sign_at}\\
\ccRefIdfierPage{CGAL::compare_x}\\
\ccRefIdfierPage{CGAL::compare_y}\\
\ccRefIdfierPage{CGAL::compare_xy}
\subsubsection*{Constructions}
\ccRefIdfierPage{CGAL::construct_polynomial_1_2}\\
\ccRefIdfierPage{CGAL::construct_polynomial_for_circles_2_2}\\
\ccRefIdfierPage{CGAL::make_root_of_2}
\ccRefIdfierPage{CGAL::solve}
\ccRefIdfierPage{CGAL::x_critical_points}\\
\ccRefIdfierPage{CGAL::y_critical_points}
\begin{ccAdvanced}
\ccRefIdfierPage{CGAL::make_root_of_4}\\
etc
\end{ccAdvanced}

View File

@ -0,0 +1,23 @@
\input{Algebraic_kernel_for_circles_ref/intro}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input{Algebraic_kernel_for_circles_ref/AlgebraicKernelForCircles_2_2} %concept
\input{Algebraic_kernel_for_circles_ref/Algebraic_kernel_for_circles_2_2}
\input{Algebraic_kernel_for_circles_ref/AlgebraicKernel_4_2} %concept
\input{Algebraic_kernel_for_circles_ref/RootOf} %concept
\input{Algebraic_kernel_for_circles_ref/Root_of_2}
\input{Algebraic_kernel_for_circles_ref/RootCircle_2_2} %concept
\input{Algebraic_kernel_for_circles_ref/Root_for_circles_2_2}
\input{Algebraic_kernel_for_circles_ref/Root_of_traits_2}
\input{Algebraic_kernel_for_circles_ref/Polynomial_1} %concept
\input{Algebraic_kernel_for_circles_ref/Polynomial_1_2}
\input{Algebraic_kernel_for_circles_ref/Polynomial_2} %concept
\input{Algebraic_kernel_for_circles_ref/Polynomial_for_circles_2_2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input{Algebraic_kernel_for_circles_ref/AlgFunctorsPredicates} % concepts
\input{Algebraic_kernel_for_circles_ref/AlgFunctorsConstruct} % concepts
\input{Algebraic_kernel_for_circles_ref/Global_functions.tex}