This is a brief documentation of the moving cycle interpolator.
This interpolator is a part of the implementation of the algorithms
described in the article "Creating Representations for
Continuously Moving Regions from Observations" by Erlend
Tøssebro and Ralf Hartmut Güting. The program can
interpolate a single cycle between two snapshots.

## Basic data structures used

This program takes as input two cycles and produces a graph
representation of the moving cycle. The cycles are stored as lists of
points. Two neighbouring points in such a list constitute a line.
Because some of the algorithms used require an angle to be stored for
each line, the moving points are stored in LineWA
objects instead of regular point objects.

The graph representation is stored as a list of points with
neighbour lists. Each such point has stored a position in space and
time. From this structure, the application version of the program may
create a VRML representation of the moving cycle.

The convex hull tree which is used by the interpolation algorithm
is stored as a tree built up of ConvexHullTreeNode
objects. This class represents the datatype *chtnodewo* from the
article.

The overlap graph edges themselves are stored in OverlapGraphEdge
objects. They correspond to the *overlapedge* type from the
article.

## Implementation of algorithms

The *rotating_plane* algorithm is implemented by the
*createConvexTriangleRep* function in the TriangleRep class.

The *build_convex_hull_tree* algorithm is implemented by the
constructor of the convexHullTreeNode class. One only needs to create
the root of the convex hull tree explicitly, all the other modes are
automatically created when the root is created.

The *compute_overlap_graph* algorithm is implemented by the
*computeOverlapGraph* function in the TriRepUtil class. This
function uses the *computeOverlapGraphIter* function to do the
actual computations.

The *join_concavities* algorithm is implemented by the
*joinChildren* function in the ConvexHullTreeNode class. Because
this function is called in the parent class, only the list of
children needs to be passed as a parameter to the function.

The *create_moving_cycle* algorithm is implemented by the
constructor of the the TriangleRep class.

The *trapezium_rep_builder* algorithm is implemented by the
private function *createGeneralTriangleRep* in the TriangleRep
class.

## Documentation of the classes

A documentation of the classes generated by javaDoc can be found
here.

Letzte Änderung: 2016-11-22 ()