接口 Region<S extends Space>
- 类型参数:
-
S
- 空间的类型。
区域是空间的子集,它们可以是无限的(整个空间、半空间、无限条带...)或有限的(2D中的多边形、3D中的多面体...)。它们的主要特征是将被认为在区域内部的点与被认为在其外部的点分开。在两者之间,可能存在在区域的边界上的点。
此实现仅限于边界由多个sub-hyperplanes
组成的区域,包括没有边界的区域:整个空间和空区域。它们不一定是有限的,也不一定是路径连接的。它们可以包含孔。
区域可以使用传统的集合操作进行组合:并集、交集、差集和对称差(异或)用于二元操作,补集用于一元操作。
请注意,此接口不打算由Hipparchus用户实现,它仅打算在库内部实现。即使对于次要版本,也可能添加新方法,这会破坏外部实现的兼容性。
-
嵌套类概要
-
方法概要
修饰符和类型方法说明使用实例作为原型构建区域。checkPoint
(Point<S> point) 检查点相对于区域的位置。boolean
检查实例是否完全包含另一个区域。copySelf()
复制实例。获取实例的重心。double
获取边界的大小。double
getSize()
获取实例的大小。getTree
(boolean includeBoundaryAttributes) 获取基础BSP树。intersection
(SubHyperplane<S> sub) 获取包含在区域中的子超平面的部分。boolean
isEmpty()
检查实例是否为空。boolean
检查从给定节点开始的子树是否为空。boolean
isFull()
检查实例是否覆盖整个空间。boolean
检查从给定节点开始的子树是否覆盖整个空间。projectToBoundary
(Point<S> point) 在区域的边界上投影点。
-
方法详细资料
-
buildNew
使用实例作为原型构建区域。此方法允许创建新实例,而无需确切了解区域的类型。这是原型设计模式的应用。
BSP树的叶节点必须具有表示相应单元格内部状态的
Boolean
属性(对于内部单元格为true,对于外部单元格为false)。为避免构建太多小对象,建议使用预定义常量Boolean.TRUE
和Boolean.FALSE
。树还必须具有空的内部节点或表示边界的内部节点,如getTree(boolean)
方法中指定的那样)。- 参数:
-
newTree
- 表示新区域的内部/外部BSP树 - 返回:
- 构建的区域
-
copySelf
复制实例。创建的实例与原始实例完全独立。使用深度复制,没有共享任何基础对象(除了基础树
Boolean
属性和不可变对象)。- 返回:
- 一个新的区域,是实例的副本
-
isEmpty
boolean isEmpty()检查实例是否为空。- 返回:
- 如果实例为空,则为true
-
isEmpty
检查从给定节点开始的子树是否为空。- 参数:
-
node
- 子树的根节点(必须具有Region
树语义,即叶节点必须具有表示内部/外部属性的Boolean
属性) - 返回:
- 如果从给定节点开始的子树为空,则为true
-
isFull
boolean isFull()检查实例是否覆盖整个空间。- 返回:
- 如果实例覆盖整个空间,则为true
-
isFull
检查从给定节点开始的子树是否覆盖整个空间。- 参数:
-
node
- 子树的根节点(必须具有Region
树语义,即叶节点必须具有表示内部/外部属性的Boolean
属性) - 返回:
- 如果从给定节点开始的子树覆盖整个空间,则为true
-
contains
检查实例是否完全包含另一个区域。- 参数:
-
region
- 要检查的区域与实例 - 返回:
- 如果实例包含指定的树,则为true
-
checkPoint
检查点相对于区域的位置。- 参数:
-
point
- 要检查的点 - 返回:
-
代表点状态的代码:要么
Region.Location.INSIDE
,要么Region.Location.OUTSIDE
,要么Region.Location.BOUNDARY
-
projectToBoundary
在区域的边界上投影点。- 参数:
-
point
- 要检查的点 - 返回:
- 点在边界上的投影
-
getTree
获取基础BSP树。区域由内部/外部BSP树表示,其叶属性是
Boolean
实例,表示内部叶单元格如果属性值为true
,则表示外部叶单元格如果属性为false
。这些叶属性始终存在且保证为非null。除了叶属性之外,内部节点对应于由切割子超平面分割的单元格的内部节点可能包含表示属于边界的相应切割子超平面部分的
BoundaryAttribute
对象。当计算边界属性时,所有内部节点都保证具有非null属性,但是一些BoundaryAttribute
实例可能具有它们的getPlusInside
和getPlusOutside
方法都返回null,如果相应的切割子超平面没有任何部分属于边界。由于计算边界并非总是必需的,并且对于大树而言可能耗时,这些内部节点属性仅在需要时通过设置
includeBoundaryAttributes
参数为true
进行延迟评估。一旦计算,这些属性将保留在树中,这意味着在这种情况下,对于同一区域的进一步调用该方法将始终包括这些属性,而不管includeBoundaryAttributes
参数的值如何。- 参数:
-
includeBoundaryAttributes
- 如果为true,则保证在内部节点中包含边界属性(如果已由先前调用计算,则可能包含,即使参数为false)。 - 返回:
- 基础BSP树
- 另请参阅:
-
getBoundarySize
double getBoundarySize()获取边界的大小。- 返回:
- 边界的大小(在1D中为0,在2D中为长度,在3D中为面积...)
-
getSize
double getSize()获取实例的大小。- 返回:
- 实例的大小(在1D中是长度,在2D中是面积,在3D中是体积...)
-
getBarycenter
获取实例的重心。- 返回:
- 代表重心的对象
-
intersection
获取包含在区域中的子超平面的部分。属于边界的子超平面部分不包括在结果部分中。
- 参数:
-
sub
- 穿过区域的子超平面 - 返回:
- 过滤后的子超平面
-