Class RegionBSPTree2S
- java.lang.Object
-
- org.apache.commons.geometry.core.partitioning.bsp.AbstractBSPTree<P,N>
-
- org.apache.commons.geometry.core.partitioning.bsp.AbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>
-
- org.apache.commons.geometry.spherical.twod.RegionBSPTree2S
-
- All Implemented Interfaces:
BoundarySource<GreatArc>,BSPSubtree<Point2S,RegionBSPTree2S.RegionNode2S>,BSPTree<Point2S,RegionBSPTree2S.RegionNode2S>,HyperplaneBoundedRegion<Point2S>,Splittable<Point2S,HyperplaneBoundedRegion<Point2S>>,Region<Point2S>,Sized,BoundarySource2S
public class RegionBSPTree2S extends AbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S> implements BoundarySource2S
BSP tree representing regions in 2D spherical space.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classRegionBSPTree2S.BoundaryProjector2SClass used to project points onto the region boundary.static classRegionBSPTree2S.RegionNode2SBSP tree node for two dimensional spherical space.-
Nested classes/interfaces inherited from class org.apache.commons.geometry.core.partitioning.bsp.AbstractRegionBSPTree
AbstractRegionBSPTree.AbstractRegionNode<P extends Point<P>,N extends AbstractRegionBSPTree.AbstractRegionNode<P,N>>, AbstractRegionBSPTree.BoundaryProjector<P extends Point<P>,N extends AbstractRegionBSPTree.AbstractRegionNode<P,N>>, AbstractRegionBSPTree.RegionSizeProperties<P extends Point<P>>
-
Nested classes/interfaces inherited from class org.apache.commons.geometry.core.partitioning.bsp.AbstractBSPTree
AbstractBSPTree.AbstractNode<P extends Point<P>,N extends AbstractBSPTree.AbstractNode<P,N>>, AbstractBSPTree.SubtreeInitializer<N extends AbstractBSPTree.AbstractNode<?,?>>
-
Nested classes/interfaces inherited from interface org.apache.commons.geometry.core.partitioning.bsp.BSPTree
BSPTree.FindNodeCutRule, BSPTree.Node<P extends Point<P>,N extends BSPTree.Node<P,N>>
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<GreatArcPath>boundaryPathsList of great arc path comprising the region boundary.private static doubleFULL_SIZEConstant containing the area of the full spherical space.
-
Constructor Summary
Constructors Constructor Description RegionBSPTree2S()Create a new, empty instance.RegionBSPTree2S(boolean full)Create a new region.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Iterable<GreatArc>boundaries()Return anIterablefor iterating over the boundaries of the region.java.util.stream.Stream<GreatArc>boundaryStream()Return a stream containing the boundaries for this instance.private java.util.List<GreatArcPath>computeBoundaryPaths()Compute the great arc paths comprising the region boundary.protected AbstractRegionBSPTree.RegionSizeProperties<Point2S>computeRegionSizeProperties()Compute the size-related properties of the region.RegionBSPTree2Scopy()Return a deep copy of this instance.protected RegionBSPTree2S.RegionNode2ScreateNode()Create a new node for this tree.static RegionBSPTree2Sempty()Return a new, empty BSP tree.static RegionBSPTree2Sfrom(java.lang.Iterable<GreatArc> boundaries)Construct a new tree from the given boundaries.static RegionBSPTree2Sfrom(java.lang.Iterable<GreatArc> boundaries, boolean full)Construct a new tree from the given boundaries.static RegionBSPTree2Sfull()Return a new, full BSP tree.java.util.List<GreatArc>getBoundaries()Return a list containing the boundaries of the region.java.util.List<GreatArcPath>getBoundaryPaths()Get the boundary of the region as a list of connected great arc paths.protected voidinvalidate()Invalidate any previously computed properties that rely on the internal structure of the tree.Point2Sproject(Point2S pt)Project a point onto the boundary of the region.Split<RegionBSPTree2S>split(Hyperplane<Point2S> splitter)Split this instance with the given hyperplane.java.util.List<ConvexArea2S>toConvex()Return a list ofConvexArea2Ss representing the same region as this instance.private voidtoConvexRecursive(RegionBSPTree2S.RegionNode2S node, ConvexArea2S nodeArea, java.util.List<? super ConvexArea2S> result)Recursive method to compute the convex areas of all inside leaf nodes in the subtree rooted at the given node.RegionBSPTree2StoTree()Return the current instance.-
Methods inherited from class org.apache.commons.geometry.core.partitioning.bsp.AbstractRegionBSPTree
classify, complement, complement, condense, copyNodeProperties, createBoundaryIterable, createBoundaryList, difference, difference, getBoundarySize, getCentroid, getRegionSizeProperties, getSize, getSubtreeInitializer, insert, insert, insert, insert, insert, insert, insert, insert, intersection, intersection, isEmpty, isFull, setEmpty, setFull, split, union, union, xor, xor
-
Methods inherited from class org.apache.commons.geometry.core.partitioning.bsp.AbstractBSPTree
accept, accept, copy, copyNode, copySubtree, count, cutNode, extract, extractParentPath, findNode, findNode, getRoot, getVersion, height, importSubtree, insert, nodes, removeNodeCut, setNodeCut, setRoot, splitIntoTrees, splitSubtree, swapsInsideOutside, toString, transform, treeString, treeString, trimToNode
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.commons.geometry.spherical.twod.BoundarySource2S
toList
-
Methods inherited from interface org.apache.commons.geometry.core.Sized
isFinite, isInfinite
-
-
-
-
Field Detail
-
FULL_SIZE
private static final double FULL_SIZE
Constant containing the area of the full spherical space.- See Also:
- Constant Field Values
-
boundaryPaths
private java.util.List<GreatArcPath> boundaryPaths
List of great arc path comprising the region boundary.
-
-
Constructor Detail
-
RegionBSPTree2S
public RegionBSPTree2S()
Create a new, empty instance.
-
RegionBSPTree2S
public RegionBSPTree2S(boolean full)
Create a new region. Iffullis true, then the region will represent the entire 2-sphere. Otherwise, it will be empty.- Parameters:
full- whether or not the region should contain the entire 2-sphere or be empty
-
-
Method Detail
-
copy
public RegionBSPTree2S copy()
Return a deep copy of this instance.- Returns:
- a deep copy of this instance.
- See Also:
AbstractBSPTree.copy(org.apache.commons.geometry.core.partitioning.bsp.BSPTree)
-
boundaries
public java.lang.Iterable<GreatArc> boundaries()
Return anIterablefor iterating over the boundaries of the region. Each boundary is oriented such that its plus side points to the outside of the region. The exact ordering of the boundaries is determined by the internal structure of the tree.- Overrides:
boundariesin classAbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>- Returns:
- an
Iterablefor iterating over the boundaries of the region - See Also:
AbstractRegionBSPTree.getBoundaries()
-
boundaryStream
public java.util.stream.Stream<GreatArc> boundaryStream()
Return a stream containing the boundaries for this instance.- Specified by:
boundaryStreamin interfaceBoundarySource<GreatArc>- Returns:
- a stream containing the boundaries for this instance
-
getBoundaries
public java.util.List<GreatArc> getBoundaries()
Return a list containing the boundaries of the region. Each boundary is oriented such that its plus side points to the outside of the region. The exact ordering of the boundaries is determined by the internal structure of the tree.- Overrides:
getBoundariesin classAbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>- Returns:
- a list of the boundaries of the region
-
getBoundaryPaths
public java.util.List<GreatArcPath> getBoundaryPaths()
Get the boundary of the region as a list of connected great arc paths. The arcs are oriented such that their minus (left) side lies on the interior of the region.- Returns:
- great arc paths representing the region boundary
-
toConvex
public java.util.List<ConvexArea2S> toConvex()
Return a list ofConvexArea2Ss representing the same region as this instance. One convex area is returned for each interior leaf node in the tree.- Returns:
- a list of convex areas representing the same region as this instance
-
toConvexRecursive
private void toConvexRecursive(RegionBSPTree2S.RegionNode2S node, ConvexArea2S nodeArea, java.util.List<? super ConvexArea2S> result)
Recursive method to compute the convex areas of all inside leaf nodes in the subtree rooted at the given node. The computed convex areas are added to the given list.- Parameters:
node- root of the subtree to compute the convex areas fornodeArea- the convex area for the current node; this will be split by the node's cut hyperplane to form the convex areas for any child nodesresult- list containing the results of the computation
-
split
public Split<RegionBSPTree2S> split(Hyperplane<Point2S> splitter)
Split this instance with the given hyperplane.- Specified by:
splitin interfaceSplittable<Point2S,HyperplaneBoundedRegion<Point2S>>- Parameters:
splitter- the hyperplane to split this object with.- Returns:
- result of the split operation
-
project
public Point2S project(Point2S pt)
Project a point onto the boundary of the region. Null is returned if the region contains no boundaries (ie, is eitherfullorempty).- Specified by:
projectin interfaceRegion<Point2S>- Overrides:
projectin classAbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>- Parameters:
pt- pt to project- Returns:
- projection of the point on the boundary of the region or null if the region does not contain any boundaries
-
toTree
public RegionBSPTree2S toTree()
Return the current instance.- Specified by:
toTreein interfaceBoundarySource2S- Returns:
- a BSP tree constructed from the boundaries in this instance
-
computeRegionSizeProperties
protected AbstractRegionBSPTree.RegionSizeProperties<Point2S> computeRegionSizeProperties()
Compute the size-related properties of the region.- Specified by:
computeRegionSizePropertiesin classAbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>- Returns:
- object containing size properties for the region
-
createNode
protected RegionBSPTree2S.RegionNode2S createNode()
Create a new node for this tree.- Specified by:
createNodein classAbstractBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>- Returns:
- a new node for this tree
-
invalidate
protected void invalidate()
Invalidate any previously computed properties that rely on the internal structure of the tree. This method must be called any time the tree's internal structure changes in order to force cacheable tree and node properties to be recomputed the next time they are requested.This method increments the tree's
AbstractBSPTree.versionproperty.- Overrides:
invalidatein classAbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>- See Also:
AbstractBSPTree.getVersion()
-
computeBoundaryPaths
private java.util.List<GreatArcPath> computeBoundaryPaths()
Compute the great arc paths comprising the region boundary.- Returns:
- the great arc paths comprising the region boundary
-
empty
public static RegionBSPTree2S empty()
Return a new, empty BSP tree.- Returns:
- a new, empty BSP tree.
-
full
public static RegionBSPTree2S full()
Return a new, full BSP tree. The returned tree represents the full space.- Returns:
- a new, full BSP tree.
-
from
public static RegionBSPTree2S from(java.lang.Iterable<GreatArc> boundaries)
Construct a new tree from the given boundaries. If no boundaries are present, the returned tree is empty.- Parameters:
boundaries- boundaries to construct the tree from- Returns:
- a new tree instance constructed from the given boundaries
- See Also:
from(Iterable, boolean)
-
from
public static RegionBSPTree2S from(java.lang.Iterable<GreatArc> boundaries, boolean full)
Construct a new tree from the given boundaries. Iffullis true, then the initial tree before boundary insertion contains the entire space. Otherwise, it is empty.- Parameters:
boundaries- boundaries to construct the tree fromfull- if true, the initial tree will contain the entire space- Returns:
- a new tree instance constructed from the given boundaries
-
-