mirror of https://github.com/CGAL/cgal
just testing
This commit is contained in:
parent
e7306f97d0
commit
eaecab2c5f
|
|
@ -625,7 +625,9 @@ Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Delaunay_triangulati
|
|||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Delaunay_triangulation_visitor_base_3.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Enclosing_box_2.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Enclosing_box_3.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Erase_event.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/EventLogVisitor.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Insert_event.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Qt_moving_points_2.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Qt_triangulation_2.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_data_structures_ref/Qt_widget_2.tex -text
|
||||
|
|
@ -666,7 +668,6 @@ Kinetic_data_structures/doc_tex/Kinetic_framework_ref/EventLogVisitor.tex -text
|
|||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/EventQueue.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/Function.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/FunctionKernel.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/Insert_event.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/InstantaneousKernel.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/Key.tex -text
|
||||
Kinetic_data_structures/doc_tex/Kinetic_framework_ref/KineticKernel.tex -text
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Kinetic Data Structures and Sweep Algorithms\label{sec:kds_intro}}
|
||||
\section{An Overview of Kinetic Data Structures and Sweep Algorithms\label{sec:kds_intro}}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
\subsection{Kinetic Data Structures}
|
||||
%\subsection{Kinetic Data Structures}
|
||||
Kinetic data structures were first introduced in by Basch et.\ al.\ in
|
||||
1997~\cite{cgal:bgh-dsmd-97}. The idea stems from the observation that
|
||||
most, if not all, computational geometry structures are built using
|
||||
|
|
@ -79,7 +79,7 @@ possible. See Section~\ref{sec:kds_instantaneous_kernel} for an example of
|
|||
where this equivalence is exploited.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Terms Used\label{sec:kds_terms}}
|
||||
\subsection{Terms Used\label{sec:kds_terms}}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
|
|
|||
|
|
@ -1,30 +1,20 @@
|
|||
\subsection{Overview\label{sec:kds_overview}}
|
||||
\section{An Overview of the Kinetic Framework\label{sec:kds_overview}}
|
||||
|
||||
The kinetic framework is structured around five main concepts. See
|
||||
Figure~\ref{fig:kds_uml_usage} for a schematic of how a kinetic data structure
|
||||
interacts with the various parts. The main concepts are
|
||||
The provided kinetic data structures are implemented on top of the
|
||||
Kinetic framework presented in Chapter~\ref{chapter-kinetic}. It is
|
||||
not necessary to know the details of the framework, but some
|
||||
familiarity is useful. Here we presented a quick overview of the
|
||||
framework.
|
||||
|
||||
The framework is structured around five main concepts. See
|
||||
Figure~\ref{fig:kds_uml_usage} for a schematic of how a kinetic data
|
||||
structure interacts with the various parts. The main concepts are
|
||||
|
||||
% MK:: why is there a + before less_x_1_object() ?
|
||||
% Another thing is that I am not really sure that we really want this
|
||||
% figure to appear here. I prefer to have it at the end as it was before.
|
||||
% I leave it up to you to decide this.
|
||||
\begin{figure}
|
||||
\begin{ccTexOnly}
|
||||
\begin{center}
|
||||
\includegraphics[scale=.8,viewport=0 18 470 250, clip]{Kinetic_data_structures/sort_usage_pct}
|
||||
\end{center}
|
||||
\end{ccTexOnly}
|
||||
\begin{ccHtmlOnly}
|
||||
<img src="./sort_usage_pct.gif" align=center alt="Sort Usage"><br>
|
||||
\end{ccHtmlOnly}
|
||||
\caption{\label{fig:kds_uml_usage} The figure shows the interaction between
|
||||
the \ccc{Kinetic::Sort<Traits, Visitor>} kinetic data structure and
|
||||
the various pieces of our package. Other, more complicated, kinetic
|
||||
data structures will also use the \ccc{Kinetic::InstantaneousKernel} in order
|
||||
to insert/remove geometric primitives and audit
|
||||
themselves. \ccc{Kinetic::Sort<Traits, Visitor>} uses the sorting
|
||||
functionality in STL instead.}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
|
|
@ -55,22 +45,42 @@ interacts with the various parts. The main concepts are
|
|||
\ref{sec:kds_algebraic_kernel}.
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}
|
||||
\begin{ccTexOnly}
|
||||
\begin{center}
|
||||
\includegraphics[scale=.8,viewport=0 18 470 250, clip]{Kinetic_data_structures/sort_usage_pct}
|
||||
\end{center}
|
||||
\end{ccTexOnly}
|
||||
\begin{ccHtmlOnly}
|
||||
<img src="./sort_usage_pct.gif" align=center alt="Sort Usage"><br>
|
||||
\end{ccHtmlOnly}
|
||||
\caption{\label{fig:kds_uml_usage} The figure shows the interaction between
|
||||
the \ccc{Kinetic::Sort<Traits, Visitor>} kinetic data structure and
|
||||
the various pieces of our package. Other, more complicated, kinetic
|
||||
data structures will also use the \ccc{Kinetic::InstantaneousKernel} in order
|
||||
to insert/remove geometric primitives and audit
|
||||
themselves. \ccc{Kinetic::Sort<Traits, Visitor>} uses the sorting
|
||||
functionality in STL instead.}
|
||||
\end{figure}
|
||||
|
||||
For simplicity, we added an additional concept, that of
|
||||
\ccc{Kinetic::SimulationTraits}, which wraps together a particular set of
|
||||
choices for the above concepts and is responsible for creating
|
||||
instances of each of the models. The addition of this concept reduces
|
||||
the choices the user has to make to picking the dimension of the
|
||||
ambient space and choosing between exact and inexact computations. The
|
||||
model of \ccc{Kinetic::SimulationTraits} creates an instance each of the
|
||||
instances of each of the models. As a user of existing kinetic data
|
||||
structures, this is the only framework object you will have to
|
||||
create. The addition of this concept reduces the choices the user has
|
||||
to make to picking the dimension of the ambient space and choosing
|
||||
between exact and inexact computations. The model of
|
||||
\ccc{Kinetic::SimulationTraits} creates an instance each of the
|
||||
\ccc{Kinetic::Simulator} and \ccc{Kinetic::ActiveObjectsTable}. Handles for
|
||||
these instances as well as instances of the \ccc{Kinetic::Kernel}
|
||||
and \ccc{Kinetic::InstantaneousKernel} can be requested from the simulation
|
||||
traits class. Both the \ccc{Kinetic::Kernel} and the
|
||||
\ccc{Kinetic::Simulator} use the \ccc{Kinetic::FunctionKernel}, the former to find
|
||||
certificate failure times and the later to operate on them. For
|
||||
technical reasons, each supplied model of \ccc{Kinetic::SimulationTraits} also
|
||||
picks out a particular type of kinetic primitive which will be used by
|
||||
the kinetic data structures.
|
||||
\ccc{Kinetic::Simulator} use the \ccc{Kinetic::FunctionKernel},
|
||||
the former to find certificate failure times and the later to operate
|
||||
on them. For technical reasons, each supplied model of
|
||||
\ccc{Kinetic::SimulationTraits} also picks out a particular type of
|
||||
kinetic primitive which will be used by the kinetic data structures.
|
||||
|
||||
|
||||
% Both the \object{KineticKernel}
|
||||
|
|
@ -78,11 +88,5 @@ the kinetic data structures.
|
|||
%constructing certificate functions, as well as getting their failure
|
||||
%times.
|
||||
|
||||
Surrounding these central set of concepts, there are a large number of
|
||||
smaller concepts, the models of which act either as glue between
|
||||
objects or as helper classes. The key smaller concepts will be described along
|
||||
with the appropriate central concepts in the corresponding subsections
|
||||
of Section \ref{sec:kds_architecture}.
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
\section{Provided Kinetic Data Structures\label{sec:kds_provided_kdss}}
|
||||
\section{Using Kinetic Data Structures\label{sec:kds_provided_kdss}}
|
||||
|
||||
|
||||
Along with the framework, we provide several already implemented kinetic data structures. They currently are
|
||||
There are five provided kinetic data structures. They are
|
||||
\begin{description}
|
||||
\item[\ccc{Kinetic::Sort<Traits, Visitor>}] maintain a list of points
|
||||
sorted by x-coordinate.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
\subsection{Using a provided kinetic data structure \label{sec:kds_sort_example}}
|
||||
\subsection{A Simple Example \label{sec:kds_sort_example}}
|
||||
|
||||
|
||||
Using a kinetic data structure can be as simple as the following:
|
||||
|
|
@ -44,6 +44,8 @@ Section~\ref{sec:kds_sweepline_example}.
|
|||
%\subsection{Constructing Primitives}
|
||||
%\label{sec:kds_constructing_primitives}
|
||||
|
||||
\subsection{Creating Kinetic Primitives}
|
||||
|
||||
One key part of the framework not shown is how to create kinetic
|
||||
primitives (rather than just reading them in from a file). There are
|
||||
two ways to construction the necessary motion functions (which are
|
||||
|
|
|
|||
|
|
@ -1,20 +1,21 @@
|
|||
|
||||
|
||||
\subsection{A Sweepline Algorithm\label{sec:kds_sweepline_example}}
|
||||
\subsection{Extending Kinetic Data Structures\label{sec:kds_sweepline_example}}
|
||||
|
||||
|
||||
Here we present a simple example that uses the kinetic data structures
|
||||
framework to implement a sweepline to compute the arrangement of
|
||||
x-monotone algebraic curves in the plane. The example builds on top of
|
||||
the \ccc{Kinetic::Sort<Traits, Visitor>} kinetic data structure, using a visitor
|
||||
to keep track of changes to the sorted order and newly inserted
|
||||
points. To see an example using this kinetic data structure read the
|
||||
example at examples/Kinetic\_data\_structures/sweepline.C.
|
||||
Here we present a simple example that uses the
|
||||
\ccc{Kinetic::Sort<Traits, Visitor>} kinetic data structure to compute
|
||||
an arrangement of algebraic curves. It wraps the sorting data
|
||||
structure and uses a visitor to monitor changes and map them to
|
||||
corresponding features in the arrangement. To see an example using
|
||||
this kinetic data structure read the example at
|
||||
examples/Kinetic\_data\_structures/sweepline.C.
|
||||
|
||||
First we define the visitor class. An object of this type is passed to
|
||||
the \ccc{Kinetic::Sort} data structure and turns events into calls on
|
||||
the arrangement structure. This class has to be handled externally
|
||||
since the arrangement will inherit from the sorting structure.
|
||||
the \ccc{Kinetic::Sort<Traits, Visitor>} data structure and turns
|
||||
events into calls on the arrangement structure. This class has to be
|
||||
defined externally since the arrangement will inherit from the sorting
|
||||
structure.
|
||||
|
||||
\begin{ccExampleCode}
|
||||
template <class Arrangement>
|
||||
|
|
@ -38,7 +39,7 @@ struct Arrangement_visitor: public Kinetic::Sort_visitor_base
|
|||
|
||||
\end{ccExampleCode}
|
||||
|
||||
Now we define the actual kinetic data structure.
|
||||
Now we define the actual arrangement data structure.
|
||||
|
||||
\begin{ccExampleCode}
|
||||
|
||||
|
|
@ -111,6 +112,9 @@ public:
|
|||
};
|
||||
\end{ccExampleCode}
|
||||
|
||||
Finally, we have to set everything up. To do this we use some special
|
||||
event classes: \ccc{Kinetic::Insert_event<>}
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
%%% TeX-master: t
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
% +------------------------------------------------------------------------+
|
||||
% | Reference manual page: Moving_object_inserter.tex
|
||||
% +------------------------------------------------------------------------+
|
||||
% | 20.03.2005 Author
|
||||
% | Package: Kinetic_data_structures
|
||||
% |
|
||||
\RCSdef{\RCSMovingobjectinserterRev}{$Id: Insert_event.tex 29476 2006-03-14 01:51:03Z drussel $}
|
||||
\RCSdefDate{\RCSMovingobjectinserterDate}{$Date: 2006-03-14 02:51:03 +0100 (Tue, 14 Mar 2006) $}
|
||||
% |
|
||||
%%RefPage: end of header, begin of main body
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
||||
\begin{ccRefClass}{Kinetic::Insert_event<ActiveObjectsTable>} %% add template arg's if necessary
|
||||
|
||||
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
|
||||
%% \ccHtmlIndexC[class]{} %% add further index entries
|
||||
|
||||
\ccDefinition
|
||||
|
||||
This event inserts a point into the \ccc{ActiveObjectsTable} when it
|
||||
is processed.
|
||||
|
||||
\ccInclude{CGAL/Kinetic/Insert_event.h}
|
||||
|
||||
\ccIsModel
|
||||
\ccc{Kinetic::Simulator::Event}
|
||||
|
||||
\ccCreation
|
||||
\ccCreationVariable{i} %% choose variable name
|
||||
|
||||
\ccConstructor{Insert_event(ActiveObjectsTable::Data o,
|
||||
ActiveObjectsTable::Handle t);}{Insert the object o, into the table
|
||||
t when processed.}
|
||||
|
||||
|
||||
\ccSeeAlso
|
||||
|
||||
\ccc{Kinetic::ActiveObjectsTable},
|
||||
\ccc{Kinetic::Active_objects_vector<MovingObject>}.
|
||||
|
||||
\ccExample
|
||||
|
||||
\begin{ccExampleCode}
|
||||
typedef CGAL::Kinetic::Exact_simulation_traits_2 Simulation_traits;
|
||||
typedef Simulation_traits::Kinetic_kernel::Point_2 Moving_point_2;
|
||||
typedef CGAL::Kinetic::Insert_event<Simulation_traits::Active_points_2_table> Insert_event;
|
||||
typedef CGAL::Kinetic::Delaunay_triangulation_2<Simulation_traits> KDel;
|
||||
|
||||
Simulation_traits tr;
|
||||
|
||||
KDel kdel(tr);
|
||||
|
||||
Moving_point_2 mp(Moving_point_2::NT(0),
|
||||
Moving_point_2::NT(0));
|
||||
tr.simulator_handle()->new_event(Simulation_traits::Simulator::Time(3),
|
||||
Insert_event(mp,
|
||||
tr.active_points_2_table_handle()));
|
||||
|
||||
\end{ccExampleCode}
|
||||
|
||||
|
||||
|
||||
|
||||
\end{ccRefClass}
|
||||
|
||||
% +------------------------------------------------------------------------+
|
||||
%%RefPage: end of main body, begin of footer
|
||||
% EOF
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
\begin{ccPkgDescription}{Kinetic Data Structures}
|
||||
\ccPkgSummary{
|
||||
|
||||
Kinetic data structures allow combinatorial structures to be
|
||||
Kinetic data structures allow combinatorial geometric structures to be
|
||||
maintained as the primitives move. The package provides a framework to
|
||||
ease implementing and debugging kinetic data structures. The package
|
||||
supports exact or inexact operations on primitives which move along
|
||||
|
|
|
|||
Loading…
Reference in New Issue