类 PolygonsSet

所有已实现的接口:
Region<Euclidean2D>

public class PolygonsSet extends AbstractRegion<Euclidean2D,Euclidean1D>
该类表示一个2D区域:一组多边形。
  • 构造器详细资料

    • PolygonsSet

      public PolygonsSet(double tolerance)
      构建一个代表整个平面的多边形集。
      参数:
      tolerance - 以下点被视为相同的公差
    • PolygonsSet

      public PolygonsSet(BSPTree<Euclidean2D> tree, double tolerance)
      从BSP树构建多边形集。

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

      此构造函数面向专家使用,因为构建树可能是一项困难的任务。它不适用于一般用途,并且出于性能原因不会彻底检查其输入,因为这将要求每次都遍历整个树。未能提供具有正确属性的树,将会导致问题,例如稍后将生成NullPointerExceptionClassCastException。这种限制是已知的,解释了为什么此构造函数仅供专家使用。调用者有责任提供正确的参数。

      参数:
      tree - 表示区域的内部/外部BSP树
      tolerance - 以下点被视为相同的公差
    • PolygonsSet

      public PolygonsSet(Collection<SubHyperplane<Euclidean2D>> boundary, double tolerance)
      从边界表示(B-rep)构建多边形集。

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

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

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

      参数:
      boundary - 作为SubHyperplane对象集合的边界元素集合
      tolerance - 以下点被视为相同的公差
    • PolygonsSet

      public PolygonsSet(double xMin, double xMax, double yMin, double yMax, double tolerance)
      构建一个平行六面体箱。
      参数:
      xMin - x方向的低边界
      xMax - x方向的高边界
      yMin - y方向的低边界
      yMax - y方向的高边界
      tolerance - 以下点被视为相同的公差
    • PolygonsSet

      public PolygonsSet(double hyperplaneThickness, Vector2D... vertices)
      从简单顶点列表构建多边形。

      边界作为考虑表示简单环路顶点的点列表提供。区域的内部部分在此路径的左侧,外部部分在其右侧。

      此构造函数不处理具有形成几个不连通路径的边界的多边形(例如具有孔的多边形)。

      对于适用于此简单构造函数的情况,预计在数值上比使用subhyperplanesgeneral constructor更稳健。

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

      具有细长尖峰或凹痕的多边形本质上难以处理,因为它们涉及在某些顶点处几乎相反方向的线。顶点来自具有噪声的某些物理测量的多边形也很困难,因为应该是直的边可能会以许多几乎相等方向的不同片段断裂。在这两种情况下,由于几乎为0或几乎π的角度,计算线的交点并不是数值上稳健的。这种情况需要仔细调整hyperplaneThickness参数。太小的值通常会导致完全错误的多边形,大面积错误地被识别为内部或外部。较大的值通常更安全。作为经验法则,略低于所需最准确细节的大小是hyperplaneThickness参数的良好值。

      参数:
      hyperplaneThickness - 以下点被视为属于超平面的公差(因此更像是一个板)
      vertices - 简单环路边界的顶点
  • 方法详细资料

    • buildNew

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

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

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

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

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

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

      指定者:
      computeGeometricalProperties 在类中 AbstractRegion<Euclidean2D,Euclidean1D>
    • getVertices

      public Vector2D[][] getVertices()
      获取多边形的顶点。

      多边形边界可以表示为一组循环的数组,每个循环本身都是一个顶点数组。

      为了识别以无限边开始和结束的开放循环,开放循环数组以一个空点开头。在这种情况下,数组的第一个非空点和最后一个点不代表真实的顶点,它们只是用来获取第一条和最后一条边的方向的虚拟点。因此,由一条单一无限线组成的开放循环将由一个包含三个元素的数组表示,其中包含一个空点,然后是两个虚拟点。开放循环总是在循环数组的最前面。

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

      各种循环中的所有线段在向下移动时,其区域的内部在左侧,外部在右侧。这意味着围绕有限区域的封闭循环遵守直接三角形的方向。

      返回:
      多边形的顶点,组织为有方向的边界循环,其中开放循环在前(返回值保证非空)