接口 Region<S extends Space>

类型参数:
S - 空间的类型。
所有已知实现类:
AbstractRegion, ArcsSet, IntervalsSet, PolygonsSet, PolyhedronsSet, SphericalPolygonsSet

public interface Region<S extends Space>
该接口将空间的区域表示为一个分区。

区域是空间的子集,它们可以是无限的(整个空间、半空间、无限条带...)或有限的(2D中的多边形、3D中的多面体...)。它们的主要特征是将被认为在区域内部的点与被认为在其外部的点分开。在两者之间,可能存在在区域的边界上的点。

此实现仅限于边界由多个sub-hyperplanes组成的区域,包括没有边界的区域:整个空间和空区域。它们不一定是有限的,也不一定是路径连接的。它们可以包含孔。

区域可以使用传统的集合操作进行组合:并集、交集、差集和对称差(异或)用于二元操作,补集用于一元操作。

请注意,此接口不打算由Hipparchus用户实现,它仅打算在库内部实现。即使对于次要版本,也可能添加新方法,这会破坏外部实现的兼容性。

  • 方法详细资料

    • buildNew

      Region<S> buildNew(BSPTree<S> newTree)
      使用实例作为原型构建区域。

      此方法允许创建新实例,而无需确切了解区域的类型。这是原型设计模式的应用。

      BSP树的叶节点必须具有表示相应单元格内部状态的Boolean属性(对于内部单元格为true,对于外部单元格为false)。为避免构建太多小对象,建议使用预定义常量Boolean.TRUEBoolean.FALSE。树还必须具有空的内部节点或表示边界的内部节点,如getTree(boolean)方法中指定的那样)。

      参数:
      newTree - 表示新区域的内部/外部BSP树
      返回:
      构建的区域
    • copySelf

      Region<S> copySelf()
      复制实例。

      创建的实例与原始实例完全独立。使用深度复制,没有共享任何基础对象(除了基础树Boolean属性和不可变对象)。

      返回:
      一个新的区域,是实例的副本
    • isEmpty

      boolean isEmpty()
      检查实例是否为空。
      返回:
      如果实例为空,则为true
    • isEmpty

      boolean isEmpty(BSPTree<S> node)
      检查从给定节点开始的子树是否为空。
      参数:
      node - 子树的根节点(必须具有Region树语义,即叶节点必须具有表示内部/外部属性的Boolean属性)
      返回:
      如果从给定节点开始的子树为空,则为true
    • isFull

      boolean isFull()
      检查实例是否覆盖整个空间。
      返回:
      如果实例覆盖整个空间,则为true
    • isFull

      boolean isFull(BSPTree<S> node)
      检查从给定节点开始的子树是否覆盖整个空间。
      参数:
      node - 子树的根节点(必须具有Region树语义,即叶节点必须具有表示内部/外部属性的Boolean属性)
      返回:
      如果从给定节点开始的子树覆盖整个空间,则为true
    • contains

      boolean contains(Region<S> region)
      检查实例是否完全包含另一个区域。
      参数:
      region - 要检查的区域与实例
      返回:
      如果实例包含指定的树,则为true
    • checkPoint

      Region.Location checkPoint(Point<S> point)
      检查点相对于区域的位置。
      参数:
      point - 要检查的点
      返回:
      代表点状态的代码:要么Region.Location.INSIDE,要么Region.Location.OUTSIDE,要么Region.Location.BOUNDARY
    • projectToBoundary

      BoundaryProjection<S> projectToBoundary(Point<S> point)
      在区域的边界上投影点。
      参数:
      point - 要检查的点
      返回:
      点在边界上的投影
    • getTree

      BSPTree<S> getTree(boolean includeBoundaryAttributes)
      获取基础BSP树。

      区域由内部/外部BSP树表示,其叶属性是Boolean实例,表示内部叶单元格如果属性值为true,则表示外部叶单元格如果属性为false。这些叶属性始终存在且保证为非null。

      除了叶属性之外,内部节点对应于由切割子超平面分割的单元格的内部节点可能包含表示属于边界的相应切割子超平面部分的BoundaryAttribute对象。当计算边界属性时,所有内部节点都保证具有非null属性,但是一些BoundaryAttribute实例可能具有它们的getPlusInsidegetPlusOutside方法都返回null,如果相应的切割子超平面没有任何部分属于边界。

      由于计算边界并非总是必需的,并且对于大树而言可能耗时,这些内部节点属性仅在需要时通过设置includeBoundaryAttributes参数为true进行延迟评估。一旦计算,这些属性将保留在树中,这意味着在这种情况下,对于同一区域的进一步调用该方法将始终包括这些属性,而不管includeBoundaryAttributes参数的值如何。

      参数:
      includeBoundaryAttributes - 如果为true,则保证在内部节点中包含边界属性(如果已由先前调用计算,则可能包含,即使参数为false)。
      返回:
      基础BSP树
      另请参阅:
    • getBoundarySize

      double getBoundarySize()
      获取边界的大小。
      返回:
      边界的大小(在1D中为0,在2D中为长度,在3D中为面积...)
    • getSize

      double getSize()
      获取实例的大小。
      返回:
      实例的大小(在1D中是长度,在2D中是面积,在3D中是体积...)
    • getBarycenter

      Point<S> getBarycenter()
      获取实例的重心。
      返回:
      代表重心的对象
    • intersection

      SubHyperplane<S> intersection(SubHyperplane<S> sub)
      获取包含在区域中的子超平面的部分。

      属于边界的子超平面部分包括在结果部分中。

      参数:
      sub - 穿过区域的子超平面
      返回:
      过滤后的子超平面