类 SphericalPolygonsSet

java.lang.Object
org.hipparchus.geometry.partitioning.AbstractRegion<Sphere2D,Sphere1D>
org.hipparchus.geometry.spherical.twod.SphericalPolygonsSet
所有已实现的接口:
Region<Sphere2D>

public class SphericalPolygonsSet extends AbstractRegion<Sphere2D,Sphere1D>
该类表示2球上的区域:一组球面多边形。
  • 构造器详细资料

    • SphericalPolygonsSet

      public SphericalPolygonsSet(double tolerance) throws MathIllegalArgumentException
      构建表示整个实数2球的多边形集。
      参数:
      tolerance - 以下点被视为相同
      抛出:
      MathIllegalArgumentException - 如果容差小于Sphere1D.SMALLEST_TOLERANCE
    • SphericalPolygonsSet

      public SphericalPolygonsSet(Vector3D pole, double tolerance) throws MathIllegalArgumentException
      构建表示半球的多边形集。
      参数:
      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.TRUEBoolean.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

      public SphericalPolygonsSet buildNew(BSPTree<Sphere2D> tree)
      使用实例作为原型构建区域。

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

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

      指定者:
      buildNew 在接口中 Region<Sphere2D>
      指定者:
      buildNew 在类中 AbstractRegion<Sphere2D,Sphere1D>
      参数:
      tree - 表示新区域的内部/外部BSP树
      返回:
      构建的区域
    • computeGeometricalProperties

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

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

      指定者:
      computeGeometricalProperties 在类中 AbstractRegion<Sphere2D,Sphere1D>
      抛出:
      MathIllegalStateException - 如果容差设置不允许构建清晰且无歧义的边界
    • getBoundaryLoops

      public List<Vertex> getBoundaryLoops() throws MathIllegalStateException
      获取多边形的边界环。

      多边形边界可以表示为一组闭合环,每个环由其一个顶点确定。从每个环的起始顶点开始,可以通过查找出边、然后是结束顶点、然后是下一个出边...直到再次找到环的起始顶点(完全相同的实例)来遍历整个环。

      如果多边形根本没有边界,则将返回一个长度为零的环数组。

      如果多边形是一个简单的单一多边形,则返回的数组将包含一个顶点。

      各个环中的所有边在其左侧具有区域的内部(即朝向极点),在其右侧具有区域的外部(即远离极点),当沿着基础圆的方向移动时。这意味着闭合环遵守直接的三角方向。

      返回:
      多边形的边界,组织为一组闭合环的起始顶点的不可修改列表。
      抛出:
      MathIllegalStateException - 如果容差设置不允许构建清晰且无歧义的边界
      另请参阅:
    • getEnclosingCap

      public EnclosingBall<Sphere2D,S2Point> 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。

      此方法不能保证返回最小的包围球冠。

      返回:
      包围多边形的球冠