Module  java.desktop
软件包  java.awt.geom

Class Area

  • All Implemented Interfaces:
    ShapeCloneable


    public class Area
    extends Object
    implements Shape, Cloneable
    Area对象存储和操纵对二维空间的封闭区域的分辨率独立描述。 Area对象可以被转化,并且当与其它组合可以执行各种建设性区域几何形状(CAG)操作Area对象。 该CAG操作包括区域additionsubtractionintersection ,并exclusive or 有关各种操作的示例,请参阅链接方法文档。

    Area类实现了Shape接口,并提供了对所有命中测试和路径迭代功能的全面支持,但是Area在多种方式中比通用路径更具体:

    • 只存储封闭的路径和子路径。 Area从未封闭路径构造的对象在构造过程中隐式关闭,就好像这些路径已经被Graphics2D.fill方法填充了Graphics2D.fill
    • 各个存储的子路径的内部都是非空的且不重叠的。 路径在构建过程中被分解为单独的组件非重叠部分,路径的空块被丢弃,然后通过所有后续CAG操作来维护这些非空和不重叠的属性。 不同组件子路径的轮廓可以互相接触,只要它们不交叉,使得它们的封闭区域重叠。
    • 描述Area的轮廓的路径的几何形状类似于构造它的路径,只是它描述了相同的封闭的二维区域,但是可能使用完全不同的类型和路径段的顺序来实现。
    使用Area时并不总是很明显的有趣问题包括:
    • Area关闭(打开) Shape创建Shape导致Area对象中的封闭轮廓。
    • Shape创建一个Area ,它不包含任何区域(即使当“关闭”)生成一个空的Area 这个问题的一个常见的例子是,从行生成Area将是空的,因为该行不包含任何区域。 空的Area将在其PathIterator对象中不迭代几何。
    • 自相交Shape可以被分成两个(或更多个)子路径,每个子路径包围原始路径的不相交部分之一。
    • 即使原始轮廓简单明了, Area也可能需要更多的路径段来描述相同的几何形状。 Area课程必须在道路上进行的分析可能不会反映出人类感觉到的“简单明了”的概念。
    从以下版本开始:
    1.2
    • 构造方法详细信息

      • Area

        public Area​()
        创建空区域的默认构造函数。
        从以下版本开始:
        1.2
      • Area

        public Area​(Shape s)
        Area类从指定的Shape对象创建区域几何。 如果Shape尚未关闭,几何体将被明确关闭。 Shape的几何形状指定的填充规则(偶数或绕组)用于确定产生的封闭区域。
        参数
        s - 建造该地区的 Shape
        异常
        NullPointerException - 如果 s为空
        从以下版本开始:
        1.2
    • 方法详细信息

      • add

        public void add​(Area rhs)
        添加指定的形状Area这种形状Area 由此形成的Area将包含两种形状的联合,或包含在此或指定的Area所有区域。
          // Example:
             Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
             Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
             a1.add(a2);
        
                a1(before)     +         a2         =     a1(after)
        
             ################     ################     ################
             ##############         ##############     ################
             ############             ############     ################
             ##########                 ##########     ################
             ########                     ########     ################
             ######                         ######     ######    ######
             ####                             ####     ####        ####
             ##                                 ##     ##            ## 
        参数
        rhs - 要添加到当前形状的 Area
        异常
        NullPointerException - 如果 rhs为空
        从以下版本开始:
        1.2
      • subtract

        public void subtract​(Area rhs)
        Area的形状中减去指定的形状Area 由此形成的Area将包含仅在此Area而不是在指定的Area中的Area
          // Example:
             Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
             Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
             a1.subtract(a2);
        
                a1(before)     -         a2         =     a1(after)
        
             ################     ################
             ##############         ##############     ##
             ############             ############     ####
             ##########                 ##########     ######
             ########                     ########     ########
             ######                         ######     ######
             ####                             ####     ####
             ##                                 ##     ## 
        参数
        rhs - 要从当前形状中减去的 Area
        异常
        NullPointerException - 如果 rhs为空
        从以下版本开始:
        1.2
      • intersect

        public void intersect​(Area rhs)
        将此Area的形状设置为其当前形状和指定的形状Area 由此形成的Area将仅包含Area和指定的Area中包含的区域。
          // Example:
             Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
             Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
             a1.intersect(a2);
        
              a1(before)   intersect     a2         =     a1(after)
        
             ################     ################     ################
             ##############         ##############       ############
             ############             ############         ########
             ##########                 ##########           ####
             ########                     ########
             ######                         ######
             ####                             ####
             ##                                 ## 
        参数
        rhs -在 Area与此相交 Area
        异常
        NullPointerException - 如果 rhs为空
        从以下版本开始:
        1.2
      • exclusiveOr

        public void exclusiveOr​(Area rhs)
        设置此的形状Area是其当前形状的组合区域和指定的形状Area ,减去其交集。 由此形成的Area将仅包含Area或指定的Area中包含的区域,但不包括在两者中。
          // Example:
             Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
             Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
             a1.exclusiveOr(a2);
        
                a1(before)    xor        a2         =     a1(after)
        
             ################     ################
             ##############         ##############     ##            ##
             ############             ############     ####        ####
             ##########                 ##########     ######    ######
             ########                     ########     ################
             ######                         ######     ######    ######
             ####                             ####     ####        ####
             ##                                 ##     ##            ## 
        参数
        rhs - Area要与这个 Area独家ORed。
        异常
        NullPointerException - 如果 rhs为空
        从以下版本开始:
        1.2
      • reset

        public void reset​()
        从这个 Area删除所有几何图形,并将其还原到一个空白区域。
        从以下版本开始:
        1.2
      • isEmpty

        public boolean isEmpty​()
        测试此 Area对象是否包围任何区域。
        结果
        true如果此Area对象表示空白区域; 否则为false
        从以下版本开始:
        1.2
      • isPolygonal

        public boolean isPolygonal​()
        测试这个 Area是否完全由直边多边形几何组成。
        结果
        true如果这个Area的几何完全由线段组成; 否则为false
        从以下版本开始:
        1.2
      • isRectangular

        public boolean isRectangular​()
        测试这个 Area是否是矩形的。
        结果
        true如果这个Area的几何形状是矩形的; 否则为false
        从以下版本开始:
        1.2
      • isSingular

        public boolean isSingular​()
        测试这个Area是否由一个封闭的子路径组成。 此方法返回true如果路径中包含0或1的子路径,或false如果路径中包含多个子路径1。 这些子路径由路径中出现的SEG_MOVETO段计数。
        结果
        true如果Area由单个基本几何构成; 否则为false
        从以下版本开始:
        1.2
      • getBounds2D

        public Rectangle2D getBounds2D​()
        返回一个高精度的边界Rectangle2D完全包围此Area

        Area类将尝试返回Shape的最紧密的边界框。 边框不会被填充以包括Shape的轮廓中的曲线的控制点,但应紧密地适合轮廓本身的实际几何。

        Specified by:
        getBounds2D在接口 Shape
        结果
        边界 Rectangle2DArea
        从以下版本开始:
        1.2
        另请参见:
        Shape.getBounds()
      • getBounds

        public Rectangle getBounds​()
        返回边界Rectangle完全包围此Area

        Area类将尝试返回Shape的最紧密的边界框。 边框不会被填充以包括Shape的轮廓中的曲线的控制点,但应紧密地适合轮廓本身的实际几何。 由于返回的对象表示具有整数的边界框,边界框只能与包含Shape几何的最接近的整数坐标一样紧。

        Specified by:
        getBounds在接口 Shape
        结果
        边界 RectangleArea
        从以下版本开始:
        1.2
        另请参见:
        Shape.getBounds2D()
      • clone

        public Object clone​()
        返回此 Area对象的精确副本。
        重写:
        cloneObject
        结果
        创建克隆对象
        从以下版本开始:
        1.2
        另请参见:
        Cloneable
      • equals

        public boolean equals​(Area other)
        测试两个Area对象的几何是否相等。 如果参数为null,此方法将返回false。
        参数
        other -在 Area被比作此 Area
        结果
        true如果两个几何相等; 否则为false
        从以下版本开始:
        1.2
      • transform

        public void transform​(AffineTransform t)
        使用指定的AffineTransform转换Area的几何。 几何被转换到位,永久地改变由该对象定义的封闭区域。
        参数
        t - 用于转换区域的转换
        异常
        NullPointerException - 如果 t为空
        从以下版本开始:
        1.2
      • createTransformedArea

        public Area createTransformedArea​(AffineTransform t)
        创建一个新的Area对象,其中包含与指定的AffineTransform转换的Area相同的几何。 这个Area对象没有变化。
        参数
        t - 指定的 AffineTransform用于转换新的 Area
        结果
        一个新的 Area对象,表示转换的几何。
        异常
        NullPointerException - 如果 t为空
        从以下版本开始:
        1.2
      • contains

        public boolean contains​(double x,
                                double y)
        测试指定的坐标是否在 Shape的边界内,如 definition of insideness所述
        Specified by:
        contains在接口 Shape
        参数
        x - 要测试的指定X坐标
        y - 要测试的指定Y坐标
        结果
        true如果指定的坐标在Shape边界内; 否则为false
        从以下版本开始:
        1.2
      • contains

        public boolean contains​(Point2D p)
        测试指定Point2D是的边界内Shape ,如所描述的definition of insideness
        Specified by:
        contains在接口 Shape
        参数
        p - 要测试的指定 Point2D
        结果
        true如果指定Point2D是的边界内Shape ; 否则为false
        从以下版本开始:
        1.2
      • contains

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

        Shape.contains()方法允许Shape实现保守返回false时:

        • intersect方法返回true
        • 确定Shape是否完全包含矩形区域的计算是非常昂贵的。
        这意味着对于Shapes这个方法可能会返回false即使Shape包含矩形区域。 Area类比大多数Shape对象执行更准确的几何计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        contains在接口 Shape
        参数
        x - 指定矩形区域左上角的X坐标
        y - 指定矩形区域左上角的Y坐标
        w - 指定矩形区域的宽度
        h - 指定矩形区域的高度
        结果
        true如果内部的Shape完全包含指定的矩形区域; false否则,或者如果Shape包含矩形区域,并且intersects方法返回true并且遏制计算将太昂贵执行。
        从以下版本开始:
        1.2
        另请参见:
        AreaShape.intersects(double, double, double, double)
      • contains

        public boolean contains​(Rectangle2D r)
        测试Shape的内部Shape全部包含指定的Rectangle2D Shape.contains()方法允许Shape实现保守返回false当:
        • intersect方法返回true
        • 确定Shape是否完全包含Rectangle2D是非常昂贵的。
        这意味着对于一些Shapes这个方法可能会返回false即使Shape包含Rectangle2D Area类比大多数Shape对象执行更准确的几何计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        contains在接口 Shape
        参数
        r - 指定的 Rectangle2D
        结果
        true如果内部的Shape完全包含Rectangle2D ; false否则或如果Shape包含Rectangle2Dintersects方法返回true并且遏制计算将太昂贵执行。
        从以下版本开始:
        1.2
        另请参见:
        Shape.contains(double, double, double, double)
      • intersects

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

        Shape.intersects()方法允许Shape实现保守返回true时:

        • 矩形区域与Shape相交的概率很高,但是
        • 准确地确定这个交叉点的计算是非常昂贵的。
        这意味着对于Shapes这个方法可能会返回true即使矩形区域不与Shape相交。 Area类比大多数Shape对象执行几何交集的更精确的计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        intersects在接口 Shape
        参数
        x - 指定矩形区域左上角的X坐标
        y - 指定矩形区域左上角的Y坐标
        w - 指定矩形区域的宽度
        h - 指定矩形区域的高度
        结果
        true如果Shape的内部和矩形区域的内部相交,或者很可能相交,并且交叉点计算将太昂贵,不能执行; 否则为false
        从以下版本开始:
        1.2
        另请参见:
        Area
      • intersects

        public boolean intersects​(Rectangle2D r)
        测试Shape的内部是否与指定的内部相交Rectangle2D Shape.intersects()方法允许Shape实现保守返回true时:
        • Rectangle2DShape相交的概率很高,但是
        • 准确地确定这个交叉点的计算是非常昂贵的。
        这意味着对于某些Shapes这种方法也可能返回true即使Rectangle2D不相交Shape Area类比大多数Shape对象执行几何交叉的更精确的计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        intersects在接口 Shape
        参数
        r - 指定的 Rectangle2D
        结果
        true如果Shape的内部和指定的内部Rectangle2D相交,或者两者都很可能相交,并且交叉点计算将太昂贵执行; 否则为false
        从以下版本开始:
        1.2
        另请参见:
        Shape.intersects(double, double, double, double)
      • getPathIterator

        public PathIterator getPathIterator​(AffineTransform at)
        为此Area对象的轮廓创建一个PathIterator Area对象不变。
        Specified by:
        getPathIterator在接口 Shape
        参数
        at - 要在迭代中返回时应用于坐标的可选 AffineTransform ,如果需要未转换的坐标, null
        结果
        PathIterator对象返回此 Area的轮廓的几何,一次一个段。
        从以下版本开始:
        1.2
      • getPathIterator

        public PathIterator getPathIterator​(AffineTransform at,
                                            double flatness)
        为此Area对象的扁平轮廓创建一个PathIterator 由SEG_MOVETO,SEG_LINETO和SEG_CLOSE点类型表示的未曲线的路径段仅由迭代器返回。 这个Area对象没有变化。
        Specified by:
        getPathIterator在接口 Shape
        参数
        at - 要在迭代中返回时应用于坐标的可选 AffineTransform ,如果需要未转换的坐标, null
        flatness - 给定曲线的控制点的最大量可以在共线之前变化,而细分曲线由连接终点的直线代替
        结果
        PathIterator对象返回此 Area的轮廓的几何,一次一个段。
        从以下版本开始:
        1.2