mirror of https://github.com/CGAL/cgal
Algebraic_kernel_for_circles (instead of Algebraic_kernel)
This commit is contained in:
parent
b91bc8a404
commit
6c27d0f406
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
\begin{ccRefClass}{Algebraic_kernel_for_circles_2_2<RT>}
|
||||
|
||||
Model of \ccc{AlgebraicKernelForCircles_2_2}
|
||||
|
||||
\end{ccRefClass}
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
\begin{ccRefClass}{Polynomial_1_2<RT>}
|
||||
|
||||
Model of \ccc{AlgebraicKernelForCircles_2_2::Polynomial_1_2}
|
||||
|
||||
\end{ccRefClass}
|
||||
|
|
@ -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}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
\begin{ccRefClass}{Polynomial_for_circles_2_2<FT>}
|
||||
|
||||
Model of \ccc{AlgebraicKernelForCircles_2_2::PolynomialForCircles_2_2}
|
||||
|
||||
\end{ccRefClass}
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
\begin{ccRefClass}{Root_for_circles_2_2<FT>}
|
||||
|
||||
Model for \ccc{AlgebraicKernelForCircles_2_2::RootForCircles_2_2}
|
||||
|
||||
\end{ccRefClass}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
\begin{ccRefClass}{Root_of_2<RT>}
|
||||
|
||||
Model for \ccc{AlgebraicKernelForCircles_2_2::RootOf_2}
|
||||
|
||||
\end{ccRefClass}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
Loading…
Reference in New Issue