removed old doc

This commit is contained in:
Eric Berberich 2007-08-03 13:44:19 +00:00
parent 24d46b386d
commit a87faa588b
8 changed files with 0 additions and 644 deletions

View File

@ -1,9 +0,0 @@
\begin{ccPkgDescription}{Curve- and CurvePairAnalysis \label{Pkg:CurveAndCurvePairAnalysis}}
\ccPkgHowToCiteCgal{cgal:ccpa-bhkt}
\ccPkgSummary{
This package is ...
}
\ccPkgIntroducedInCGAL{3.?}
\ccPkgLicense{?}
\end{ccPkgDescription}

View File

@ -1,7 +0,0 @@
\ccUserChapter{Curve- and CurvePairAnalysis\label{chapter-curve-and-curvepair-analysis}}
\ccChapterAuthor{Eric Berberich \and Michael Hemmer \and Menelaos Karavelas \and Monique Teillaud}
\input{Curve_and_curve_pair_analysis_2/PkgDescription}
\minitoc

View File

@ -1,80 +0,0 @@
\begin{ccRefConcept}{AlgebraicKernelCCPA_d_2}
\ccDefinition
The \ccc{AlgebraicKernelCCPA_d_2} concept refines the \ccc{AlgebraicKernel_d_2}
concept with functionality on bivariate polynomials
required for the manipulation of arcs of algebraic curves of general degree
$\R^2$ using an $y$-per-$x$-view on the curves.
TODO: Solution\_d should be merged with AlgebraicReal\_d.
\ccRefines
\ccc{AlgebraicKernel_d_2}
\ccTypes
\ccNestedType{RealSolution_1 or AlgebraicReal_1}{
Open question!
}
\ccNestedType{RealSolution_2 or AlgebraicReal_2}{
Open question!
}
The following nested types should already be part of AlgebraicKernel\_d\_2!
\ccNestedType{MakeCoprime_1}{
}
\ccNestedType{MakeSquareFree_1}{
}
\ccNestedType{SquareFreeFactorization_1}{
}
\ccNestedType{MakeCoprime_2}{
}
\ccNestedType{MakeSquareFree_2}{
}
\ccNestedType{SquareFreeFactorization_2}{
}
What else? Monique?
These are new:
\ccNestedType{CurveAnalysis_2}{A model of
\ccc{CurvePairAnalyis_2::CurveAnalysis_2}, for analysing single
curves defined as bivariate polynomials of type \ccc{Polynomial_2}.}
\ccNestedType{CurvePairAnalysis_2}{A model of
\ccc{AlgebraicKernelCCPA_2::CurvePairAnalysis_2},
for analysing a pair of curves
defined as two analyses of type \ccc{CurveAnalysis_2}.}
%Note that polynomails need to have some functionality. Due to that reason
%we repeat these types here:
%\ccNestedType{Polynomial_1}{A model of \ccc{Polynomial_1}, for
%univariate polynomials when the \ccc{Coefficient} type is an
%\ccc{IntegralDomain}. It must also be possible to perform \ccc{Canonicalize,
% GcdUpToConstantFactor,
% IntegralDivUpToConstantFactor,
% MakeSquareFreeUpToConstantFactor, and
% SquareFreeFactorizationUpToConstantFactor.
% Also needed some PolynomialConstruction concept.}
%}
%\ccNestedType{Polynomial_2}{A model of \ccc{Polynomial_2}, for
% bivariate polynomials on an \ccc{IntegralDomain} coefficient type.
% it must also be possible to perform \ccc{Canonicalize,
% GcdUpToConstantFactor,
% IntegralDivUpToConstantFactor,
% MakeSquareFreeUpToConstantFactor, and
% SquareFreeFactorizationUpToConstantFactor} on this type - maybe using a
% traits class. Also needed some PolynomialConstruction concept.
%}
{\small TODO: Boundary: RealEmbeddable that is 'dense R'??}
\end{ccRefConcept}

View File

@ -1,190 +0,0 @@
\begin{ccRefConcept}{CurveVerticalLine}
\ccDefinition
The \ccc{CurveVerticalLine} concept is meant to provide information
about the intersections of a curve with a vertical line at a given
finite $x$-coordinate. Note that a curve can have a vertical line component
at this coordinate and/or also non-vertical components intersecting
this vertical line. With the help of the concept's methods one is able
to compute the local topology of the curve at the given vertical line.
Note that vertical lines at $x = \pm\infty$ are not allowed, since different
events (curve end going to infinity with different non-horizontal asympotes)
would have equal $y$-coordinate ($\pm\infty$), which confuses more than it
helps. Note in addition that curve ends approaching the vertical asymptote
introduce an event (depending on whether approaching $+\infty$ or $-\infty$ -
but the event with coordinates $(x,-\infty)$, resp. $(x,+\infty)$, occur
only once, if they occur)
\ccTypes
\ccNestedType{Solution_1}{
Is a model of the \ccc{AlgebraicCurveKernel_2::Solution_1} concept
}
\ccNestedType{Solution_2}{
Is a model of the \ccc{AlgebraicCurveKernel_2::Solution_2} concept
}
\ccCreationVariable{cvl}
\ccAccessFunctions
\ccMethod{Solution_1 x();}{
returns the $x$-coordinate of the vertical line (always a finite value).
}
\ccMethod{bool covers_line();}{
returns \ccc{true} in case the given curve contains the vertical line as
a component
}
\ccMethod{unsigned int num_events();}{
returns number of distinct intersection of a curve with a
(fictious) vertical line ignoring a real vertical line component
of the curve at the given $x$-coordinate.
}
\ccMethod{Solution_2 get_solution_2(int j);}{
returns an object of type \ccc{Solution_2} for the $j$-th event
\ccPrecond{$0 \leq j < \mbox{num\_events()}$}
}
\ccMethod{std::pair< unsigned int, unsigned int > get_num_branches(int j);}{
returns the number of branches of the curve connected to $j$-th event
immediately to the left,
to the right, respectively, as a pair of \ccc{unsigned int} ignoring
vertical curve components at the given $x$-coordinate.
\ccPrecond{$0 \leq j < \mbox{num\_events()}$}
}
\ccMethod{bool has_event_of_curve();}{
returns \ccc{true} if curve has vertical line component or
curve $f$ has intersection with $f_y$ at $x$
}
%
%TODO: Do we want to have CVLs for minus and plus infinity as additional
%events? For the sake of a nice interface
%(see CurveAnalysis\_2) we want to have it: A user can then just ask for the
%behavior of the curve at $x = \pm\infty$. On the other side counting
%the number of intersection points is not well-defined: Consider several
%curve end with the same horizontal asymptote - are they equal or not?
%It's unsure whether one can compute the $y$-coordinates of these points -
%maybe even not the ``sign of infinity''. One solution is to forbid access
%to get\_solution\_2 for CurveVerticalLines with $x = \pm\infty$.
%
\end{ccRefConcept}
\begin{ccRefConcept}{CurveAnalysis_2}\footnote{There is no need
for curves to be algebraic, hence the generic name. Only the number
of events must be finite.}
\ccDefinition
The \ccc{CurveAnalysis_2} concept is meant to provide tools to analyse a single
curve. An analysis is meant to describe the curve's interesting points and how
they are connected. The analysis searches for {\it events}. Events only
occur at a finite number of $x$-coordinates. Each such coordinate defines
a CurveVerticalLine of an event. These coordinates also define open
{\it intervals} on the $x$-axis. CurveVerticalLines at values within one
such interval only differ in the values of the Solution\_2 entries.
Topological information are equal.
\ccRefines{
\ccc{DefaultConstructible, CopyConstructible, Assignable}
}
\ccTypes
\ccNestedType{Solution_1}
{Is a model of \ccc{AlgebraicCurveKernel_2::Solution_1} concept}
\ccNestedType{Solution_2}
{Is a model of \ccc{AlgebraicCurveKernel_2::Solution_2} concept}
%\ccNestedType{Polynomial_2}{
% Is a model of \ccc{AlgebraicCurveKernel_2::Polynomial_2}
% concept.\\
% Especially needed: Canonicalize, GcdUpToConstantFactor,
% IntegralDivUpToConstantFactor,
% MakeSquareFreeUpToConstantFactor, and
% SquareFreeFactorizationUpToConstantFactor
%}
\ccNestedType{Curve_vertical_line}
{Is a model of the \ccc{CurveAnalysis_2::CurveVerticalLine} concept}
\ccCreation
\ccCreationVariable{ca}
\ccConstructor{CurveAnalysis_2(Polynomial_2 p);}
{constructs an analysis for the curve defined by p. The polynomial must
be squarefree.}
\begin{ccAdvanced}
\ccConstructor{template < class InputIterator >
CurveAnalysis_2(Polynomial_2 p, InputIterator begin, InputIterator end);}{
constructs an analysis for the curve defined by p. The polynomial must
be squarefree. The iterator range [begin,end) contains factors of
$\mbox{resultant}(p,p_y,y)$, i.e., define $x$-coordinates,
which allows to simplify the real root isolation within this layer.
The \ccc{value_type} of InputIterator is \ccc{Polynomial_2}.
This constructor has been introduced to enable an upper layer (CK) to use
additional knowledge on the problem.
}
\end{ccAdvanced}
\ccAccessFunctions
\ccMethod{Polynomial_2 get_polynomial_2();}{
returns the defining polynomial of the anyalsis
}
\ccMethod{unsigned int num_vertical_lines_with_event();}{
returns number of vertical lines that encode an event
}
%\ccMethod{void x_to_id(Solution_1 x, bool\& is_event, unsigned int\& i);}{
% For a given $x$, this method computes whether the vertical line at this $x$
% contains an event (\ccc{is_event} == \ccc{true}) and returns the id $i$
% of it. Otherwise, $i$ returns the id of the interval $x$ lies in.
%}
\ccMethod{Curve_vertical_line vertical_line_at_event(int i);}{
returns an instance of \ccc{CurveVerticalLine} at the $i$-th event
}
\ccMethod{Curve_vertical_line vertical_line_of_interval(int i);}{
returns an instance of \ccc{CurveVerticalLine} of the $i$-th interval
between $x$-events.
}
\ccMethod{Curve_vertical_line vertical_line_for_x(Solution_1 x,
CGAL::Sign perturb = CGAL::ZERO);}{
returns vertical\_line\_at\_event(i), if $x$ hits $i$-th event, otherwise
returns vertical\_line\_of\_interval(i), where $i$ is the id of the interval
$x$ lies in. If $pertub$ is CGAL::POSITIVE/CGAL::NEGATIVE, then a slighty
perturbed x is used (adding $\pm\epsilon$).
\ccPrecond{$x$ is finite}
}
\ccMethod{Curve_vertical_line vertical_line_at_exact_x(Solution_1 x);}{
returns an instance of \ccc{CurveVerticalLine} at the given $x$.
\ccPrecond{$x$ is finite}
}
Note that the access methods to vertical lines are not redundant! The ones
using an id-value are efficient for speed-ups (caching, avoids to search some
$x$, just one representative vertical line for an interval). The others
enables a user to compute vertical lines for given $x$, i.e., also to
$y$-coordinates at given $x$.
\ccMethod{int find(Solution_2 s);}{
returns the index of the event at the vertical line defined by
$s$'s $x$-coordinate, or -1 if $s$ is does not lie on the curve.
}
\end{ccRefConcept}

View File

@ -1,227 +0,0 @@
\begin{ccRefConcept}{CurvePairVerticalLine}
\ccDefinition
The \ccc{CurvePairVerticalLine} concept is meant to provide information
about the intersections of a pair of curves with a (fictious) vertical line
(ignoring vertical lines of the curves themselves). Each intersection of a
curve with the vertical line defined by some given $x$ induces an event.
An event can be asked for its coordinates (\ccc{Solution_2}) and the involved
curve(s). Note that the involvment also holds for curve ends approaching the
vertical asymptote. Again CurvePairVerticalLines at $x = \pm\infty$ are
not allowed.
\ccTypes
\ccNestedType{Solution_1}{
Is a model of the \ccc{AlgebraicCurveKernel_2::Solution_1} concept
}
\ccNestedType{Solution_2}{
Is a model of the \ccc{AlgebraicCurveKernel_2::Solution_2} concept
}
\ccCreationVariable{cpvl}
\ccAccessFunctions
\ccMethod{Solution_1 x();}{
returns the $x$-coordinate of the vertical line (always a finite value).
}
\ccMethod{unsigned int num_events();}{
returns number of distinct intersections of a pair of curves with a
(fictious) vertical line ignoring a real vertical line component
of the curves at the given $x$-coordinate.
}
\ccMethod{int get_y_position_of_event(int k, bool c);}{
returns the $y$-position of the $k$-th arc of the $c$-''th''
(0 or 1) curve in the sequence of events. Note that each event
is formed by the first, the second, or both curves.
\ccPrecond{$0 \leq k < \mbox{number of arcs defined for the curve at x()}$}
}
\ccMethod{int get_multiplicity_of_intersection_event(int j);}{
returns the multiplicity of intersection defined at event with position $j$
\ccPrecond{Both curves form event $j$}
\ccPrecond{$0 \leq j < \mbox{num\_events()}$}
}
\ccMethod{std::pair< int, int > curve_arcs_at_event(int j);}{
returns a pair of int indicating whether event $j$ is formed by
which arc numbers of the first and the second curve, or $-1$, if the
corresponding curve is not involved.
\ccPrecond{$0 \leq j < \mbox{num\_events()}$}
}
\ccMethod{Solution_2 get_solution_2(int j);}{
returns an object of type \ccc{Solution_2} for the $j$-the event
\ccPrecond{$0 \leq j < \mbox{num\_events()}$}
}
Note that this interface mainly rewrites $\{f,g,x\}^n$ in a different way -
using ints. Actually the CPVL has to compute this sequence, but for
the interface it is nicer to have it already here to avoid conversion objects
(introducing additional constructor calls, cache-misses, lookup and so on) in
the next layer on top (CK). Obviously, the ints can be computed in a generic
way from a sequence, so that it makes sense to offer a default implementation
providing such conversion. There is no need to document this fact on the
conceptual view.
\ccMethod{bool has_event_of_curve();}{
returns \ccc{true} if curve has vertical line component or
curve $f$ has intersection with $f_y$ at $x$
}
\end{ccRefConcept}
\begin{ccRefConcept}{CurvePairAnalysis_2}
\ccDefinition
The \ccc{CurvePairAnalysis_2} concept is meant to provide tools to analyse
a pair of curves. An analysis is meant to describe the curve pair's
interesting points and how they are connected.
The analysis searches for {\it events}. Events only
occur at a finite number of $x$-coordinate. Each such coordinate is
covered by a CurvePairVerticalLine, originated by the events of a single curve
and also the intersections of two curves.
These coordinates also define open {\it intervals}
on the $x$-axis. CurvePairVerticalLines at values in between one such interval
differ only in the values of the Solution\_2 entries. Topological
information are equal.
\ccRefines{
\ccc{DefaultConstructible, CopyConstructible, Assignable}
}
\ccTypes
\ccNestedType{Solution_1}{
Is a model of the \ccc{AlgebraicCurveKernel_2::Solution_1} concept
}
\ccNestedType{Solution_2}{
Is a model of the \ccc{AlgebraicCurveKernel_2::Solution_2} concept
}
%\ccNestedType{Polynomial_2}{
% Is a model of \ccc{AlgebraicCurveKernel_2::Polynomial_2}
% concept.\\
% Especially needed: Canonicalize, GcdUpToConstantFactor,
% IntegralDivUpToConstantFactor,
% MakeSquareFreeUpToConstantFactor, and
% SquareFreeFactorizationUpToConstantFactor
%}
\ccNestedType{Curve_pair_vertical_line}
{Is a model of the \ccc{CurvePairAnalysis_2::CurvePairVerticalLine} concept}
\ccNestedType{Curve_analysis_2}
{Is a model of the \ccc{CurvePairAnalysis::CurveAnalysis_2} concept}
\ccCreation
\ccCreationVariable{cp}
\ccConstructor{CurvePairAnalysis_2(Curve_analysis_2 p1, Curve_analysis_2 p2);}
{constructs an analysis for the curve-pair defined by analyses given by
p1 and p2. The polynomials defining the analyses must be squarefree and
coprime.
}
\begin{ccAdvanced}
\ccConstructor{template < class InputIterator >
CurvePairAnalysis_2(Curve_analysis_2 p1, Curve_analysis_2 p2,
InputIterator begin, InputIterator end);}{
constructs an analysis for the pair of curves defined by $p1$ and $p2$.
The polynomials definining the analyses must be squarefree and coprime.
The iterator range [begin,end) contains factors of $\mbox{resultant}(p,q,y)$,
i.e., define $x$-coordinates,
which allows to simplify the real root isolation within this layer.
The \ccc{value_type} of InputIterator is \ccc{Polynomial_1}.
This constructor has been introduced to enable an upper layer (CK) to use
additional knowledge on the problem.
}
\end{ccAdvanced}
\ccAccessFunctions
\ccMethod{Curve_analysis_2 get_curve_analysis(bool c);}{
returns curve analyis for $c$-''th'' curve (0 or 1)
}
\ccMethod{unsigned int num_vertical_lines_with_event();}{
returns number of vertical lines that encode an event
}
%\ccMethod{void x_to_id(Solution_1 x, bool\& is_event, unsigned int\& i);}{
% For a given $x$, this method computes whether the vertical line at this $x$
% contains an event (\ccc{is_event} == \ccc{true}) and returns the id $i$
% of it. Otherwise, $i$ returns the id of the interval $x$ lies in.
%}
\ccMethod{int event_of_curve_analysis(unsigned int i, bool c);}{
Given the $i$-th event,
this method returns the id of the event of the corresponding curve
analysis $c$ (0 or 1), or $-1$, if the curve has no event at this coordinate.
}
\ccMethod{Curve_pair_vertical_line vertical_line_at_event(int i);}{
returns an instance of \ccc{CurvePairVerticalLine} at the $i$-th event
}
\ccMethod{Curve_pair_vertical_line vertical_line_of_interval(int i);}{
returns an instance of \ccc{CurvePairVerticalLine} of the $i$-th interval
between $x$-events.
}
\ccMethod{Curve_pair_vertical_line vertical_line_for_x(Solution_1 x,
CGAL::Sign perturb = CGAL::ZERO);}{
returns vertical\_line\_at\_event(i), if $x$ hits $i$-th event, otherwise
returns vertical\_line\_of\_interval(i), where $i$ is the id of the interval
$x$ lies in. If $pertub$ is CGAL::POSITIVE/CGAL::NEGATIVE, then a slighty
perturbed x is used (adding $\pm\epsilon$).
\ccPrecond{$x$ is finite}
}
\ccMethod{Curve_pair_vertical_line vertical_line_at_exact_x(Solution_1 x);}{
returns an instance of \ccc{CurvePairVerticalLine} at the given $x$
\ccPrecond{$x$ is finite}
}
Note that the access methods to vertical lines are not redundant! The ones
using an id-value are efficient for speed-ups (caching, avoids to search some
$x$, just one representative vertical line for an interval). The others
enables a user to compute vertical lines for given $x$, i.e., also to
$y$-coordinates at given $x$.
\ccMethod{Solution_2_const_iterator solve_begin();}{
returns iterator running over all intersection of the two curves
}
\ccMethod{Solution_2_const_iterator solve_end();}{
returns past-end-value for all intersections of the two curves
}
\ccMethod{int find(Solution_2 s);}{
returns the index of the event at the vertical line defined by
$s$'s $x$-coordinate, or -1 if $s$ is does not lie on any curve.
}
%Additionally note that we talk about 4 sequences of $x$-critical lines here.
%
%\begin{itemize}
%\item The sequence of CurveVerticalLines of $p$ where each CVL has been
%converted and merged with $q$ to a CVPL.
%\item The sequence of CurveVerticalLines of $q$ where each CVL has been
%converted and merged with $p$ to a CPVL.
%\item The sequence of CurvePairVerticalLines of the intersections of
%$p$ and $q$
%\item The merged sequence of CurvePairVerticalLines of the former three
%sequences. The method event\_id\_of\_x helps to find indeces in the first
%three sequences starting from an index in this sequence!
%\end{itemize}
\end{ccRefConcept}

View File

@ -1,60 +0,0 @@
\begin{ccRefConcept}{Solution_1}
\ccDefinition
The concept \ccc{Solution_1} is meant to store a finite
coordinate ($x$, or $y$) of a point on curve.
\ccRefines
\ccc{DefaultConstructible, Assignable, LessThanComparable}
\begin{ccAdvanced}
\ccTypes
\ccTypedef{typedef typename Solution_1::Boundary Boundary;}{A NT being able
to represent values between two Solution\_1}
\ccCreationVariable{sol1}
\ccAccessFunctions
Solution\_1 is required to have some functionality. The final question
where to put such methods is undecided. Possibilities are
member functions of AK, or traits like Algebraic\_structure\_traits that
either exists in the AK, or outside of it.
\ccMethod{Boundary between(Solution_1 s);}{
returns a rational between \ccc{sol1} and \ccc{s}
\ccPrecond{sol1 != s}
}
\ccMethod{Boundary lower_bound();}{
Gives the lower bound of the number.
}
\ccMethod{Boundary upper_bound();}{
Gives the upper bound of the number.
}
\ccMethod{void refine();}{
Refines the representation.
}
\ccMethod{void refine(int prec);}{
Refines the representation to the given precision (binary digits
after point). Internally the precision can already be higher.
}
\end{ccAdvanced}
Remark: Note that this concept only deals with the interface to upper
layers. There might be additional requirements for number types to
implement a model of this concept.
\ccHasModels
\ccc{double, NiX::Algebraic_real}
\end{ccRefConcept}

View File

@ -1,59 +0,0 @@
\begin{ccRefConcept}{Solution_2}
\ccDefinition
The concept \ccc{Solution_2} is meant to be a object that represents
a finite point on a curve.
%There are reasons why we introduce \ccc{Solution_2} over
%\ccc{AlgebraicReal_2}:
%\begin{itemize}
%\item \ccc{AlgebraicReal_2} seems to be pair of \ccc{AlgebraicReal_1}, while
%\ccc{Solution_2} has members to access \ccc{Solution_1} for $x$ and $y$.
%With the name we state better to be more generic.
%\item Keep concept minimal, in contrast to \ccc{AlgebraicReal_2} that
%seems to be quite powerful.
%\end{itemize}
\ccCreationVariable{sol2}
\ccAccessFunctions
\ccMethod{Solution_1 x();}{
returns $x$-coordinate.
May throw some exception if algebraic degree becomes to large.
Usual always computed and therefore easy to access.
}
\ccMethod{Solution_1 y();}{
returns $y$-coordinate.
May throw some exception if algebraic degree becomes to large.
Note that it can be costly to compute this value, so accessing it
should be handled with care.
}
\begin{ccAdvanced}
The following methods can be useful.
\ccMethod{std::pair<Boundary,Boundary> s1.approximate_x(int prec);}{
Refines the representation of $x$ to the given precision
(binary digits after point).
Internally the precision can already be higher. Note that it can just
refer to x().approximate(), but it can be more efficient or just possible
to compute it without constructing the exact value.
}
\ccMethod{std::pair<Boundary,Boundary> s1.approximate_y(int prec);}{
Refines the representation of $y$ to the given precision
(binary digits after point).
Internally the precision can already be higher. Note that it can just
refer to y().approximate(), but it can be more efficient or just possible
to compute it without constructing the exact value.
}
\end{ccAdvanced}
\end{ccRefConcept}

View File

@ -1,12 +0,0 @@
\ccRefChapter{Curve- and CurvePairAnalysis}
Initial remark: The design is not symmetric in the coordinates, due to the fact
that people also only talk about ``vertical decomposition'' and not
``horizontal decompositions''. A {\it horizontal} version can easily
derived from the concept, if needed.
\input{Curve_and_curve_pair_analysis_2_ref/Solution_1}
\input{Curve_and_curve_pair_analysis_2_ref/Solution_2}
\input{Curve_and_curve_pair_analysis_2_ref/CurveAnalysis_2}
\input{Curve_and_curve_pair_analysis_2_ref/CurvePairAnalysis_2}
\input{Curve_and_curve_pair_analysis_2_ref/AlgebraicCurveKernel_2}