类 AbstractRegion<S extends Space,T extends Space>

java.lang.Object
org.hipparchus.geometry.partitioning.AbstractRegion<S,T>
类型参数:
S - 空间的类型。
T - 子空间的类型。
所有已实现的接口:
Region<S>
直接已知子类:
ArcsSet, IntervalsSet, PolygonsSet, PolyhedronsSet, SphericalPolygonsSet

public abstract class AbstractRegion<S extends Space,T extends Space> extends Object implements Region<S>
所有区域的抽象类,独立于几何类型或维度。
  • 构造器详细资料

    • AbstractRegion

      protected AbstractRegion(double tolerance)
      构建表示整个空间的区域。
      参数:
      tolerance - 被认为相同的点的容差。
    • AbstractRegion

      protected AbstractRegion(BSPTree<S> tree, double tolerance)
      从内部/外部BSP树构建区域。

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

      参数:
      tree - 表示区域的内部/外部BSP树
      tolerance - 被认为相同的点的容差。
    • AbstractRegion

      protected AbstractRegion(Collection<SubHyperplane<S>> boundary, double tolerance)
      从边界表示(B-rep)构建区域。

      边界以sub-hyperplanes的集合形式提供。每个子超平面的内部部分在其负侧,外部部分在其正侧。

      边界元素可以以任何顺序提供,并且可以形成几个非连接的集合(例如带孔的多边形或一组被视为整体的不相交的多面体)。实际上,元素甚至不需要连接在一起(它们的拓扑连接在这里不使用)。但是,如果边界实际上没有将内部开放区域与外部开放区域分开(这里的开放具有其拓扑含义),那么后续对checkPoint方法的调用将不再有意义。

      如果边界为空,则区域将表示整个空间。

      参数:
      boundary - 作为SubHyperplane对象集合的边界元素集合
      tolerance - 被认为相同的点的容差。
    • AbstractRegion

      public AbstractRegion(Hyperplane<S>[] hyperplanes, double tolerance)
      从一组边界超平面构建凸区域。
      参数:
      hyperplanes - 边界超平面的数组(如果为null,则将构建一个空区域)
      tolerance - 被认为相同的点的容差。
  • 方法详细资料

    • buildNew

      public abstract AbstractRegion<S,T> buildNew(BSPTree<S> newTree)
      使用实例作为原型构建区域。

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

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

      指定者:
      buildNew 在接口中 Region<S extends Space>
      参数:
      newTree - 表示新区域的内部/外部BSP树
      返回:
      构建的区域
    • getTolerance

      public double getTolerance()
      获取被认为属于超平面的点的容差。
      返回:
      被认为属于超平面的点的容差
    • copySelf

      public AbstractRegion<S,T> copySelf()
      复制实例。

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

      指定者:
      copySelf 在接口中 Region<S extends Space>
      返回:
      一个新的区域,与实例相同
    • isEmpty

      public boolean isEmpty()
      检查实例是否为空。
      指定者:
      isEmpty 在接口中 Region<S extends Space>
      返回:
      如果实例为空,则为true
    • isEmpty

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

      public boolean isFull()
      检查实例是否覆盖整个空间。
      指定者:
      isFull 在接口中 Region<S extends Space>
      返回:
      如果实例覆盖整个空间,则返回true
    • isFull

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

      public boolean contains(Region<S> region)
      检查实例是否完全包含另一个区域。
      指定者:
      contains 在接口中 Region<S extends Space>
      参数:
      region - 要检查的区域
      返回:
      如果实例包含指定的树,则返回true
    • projectToBoundary

      public BoundaryProjection<S> projectToBoundary(Point<S> point)
      在区域边界上投影一个点。
      指定者:
      projectToBoundary 在接口中 Region<S extends Space>
      参数:
      point - 要检查的点
      返回:
      点在边界上的投影
    • checkPoint

      public <V extends Vector<S, V>> Region.Location checkPoint(Vector<S,V> point)
      根据区域检查一个点。
      类型参数:
      V - 实现Vector接口的向量类型
      参数:
      point - 要检查的点
      返回:
      代表点状态的代码:要么Region.Location.INSIDE,要么Region.Location.OUTSIDE,要么Region.Location.BOUNDARY
    • checkPoint

      public Region.Location checkPoint(Point<S> point)
      根据区域检查一个点。
      指定者:
      checkPoint 在接口中 Region<S extends Space>
      参数:
      point - 要检查的点
      返回:
      代表点状态的代码:要么Region.Location.INSIDE,要么Region.Location.OUTSIDE,要么Region.Location.BOUNDARY
    • checkPoint

      protected <V extends Vector<S, V>> Region.Location checkPoint(BSPTree<S> node, Vector<S,V> point)
      从给定节点开始根据区域检查一个点。
      类型参数:
      V - 实现Vector接口的向量类型
      参数:
      node - 区域的根节点
      point - 要检查的点
      返回:
      代表点状态的代码:要么INSIDE,要么OUTSIDE,要么BOUNDARY
    • checkPoint

      protected Region.Location checkPoint(BSPTree<S> node, Point<S> point)
      从给定节点开始根据区域检查一个点。
      参数:
      node - 区域的根节点
      point - 要检查的点
      返回:
      代表点状态的代码:要么INSIDE,要么OUTSIDE,要么BOUNDARY
    • getTree

      public BSPTree<S> getTree(boolean includeBoundaryAttributes)
      获取底层BSP树。

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

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

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

      指定者:
      getTree 在接口中 Region<S extends Space>
      参数:
      includeBoundaryAttributes - 如果为true,则保证在内部节点包含边界属性(如果已经计算过,可能会包含,即使参数为false,如果由于先前调用已经计算过)
      返回:
      底层BSP树
      另请参阅:
    • getBoundarySize

      public double getBoundarySize()
      获取边界的大小。
      指定者:
      getBoundarySize 在接口中 Region<S extends Space>
      返回:
      边界的大小(在1D中为0,在2D中为长度,在3D中为面积...)
    • getSize

      public double getSize()
      获取实例的大小。
      指定者:
      getSize 在接口中 Region<S extends Space>
      返回:
      实例的大小(在1D中为长度,在2D中为面积,在3D中为体积...)
    • setSize

      protected void setSize(double size)
      设置实例的大小。
      参数:
      size - 实例的大小
    • getBarycenter

      public Point<S> getBarycenter()
      获取实例的重心。
      指定者:
      getBarycenter 在接口中 Region<S extends Space>
      返回:
      代表重心的对象
    • setBarycenter

      protected <V extends Vector<S, V>> void setBarycenter(Vector<S,V> barycenter)
      设置实例的重心。
      类型参数:
      V - 实现Vector接口的向量类型
      参数:
      barycenter - 实例的重心
    • setBarycenter

      protected void setBarycenter(Point<S> barycenter)
      设置实例的重心。
      参数:
      barycenter - 实例的重心
    • computeGeometricalProperties

      protected abstract void computeGeometricalProperties()
      计算一些几何属性。

      要计算的属性包括重心和大小。

    • intersection

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

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

      指定者:
      intersection 在接口中 Region<S extends Space>
      参数:
      sub - 遍历区域的子超平面
      返回:
      过滤后的子超平面
    • applyTransform

      public AbstractRegion<S,T> applyTransform(Transform<S,T> transform)
      转换一个区域。

      对区域应用变换意味着对底层BSP树和边界的所有超平面(以及嵌入在这些超平面中的子超平面)和重心应用变换。实例不会被修改,而是构建一个新实例。

      参数:
      transform - 要应用的变换
      返回:
      一个新的区域,由将变换应用于实例得到