T
- The partition tree typepublic class SegmentPartitionTree<T extends PartitionTree<SegmentPartitionTree.LineSegment,T>> extends RenderableObject
Modifier and Type | Class and Description |
---|---|
static class |
SegmentPartitionTree.LineSegment
Represents a line segment between two end points.
|
private static interface |
SegmentPartitionTree.PartitionTreeVisitor<T extends PartitionTree<SegmentPartitionTree.LineSegment,T>>
Interface for a function that nodes visited in a partition tree search are reported to.
|
private class |
SegmentPartitionTree.SearchAnimation
Implementation of a search animation with a segment in the tree.
|
static class |
SegmentPartitionTree.SegmentPartitionTreeConstructor<T extends PartitionTree<SegmentPartitionTree.LineSegment,T>>
A class that can create new instances of a segment partition tree
based on a specific partition tree type.
|
private static interface |
SegmentPartitionTree.VisitingFunction<T extends PartitionTree<SegmentPartitionTree.LineSegment,T>>
Interface for a function that can be used to search a partition tree.
|
Modifier and Type | Field and Description |
---|---|
private boolean |
animated
Whether this segment partition tree is animated.
|
private T |
partitions
The partition tree used for store points for this segment partition tree.
|
private SegmentPartitionTree.VisitingFunction<T> |
partitionVisitor
A search function that can be used to traverse the used partition tree.
|
private java.util.List<SegmentPartitionTree.LineSegment> |
segments
The segments stored in this segment partition tree.
|
static SegmentPartitionTree.SegmentPartitionTreeConstructor<ConjugationTree<SegmentPartitionTree.LineSegment>> |
TYPE_CONJUGATION_TREE
Constructor for conjugation tree based segment partition trees.
|
static SegmentPartitionTree.SegmentPartitionTreeConstructor<KDTree<SegmentPartitionTree.LineSegment>> |
TYPE_KD_TREE
Constructor for kd-tree based segment partition trees.
|
Modifier | Constructor and Description |
---|---|
private |
SegmentPartitionTree(T partitions,
SegmentPartitionTree.VisitingFunction<T> partitionVisitor)
Constructs a new segment partition tree with the given
partitioning tree data structure.
|
Modifier and Type | Method and Description |
---|---|
void |
addSegment(java.awt.geom.Line2D line)
Adds a new line segment to this segment partition tree.
|
void |
addSegment(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2)
Adds a new line segment to this segment partition tree.
|
private void |
addSegmentInternal(SegmentPartitionTree.LineSegment line)
Adds a new line segment to this segment partition tree.
|
boolean |
intersects(java.awt.geom.Line2D line)
Checks if the line segment defined by the given points
intersects any of the segments stored in this tree.
|
boolean |
intersects(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2)
Checks if the line segment defined by the given points
intersects any of the segments stored in this tree.
|
private static boolean |
intersectsAny(java.util.List<SegmentPartitionTree.LineSegment> lines,
SegmentPartitionTree.LineSegment line)
Checks if the given line segment intersects any of the line segments
in the given set of line segments.
|
private boolean |
intersectsInternal(SegmentPartitionTree.LineSegment line)
Checks if the line segment defined by the given points
intersects any of the segments stored in this tree.
|
boolean |
isAnimated()
Checks if this segment partition tree is animated.
|
void |
render(java.awt.Graphics2D g)
Renders this object.
|
void |
setAnimated(boolean animated)
Sets whether this segment partition tree is animated.
|
Animation |
showAnimation(java.awt.geom.Point2D a,
java.awt.geom.Point2D b)
Animates a search for intersections with the given line segment.
|
java.util.stream.Stream<T> |
streamCells()
Returns a stream over all the nodes of the underlying partition tree.
|
private static boolean |
visitConjugationTree(ConjugationTree<SegmentPartitionTree.LineSegment> tree,
SegmentPartitionTree.LineSegment line,
int maxDepth,
boolean ignoreInnerTerminals,
SegmentPartitionTree.PartitionTreeVisitor<ConjugationTree<SegmentPartitionTree.LineSegment>> visitor)
Visitor function for conjugation tree traversal.
|
private static boolean |
visitKDTree(KDTree<SegmentPartitionTree.LineSegment> tree,
SegmentPartitionTree.LineSegment line,
int maxDepth,
boolean ignoreInnerTerminals,
SegmentPartitionTree.PartitionTreeVisitor<KDTree<SegmentPartitionTree.LineSegment>> visitor)
Visitor function for kd-tree traversal.
|
getAnimation, hasAnimation, renderOrAnimate, runAnimation, setAnimation
public static final SegmentPartitionTree.SegmentPartitionTreeConstructor<KDTree<SegmentPartitionTree.LineSegment>> TYPE_KD_TREE
KDTree
public static final SegmentPartitionTree.SegmentPartitionTreeConstructor<ConjugationTree<SegmentPartitionTree.LineSegment>> TYPE_CONJUGATION_TREE
ConjugationTree
private final T extends PartitionTree<SegmentPartitionTree.LineSegment,T> partitions
private final SegmentPartitionTree.VisitingFunction<T extends PartitionTree<SegmentPartitionTree.LineSegment,T>> partitionVisitor
private final java.util.List<SegmentPartitionTree.LineSegment> segments
private boolean animated
private SegmentPartitionTree(T partitions, SegmentPartitionTree.VisitingFunction<T> partitionVisitor)
partitions
- The partitioning data structure.partitionVisitor
- Function that can be used to visit
cells in the partition tree that either store or are
along the search path for a certain query line.TYPE_CONJUGATION_TREE
,
TYPE_KD_TREE
public boolean isAnimated()
public void setAnimated(boolean animated)
animated
- True if show animations for this tree.public void addSegment(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2)
p1
- The first point of the line segment to add.p2
- The second point of the line segment to add.public void addSegment(java.awt.geom.Line2D line)
line
- The line segment to add.private void addSegmentInternal(SegmentPartitionTree.LineSegment line)
line
- The line segment to add.public boolean intersects(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2)
p1
- The first point of the line segment to check.p2
- The second point of the line segment to check.public boolean intersects(java.awt.geom.Line2D line)
line
- The line segment to check.private boolean intersectsInternal(SegmentPartitionTree.LineSegment line)
line
- The line segment to check.public java.util.stream.Stream<T> streamCells()
public Animation showAnimation(java.awt.geom.Point2D a, java.awt.geom.Point2D b)
a
- The first point of the line segment.b
- The second point of the line segment.public void render(java.awt.Graphics2D g)
RenderableObject
render
in class RenderableObject
g
- The graphics context to use.private static final boolean intersectsAny(java.util.List<SegmentPartitionTree.LineSegment> lines, SegmentPartitionTree.LineSegment line)
lines
- The set of lines to check for intersection with.line
- The line to check for whether it intersects any of
the lines in the given set of lines.private static final boolean visitKDTree(KDTree<SegmentPartitionTree.LineSegment> tree, SegmentPartitionTree.LineSegment line, int maxDepth, boolean ignoreInnerTerminals, SegmentPartitionTree.PartitionTreeVisitor<KDTree<SegmentPartitionTree.LineSegment>> visitor)
tree
- The kd-tree to traverse.line
- The query line.maxDepth
- The maximum search depth.ignoreInnerTerminals
- Whether to ignore inner terminals or not.visitor
- The visitor to report nodes to.SegmentPartitionTree.VisitingFunction
,
SegmentPartitionTree.PartitionTreeVisitor
private static final boolean visitConjugationTree(ConjugationTree<SegmentPartitionTree.LineSegment> tree, SegmentPartitionTree.LineSegment line, int maxDepth, boolean ignoreInnerTerminals, SegmentPartitionTree.PartitionTreeVisitor<ConjugationTree<SegmentPartitionTree.LineSegment>> visitor)
tree
- The conjugation tree to traverse.line
- The query line.maxDepth
- The maximum search depth.ignoreInnerTerminals
- Whether to ignore inner terminals or not.visitor
- The visitor to report nodes to.SegmentPartitionTree.VisitingFunction
,
SegmentPartitionTree.PartitionTreeVisitor