Class 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.
  • Field Details

    • FULL_SIZE

      private static final double FULL_SIZE
      Constant containing the area of the full spherical space.
      See Also:
    • boundaryPaths

      private List<GreatArcPath> boundaryPaths
      List of great arc path comprising the region boundary.
  • Constructor Details

    • RegionBSPTree2S

      public RegionBSPTree2S()
      Create a new, empty instance.
    • RegionBSPTree2S

      public RegionBSPTree2S(boolean full)
      Create a new region. If full is 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 Details

    • copy

      public RegionBSPTree2S copy()
      Return a deep copy of this instance.
      Returns:
      a deep copy of this instance.
      See Also:
    • boundaries

      public Iterable<GreatArc> boundaries()
      Return an Iterable for 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:
      boundaries in class AbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>
      Returns:
      an Iterable for iterating over the boundaries of the region
      See Also:
    • boundaryStream

      public Stream<GreatArc> boundaryStream()
      Return a stream containing the boundaries for this instance.
      Specified by:
      boundaryStream in interface BoundarySource<GreatArc>
      Returns:
      a stream containing the boundaries for this instance
    • getBoundaries

      public 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:
      getBoundaries in class AbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>
      Returns:
      a list of the boundaries of the region
    • getBoundaryPaths

      public 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 List<ConvexArea2S> toConvex()
      Return a list of ConvexArea2Ss 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, 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 for
      nodeArea - 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 nodes
      result - list containing the results of the computation
    • split

      public Split<RegionBSPTree2S> split(Hyperplane<Point2S> splitter)
      Split this instance with the given hyperplane.
      Specified by:
      split in interface Splittable<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 either full or empty).
      Specified by:
      project in interface Region<Point2S>
      Overrides:
      project in class AbstractRegionBSPTree<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:
      toTree in interface BoundarySource2S
      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:
      computeRegionSizeProperties in class AbstractRegionBSPTree<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:
      createNode in class AbstractBSPTree<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.version property.

      Overrides:
      invalidate in class AbstractRegionBSPTree<Point2S,RegionBSPTree2S.RegionNode2S>
      See Also:
    • computeBoundaryPaths

      private 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(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

      public static RegionBSPTree2S from(Iterable<GreatArc> boundaries, boolean full)
      Construct a new tree from the given boundaries. If full is true, then the initial tree before boundary insertion contains the entire space. Otherwise, it is empty.
      Parameters:
      boundaries - boundaries to construct the tree from
      full - if true, the initial tree will contain the entire space
      Returns:
      a new tree instance constructed from the given boundaries