Module java.desktop
Package java.awt

Class Polygon

java.lang.Object
java.awt.Polygon
所有已实现的接口:
Shape, Serializable

public class Polygon extends Object implements Shape, Serializable
Polygon类封装了在坐标空间内描述闭合的二维区域的信息。该区域由任意数量的线段限定,每个线段是多边形的一条边。在内部,多边形由一系列(x,y)坐标对组成,其中每对定义多边形的一个顶点,并且两个连续的对是多边形一条边的端点。第一个和最后一个(x,y)点对由一条线段连接,闭合多边形。此Polygon使用奇偶规则定义。请参见WIND_EVEN_ODD以获取奇偶规则的定义。此类的命中测试方法,包括containsintersectsinside方法,使用在Shape类注释中描述的内部性定义。
自:
1.0
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Rectangle
    Polygon的边界。
    int
    点的总数。
    int[]
    X坐标数组。
    int[]
    Y坐标数组。
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个空多边形。
    Polygon(int[] xpoints, int[] ypoints, int npoints)
    根据指定参数构造并初始化一个Polygon
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addPoint(int x, int y)
    将指定坐标附加到此Polygon
    boolean
    contains(double x, double y)
    测试指定坐标是否在Shape的边界内,如内部性的定义所述。
    boolean
    contains(double x, double y, double w, double h)
    测试Shape的内部是否完全包含指定的矩形区域。
    boolean
    contains(int x, int y)
    确定指定坐标是否在此Polygon内部。
    boolean
    测试指定的Point2D是否在Shape的边界内,如内部性的定义所述。
    boolean
    测试Shape的内部是否完全包含指定的Rectangle2D
    boolean
    确定指定的Point是否在此Polygon内部。
    已弃用。
    自JDK版本1.1起,已被getBounds()替换。
    获取此Polygon的边界框。
    返回Shape的边界框比getBounds方法更高精度和更准确。
    返回一个迭代器对象,该对象沿着此Polygon的边界迭代,并提供对此Polygon轮廓几何的访问。
    getPathIterator(AffineTransform at, double flatness)
    返回一个迭代器对象,该对象沿着Shape的边界迭代,并提供对Shape轮廓几何的访问。
    boolean
    inside(int x, int y)
    已弃用。
    自JDK版本1.1起,已被contains(int, int)替换。
    boolean
    intersects(double x, double y, double w, double h)
    测试Shape的内部是否与指定矩形区域的内部相交。
    boolean
    测试Shape的内部是否与指定Rectangle2D的内部相交。
    void
    使依赖于此Polygon的顶点坐标的任何内部缓存数据无效或刷新。
    void
    reset()
    将此Polygon对象重置为空多边形。
    void
    translate(int deltaX, int deltaY)
    Polygon的顶点沿x轴移动deltaX,沿y轴移动deltaY

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • npoints

      public int npoints
      点的总数。 npoints的值表示此Polygon中有效点的数量,可能少于xpointsypoints中的元素数量。此值可以为0。
      自:
      1.0
      参见:
    • xpoints

      public int[] xpoints
      X坐标数组。此数组中的元素数量可能多于此Polygon中的X坐标数量。额外的元素允许向此Polygon添加新点而无需重新创建此数组。 npoints的值等于此Polygon中有效点的数量。
      自:
      1.0
      参见:
    • ypoints

      public int[] ypoints
      Y坐标数组。此数组中的元素数量可能多于此Polygon中的Y坐标数量。额外的元素允许向此Polygon添加新点而无需重新创建此数组。 npoints的值等于此Polygon中有效点的数量。
      自:
      1.0
      参见:
    • bounds

      protected Rectangle bounds
      Polygon的边界。此值可以为null。
      自:
      1.0
      参见:
  • Constructor Details

    • Polygon

      public Polygon()
      创建一个空多边形。
      自:
      1.0
    • Polygon

      public Polygon(int[] xpoints, int[] ypoints, int npoints)
      根据指定参数构造并初始化一个Polygon
      参数:
      xpoints - X坐标数组
      ypoints - Y坐标数组
      npoints - Polygon中的总点数
      抛出:
      NegativeArraySizeException - 如果npoints的值为负数。
      IndexOutOfBoundsException - 如果npoints大于xpointsypoints的长度。
      NullPointerException - 如果xpointsypointsnull
      自:
      1.0
  • Method Details

    • reset

      public void reset()
      将此Polygon对象重置为空多边形。坐标数组及其中的数据保持不变,但点数重置为零,以标记旧顶点数据无效,并从头开始累积新顶点数据。所有与旧顶点相关的内部缓存数据都将被丢弃。请注意,由于重用了重置前的坐标数组,如果新多边形数据中的顶点数量明显小于重置前数据中的顶点数量,则创建新的空Polygon可能比重置当前对象更节省内存。
      自:
      1.4
      参见:
    • invalidate

      public void invalidate()
      使依赖于此Polygon的顶点坐标的任何内部缓存数据无效或刷新。在直接操作xpointsypoints数组的坐标后,应调用此方法,以避免getBoundscontains等方法产生不一致的结果,这些方法可能会缓存与早期计算有关的顶点坐标的数据。
      自:
      1.4
      参见:
    • translate

      public void translate(int deltaX, int deltaY)
      Polygon的顶点沿x轴移动deltaX,沿y轴移动deltaY
      参数:
      deltaX - 沿X轴平移的量
      deltaY - 沿Y轴平移的量
      自:
      1.1
    • addPoint

      public void addPoint(int x, int y)
      将指定坐标附加到此Polygon

      如果已执行计算此Polygon边界框的操作,例如getBoundscontains,则此方法会更新边界框。

      参数:
      x - 指定的X坐标
      y - 指定的Y坐标
      自:
      1.0
      参见:
    • getBounds

      public Rectangle getBounds()
      获取此Polygon的边界框。边界框是最小的Rectangle,其边与坐标空间的x和y轴平行,并且完全包含Polygon
      指定者:
      getBounds 在接口 Shape
      返回:
      定义此Polygon边界的Rectangle
      自:
      1.1
      参见:
    • getBoundingBox

      @Deprecated public Rectangle getBoundingBox()
      Deprecated.
      As of JDK version 1.1, replaced by getBounds().
      返回此Polygon的边界。
      返回:
      Polygon的边界。
      自:
      1.0
    • contains

      public boolean contains(Point p)
      确定指定的Point是否在此Polygon内部。
      参数:
      p - 要测试的指定Point
      返回:
      如果Polygon包含Point,则返回true;否则返回false
      自:
      1.0
      参见:
    • contains

      public boolean contains(int x, int y)
      确定指定的坐标是否在此Polygon内部。
      参数:
      x - 要测试的指定X坐标
      y - 要测试的指定Y坐标
      返回:
      如果此Polygon包含指定坐标(x,y),则返回true;否则返回false
      自:
      1.1
      参见:
    • inside

      @Deprecated public boolean inside(int x, int y)
      Deprecated.
      As of JDK version 1.1, replaced by contains(int, int).
      确定指定的坐标是否包含在此Polygon内部。
      参数:
      x - 要测试的指定X坐标
      y - 要测试的指定Y坐标
      返回:
      如果此Polygon包含指定坐标(x,y),则返回true;否则返回false
      自:
      1.0
      参见:
    • getBounds2D

      public Rectangle2D getBounds2D()
      返回Shape的高精度和更准确的边界框,比getBounds方法更精确。请注意,返回的Rectangle2D不一定是包围Shape的最小边界框,只是Shape完全位于指示的Rectangle2D内部。此方法返回的边界框通常比getBounds方法返回的边界框更紧凑,并且不会因溢出问题而失败,因为返回值可以是使用双精度值存储尺寸的Rectangle2D的实例。

      请注意,内部定义的定义可能导致这样的情况:在shape的定义轮廓上的点可能不被认为包含在返回的bounds对象中,但只有在这些点也不被认为包含在原始shape中的情况下才是如此。

      如果根据contains(point)方法,一个pointshape内部,那么根据boundscontains(point)方法,它必须在返回的Rectangle2D边界对象内部。具体来说:

      shape.contains(p)要求bounds.contains(p)

      如果一个point不在shape内部,那么它可能仍然包含在bounds对象中:

      bounds.contains(p)不意味着shape.contains(p)

      指定者:
      getBounds2D 在接口 Shape
      返回:
      一个Rectangle2D的实例,是Shape的高精度边界框。
      自:
      1.2
      参见:
    • contains

      public boolean contains(double x, double y)
      测试指定的坐标是否在Shape的边界内,如def_insideness的定义所述。
      指定者:
      contains 在接口 Shape
      参数:
      x - 要测试的指定X坐标
      y - 要测试的指定Y坐标
      返回:
      如果指定的坐标在Shape的边界内,则返回true;否则返回false
      自:
      1.2
    • contains

      public boolean contains(Point2D p)
      测试指定的Point2D是否在Shape的边界内,如内部定义所述。
      指定者:
      contains 在接口 Shape
      参数:
      p - 要测试的指定Point2D
      返回:
      如果指定的Point2DShape的边界内,则返回true;否则返回false
      自:
      1.2
    • intersects

      public boolean intersects(double x, double y, double w, double h)
      测试Shape的内部是否与指定的矩形区域的内部相交。如果任何点同时包含在Shape的内部和指定的矩形区域内部,则认为矩形区域与Shape相交。

      Shape.intersects()方法允许Shape实现在以下情况下保守地返回true

      • 矩形区域和Shape有很高的概率相交,但
      • 准确确定此交集的计算代价过高。
      这意味着对于某些Shapes,即使矩形区域与Shape不相交,此方法可能返回true。与大多数Shape对象相比,Area类执行更准确的几何相交计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      intersects 在接口 Shape
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回:
      如果Shape的内部和指定矩形区域的内部相交,或者两者高度可能相交且计算交集的代价过高,则返回true;否则返回false
      自:
      1.2
      参见:
    • intersects

      public boolean intersects(Rectangle2D r)
      测试Shape的内部是否与指定的Rectangle2D的内部相交。 Shape.intersects()方法允许Shape实现在以下情况下保守地返回true
      • 矩形区域和Shape有很高的概率相交,但
      • 准确确定此交集的计算代价过高。
      这意味着对于某些Shapes,即使Rectangle2DShape不相交,此方法可能返回true。与大多数Shape对象相比,Area类执行更准确的几何相交计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      intersects 在接口 Shape
      参数:
      r - 指定的Rectangle2D
      返回:
      如果Shape的内部和指定的Rectangle2D的内部相交,或者两者高度可能相交且计算交集的代价过高,则返回true;否则返回false
      自:
      1.2
      参见:
    • contains

      public boolean contains(double x, double y, double w, double h)
      测试Shape的内部是否完全包含指定的矩形区域。所有位于矩形区域内部的坐标必须位于Shape内部,整个矩形区域才被视为包含在Shape内部。

      Shape.contains()方法允许Shape实现在以下情况下保守地返回false

      • intersect方法返回true
      • 确定Shape是否完全包含矩形区域的计算代价过高。
      这意味着对于某些Shapes,即使intersect方法返回true,此方法可能返回false。与大多数Shape对象相比,Area类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      contains 在接口 Shape
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回值:
      如果Shape的内部完全包含指定的矩形区域,则返回true; 否则返回false,或者如果Shape包含矩形区域且intersects方法返回true,并且包含计算过于昂贵,则返回false
      自版本:
      1.2
      参见:
    • contains

      public boolean contains(Rectangle2D r)
      测试Shape的内部是否完全包含指定的Rectangle2D。当intersect方法返回true且计算确定Shape是否完全包含Rectangle2D的代价过高时,Shape.contains()方法允许Shape实现保守地返回false。这意味着对于某些Shapes,即使Shape包含Rectangle2D,该方法可能返回false。与大多数Shape对象相比,Area类执行更精确的几何计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      contains 在接口 Shape
      参数:
      r - 指定的Rectangle2D
      返回值:
      如果Shape的内部完全包含Rectangle2D,则返回true; 否则返回false,或者如果Shape包含Rectangle2Dintersects方法返回true,并且包含计算过于昂贵,则返回false
      自版本:
      1.2
      参见:
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at)
      返回一个迭代器对象,该对象沿着此Polygon的边界迭代,并提供对此Polygon轮廓的几何信息的访问。可以指定一个可选的AffineTransform,以便在迭代中返回的坐标进行相应的转换。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的要应用于迭代中返回的坐标的AffineTransform,如果希望使用未转换的坐标,则为null
      返回值:
      一个提供对此Polygon的几何信息的PathIterator对象。
      自版本:
      1.2
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at, double flatness)
      返回一个迭代器对象,该对象沿着Shape的边界迭代,并提供对Shape轮廓的几何信息的访问。迭代器仅返回SEG_MOVETO、SEG_LINETO和SEG_CLOSE点类型。由于多边形已经是平面的,因此忽略flatness参数。可以指定一个可选的AffineTransform,在这种情况下,迭代中返回的坐标将相应地进行转换。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的要应用于迭代中返回的坐标的AffineTransform,如果希望使用未转换的坐标,则为null
      flatness - 给定曲线的控制点在共线之前可以变化的最大量,以便将一个细分曲线替换为连接端点的直线。由于多边形已经是平面的,因此忽略flatness参数。
      返回值:
      一个提供对Shape对象几何信息的PathIterator对象。
      自版本:
      1.2