mirror of https://github.com/CGAL/cgal
removed old doc
This commit is contained in:
parent
24d46b386d
commit
a87faa588b
|
|
@ -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}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
Loading…
Reference in New Issue