类 SphericalPolygonsSet
-
嵌套类概要
从接口继承的嵌套类/接口 org.hipparchus.geometry.partitioning.Region
Region.Location
-
构造器概要
构造器说明SphericalPolygonsSet
(double tolerance) 构建表示整个实数2球的多边形集。SphericalPolygonsSet
(double hyperplaneThickness, S2Point... vertices) 从简单顶点列表构建多边形。SphericalPolygonsSet
(Collection<SubHyperplane<Sphere2D>> boundary, double tolerance) 从边界表示(B-rep)构建多边形集。SphericalPolygonsSet
(Vector3D pole, double tolerance) 构建表示半球的多边形集。SphericalPolygonsSet
(Vector3D center, Vector3D meridian, double outsideRadius, int n, double tolerance) 构建表示正多边形的多边形集。SphericalPolygonsSet
(BSPTree<Sphere2D> tree, double tolerance) 从BSP树构建多边形集。 -
方法概要
修饰符和类型方法说明使用实例作为原型构建区域。protected void
计算一些几何属性。获取多边形的边界环。获取包围多边形的球冠。从类继承的方法 org.hipparchus.geometry.partitioning.AbstractRegion
applyTransform, checkPoint, checkPoint, checkPoint, checkPoint, contains, copySelf, getBarycenter, getBoundarySize, getSize, getTolerance, getTree, intersection, isEmpty, isEmpty, isFull, isFull, projectToBoundary, setBarycenter, setBarycenter, setSize
-
构造器详细资料
-
SphericalPolygonsSet
构建表示整个实数2球的多边形集。- 参数:
-
tolerance
- 以下点被视为相同 - 抛出:
-
MathIllegalArgumentException
- 如果容差小于Sphere1D.SMALLEST_TOLERANCE
-
SphericalPolygonsSet
构建表示半球的多边形集。- 参数:
-
pole
- 半球的极点(极点在内部半球) -
tolerance
- 以下点被视为相同 - 抛出:
-
MathIllegalArgumentException
- 如果容差小于Sphere1D.SMALLEST_TOLERANCE
-
SphericalPolygonsSet
public SphericalPolygonsSet(Vector3D center, Vector3D meridian, double outsideRadius, int n, double tolerance) throws MathIllegalArgumentException 构建表示正多边形的多边形集。- 参数:
-
center
- 多边形的中心(中心在内部半球) -
meridian
- 定义第一个多边形顶点参考子午线的点 -
outsideRadius
- 顶点到中心的距离 -
n
- 多边形的边数 -
tolerance
- 以下点被视为相同 - 抛出:
-
MathIllegalArgumentException
- 如果容差小于Sphere1D.SMALLEST_TOLERANCE
-
SphericalPolygonsSet
public SphericalPolygonsSet(BSPTree<Sphere2D> tree, double tolerance) throws MathIllegalArgumentException 从BSP树构建多边形集。BSP树的叶节点必须具有表示相应单元格内部状态的
Boolean
属性(内部单元格为true,外部单元格为false)。为了避免构建太多小对象,建议使用预定义常量Boolean.TRUE
和Boolean.FALSE
- 参数:
-
tree
- 表示区域的内部/外部BSP树 -
tolerance
- 以下点被视为相同 - 抛出:
-
MathIllegalArgumentException
- 如果容差小于Sphere1D.SMALLEST_TOLERANCE
-
SphericalPolygonsSet
public SphericalPolygonsSet(Collection<SubHyperplane<Sphere2D>> boundary, double tolerance) throws MathIllegalArgumentException 从边界表示(B-rep)构建多边形集。边界提供为一组
子超平面
。每个子超平面的内部区域在其负侧,外部区域在其正侧。边界元素可以以任何顺序出现,并且可以形成几个非连接的集合(例如具有孔的多边形或作为整体考虑的一组不相连的多边形)。实际上,元素甚至不需要连接在一起(它们的拓扑连接在这里不被使用)。但是,如果边界实际上没有将内部开放区域与外部开放区域分开(这里的开放具有其拓扑意义),那么后续对
checkPoint
方法的调用将不再有意义。如果边界为空,则区域将表示整个空间。
- 参数:
-
boundary
- 作为一组SubHyperplane
对象的边界元素集合 -
tolerance
- 以下点被视为相同 - 抛出:
-
MathIllegalArgumentException
- 如果容差小于Sphere1D.SMALLEST_TOLERANCE
-
SphericalPolygonsSet
public SphericalPolygonsSet(double hyperplaneThickness, S2Point... vertices) throws MathIllegalArgumentException 从简单顶点列表构建多边形。边界提供为考虑表示简单环的顶点的点列表。区域的内部部分在此路径的左侧,外部部分在其右侧。
此构造函数不处理具有形成几个不连通路径的边界的多边形(例如具有孔的多边形)。
对于适用于此简单构造函数的情况,预计在数值上比使用
通用构造函数
使用subhyperplanes
更加稳健。如果列表为空,则区域将表示整个空间。
此构造函数假定
vertices
之间的边,包括最后一个顶点和第一个顶点之间的边,比π短。如果使用大于π的边,可能会产生不直观的结果,例如颠倒边的方向。这意味着在此构造函数中使用长度为1或2的vertices
数组会产生一个定义不明确的区域。请改用其他构造函数或RegionFactory
。在创建边界集之前,通过选择顶点的子集来减少
vertices
列表。vertices
中的每个点都将位于构建的多边形集的边界
上,但不一定是边界的中心线。具有细长尖峰或凹点的多边形本质上很难处理,因为它们涉及在某些顶点处具有几乎相反方向的圆。顶点来自带有噪声的某些物理测量的多边形也很难处理,因为应该是直的边可能会被分成许多具有几乎相等方向的不同片段。由于几乎为0或几乎π的角度,计算圆的交点并不是数值稳健的。这种情况需要仔细调整
hyperplaneThickness
参数。太小的值通常会导致完全错误的多边形,大面积错误地被识别为内部或外部。较大的值通常更安全。作为经验法则,略低于所需最精确细节的大小是hyperplaneThickness
参数的一个很好的值。- 参数:
-
hyperplaneThickness
- 以下点被视为属于超平面(因此更像是一个板块)。应大于FastMath.ulp(4 * FastMath.PI)
以获得有意义的结果。 -
vertices
- 简单环边界的顶点 - 抛出:
-
MathIllegalArgumentException
- 如果容差小于Sphere1D.SMALLEST_TOLERANCE
-
MathRuntimeException
- 如果vertices
只包含单个顶点或重复顶点。
-
-
方法详细资料
-
buildNew
使用实例作为原型构建区域。此方法允许创建新实例,而无需准确知道区域的类型。这是原型设计模式的应用。
BSP树的叶节点必须具有表示相应单元格内部状态的布尔属性(对于内部单元格为true,对于外部单元格为false)。为了避免构建太多小对象,建议使用预定义的常量Boolean.TRUE和Boolean.FALSE。树还必须具有空的内部节点或表示边界的内部节点,如getTree方法中指定的那样。
-
computeGeometricalProperties
计算一些几何属性。要计算的属性包括重心和大小。
- 指定者:
-
computeGeometricalProperties
在类中AbstractRegion<Sphere2D,
Sphere1D> - 抛出:
-
MathIllegalStateException
- 如果容差设置不允许构建清晰且无歧义的边界
-
getBoundaryLoops
获取多边形的边界环。多边形边界可以表示为一组闭合环,每个环由其一个顶点确定。从每个环的起始顶点开始,可以通过查找出边、然后是结束顶点、然后是下一个出边...直到再次找到环的起始顶点(完全相同的实例)来遍历整个环。
如果多边形根本没有边界,则将返回一个长度为零的环数组。
如果多边形是一个简单的单一多边形,则返回的数组将包含一个顶点。
各个环中的所有边在其左侧具有区域的内部(即朝向极点),在其右侧具有区域的外部(即远离极点),当沿着基础圆的方向移动时。这意味着闭合环遵守直接的三角方向。
- 返回:
- 多边形的边界,组织为一组闭合环的起始顶点的不可修改列表。
- 抛出:
-
MathIllegalStateException
- 如果容差设置不允许构建清晰且无歧义的边界 - 另请参阅:
-
getEnclosingCap
获取包围多边形的球冠。此方法旨在作为第一次测试,快速识别保证在区域外部的点,因此仅在快速检查后点的状态仍未确定时才执行完整的checkPoint。因此,对于具有复杂形状的小多边形(例如地球上的国界),此方法通常用于加快计算速度,因为球冠将很小,因此可可靠地将球的大部分部分识别为外部,而完整检查可能需要更多计算。因此,典型用例是:
// 计算区域,以及一个包围的球冠 SphericalPolygonsSet complexShape = ...; EnclosingBall<Sphere2D, S2Point> cap = complexShape.getEnclosingCap(); // 检查大量点 for (Vector3D p : points) { final Location l; if (cap.contains(p)) { // 我们无法确定点的位置 // 我们需要执行完整计算 l = complexShape.checkPoint(v); } else { // 无需进行进一步计算, // 我们已经知道点在外部 l = Location.OUTSIDE; } // 使用 l ... }
在空多边形或整个球面多边形的特殊情况下,将返回特殊的球冠,角半径设置为负无穷大或正无穷大,因此ball.contains(point)方法始终返回false或true。
此方法不能保证返回最小的包围球冠。
- 返回:
- 包围多边形的球冠
-