java.lang.Object
java.awt.geom.Area
一个
Area
对象存储和操作一个二维空间中封闭区域的与分辨率无关的描述。 Area
对象可以被转换,并且可以在与其他Area
对象组合时执行各种构造性区域几何(CAG)操作。这些CAG操作包括区域添加
、减法
、交集
和异或
。请参阅链接的方法文档,了解各种操作的示例。
Area
类实现了Shape
接口,并为其所有的命中测试和路径迭代功能提供全面支持,但Area
比一般路径更具体的地方有:
- 只存储闭合路径和子路径。从未闭合路径构造的
Area
对象在构造过程中会被隐式地关闭,就好像这些路径已被Graphics2D.fill
方法填充。 - 存储的各个子路径的内部都是非空且不重叠的。在构造过程中,路径会被分解为单独的非重叠部分,空路径将被丢弃,然后这些非空且不重叠的属性将通过所有后续的CAG操作保持不变。不同组件子路径的轮廓可能相互接触,只要它们不相交,使得它们的封闭区域重叠。
- 描述
Area
轮廓的路径的几何形状只在于它描述了相同的封闭二维区域,但可能使用完全不同类型和顺序的路径段来实现。
Area
时不总是明显的有趣问题包括:
- 从未闭合(开放)
Shape
创建Area
会在Area
对象中产生一个闭合轮廓。 - 从不包含任何区域的
Shape
(即使“闭合”)创建Area
会产生一个空的Area
。这个问题的一个常见例子是,从一条线创建Area
将是空的,因为该线不包含任何区域。空的Area
在其PathIterator
对象中不会迭代任何几何形状。 - 自相交的
Shape
可能会被分割为两个(或更多)子路径,每个子路径封闭原始路径的一个非相交部分。 - 即使原始轮廓简单明了,一个
Area
可能需要更多的路径段来描述相同的几何形状。Area
类必须对路径执行的分析可能不会反映出与人类感知的“简单明了”相同的概念。
- 自从:
- 1.2
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
将指定Area
的形状添加到此Area
的形状中。clone()
返回此Area
对象的精确副本。boolean
contains
(double x, double y) 测试指定坐标是否在Shape
的边界内,如内部定义
所述。boolean
contains
(double x, double y, double w, double h) 测试Shape
的内部是否完全包含指定的矩形区域。boolean
boolean
测试Shape
的内部是否完全包含指定的Rectangle2D
。创建一个包含与指定AffineTransform
转换后的此Area
相同几何的新Area
对象。boolean
测试两个Area
对象的几何是否相等。void
exclusiveOr
(Area rhs) 将此Area
的形状设置为其当前形状和指定Area
的形状的组合区域,减去它们的交集。返回完全包围此Area
的边界Rectangle
。返回完全包围此Area
的高精度边界Rectangle2D
。为此Area
对象的轮廓创建一个PathIterator
。getPathIterator
(AffineTransform at, double flatness) 为此Area
对象的平坦轮廓创建一个PathIterator
。void
将此Area
的形状设置为其当前形状和指定Area
的形状的交集。boolean
intersects
(double x, double y, double w, double h) 测试Shape
的内部是否与指定的矩形区域的内部相交。boolean
测试Shape
的内部是否与指定的Rectangle2D
的内部相交。boolean
isEmpty()
测试此Area
对象是否包含任何区域。boolean
测试此Area
是否完全由直边多边形几何组成。boolean
测试此Area
是否为矩形形状。boolean
测试此Area
是否由单个闭合子路径组成。void
reset()
从此Area
中删除所有几何,并将其恢复为空区域。void
从此Area
的形状中减去指定Area
的形状。void
使用指定的AffineTransform
转换此Area
的几何。
-
Constructor Details
-
Area
public Area()创建一个空区域的默认构造函数。- 自从:
- 1.2
-
Area
- 参数:
-
s
- 用于构造区域的Shape
- 抛出:
-
NullPointerException
- 如果s
为null - 自从:
- 1.2
-
-
Method Details
-
add
将指定Area
的形状添加到此Area
的形状中。此Area
的结果形状将包括两者的并集,或者包含在此Area
或指定Area
中的所有区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.add(a2); a1(之前) + a2 = a1(之后) ################ ################ ################ ############## ############## ################ ############ ############ ################ ########## ########## ################ ######## ######## ################ ###### ###### ###### ###### #### #### #### #### ## ## ## ##
- 参数:
-
rhs
- 要添加到当前形状的Area
- 抛出:
-
NullPointerException
- 如果rhs
为null - 自从:
- 1.2
-
subtract
从此Area
的形状中减去指定Area
的形状。此Area
的结果形状将包括仅包含在此Area
中而不在指定Area
中的区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.subtract(a2); a1(之前) - a2 = a1(之后) ################ ################ ############## ############## ## ############ ############ #### ########## ########## ###### ######## ######## ######## ###### ###### ###### #### #### #### ## ## ##
- 参数:
-
rhs
- 要从当前形状中减去的Area
- 抛出:
-
NullPointerException
- 如果rhs
为null - 自从:
- 1.2
-
intersect
将此Area
的形状设置为其当前形状和指定Area
的形状的交集。此Area
的结果形状将仅包含同时包含在此Area
和指定Area
中的区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.intersect(a2); a1(之前) 交集 a2 = a1(之后) ################ ################ ################ ############## ############## ############ ############ ############ ######## ########## ########## #### ######## ######## ###### ###### #### #### ## ##
- 参数:
-
rhs
- 要与此Area
求交的Area
- 抛出:
-
NullPointerException
- 如果rhs
为null - 自1.2版本起:
- 1.2
-
exclusiveOr
将此Area
的形状设置为其当前形状和指定Area
的形状的组合区域,减去它们的交集。此Area
的结果形状将仅包括仅包含在此Area
或指定Area
中的区域,但不包含在两者中都包含的区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.exclusiveOr(a2); a1(之前) 异或 a2 = a1(之后) ################ ################ ############## ############## ## ## ############ ############ #### #### ########## ########## ###### ###### ######## ######## ################ ###### ###### ###### ###### #### #### #### #### ## ## ## ##
- 参数:
-
rhs
- 要与此Area
进行异或操作的Area
- 抛出:
-
NullPointerException
- 如果rhs
为null - 自1.2版本起:
- 1.2
-
reset
public void reset()从此Area
中删除所有几何图形,并将其恢复为空区域。- 自1.2版本起:
- 1.2
-
isEmpty
public boolean isEmpty()测试此Area
对象是否包含任何区域。- 返回:
-
如果此
Area
对象表示空区域,则返回true
; 否则返回false
。 - 自1.2版本起:
- 1.2
-
isPolygonal
public boolean isPolygonal()测试此Area
是否完全由直线边缘多边形几何图形组成。- 返回:
-
如果此
Area
的几何图形完全由线段组成,则返回true
; 否则返回false
。 - 自1.2版本起:
- 1.2
-
isRectangular
public boolean isRectangular()测试此Area
的形状是否为矩形。- 返回:
-
如果此
Area
的几何图形为矩形,则返回true
; 否则返回false
。 - 自1.2版本起:
- 1.2
-
isSingular
public boolean isSingular()测试此Area
是否由单个封闭子路径组成。如果路径包含0个或1个子路径,则此方法返回true
,如果路径包含多于1个子路径,则返回false
。子路径通过路径中出现的SEG_MOVETO
线段的数量来计算。- 返回:
-
如果
Area
由单个基本几何图形组成,则返回true
; 否则返回false
。 - 自1.2版本起:
- 1.2
-
getBounds2D
- 指定者:
-
getBounds2D
在接口Shape
- 返回:
-
Area
的边界Rectangle2D
。 - 自1.2版本起:
- 1.2
- 参见:
-
getBounds
返回完全包围此Area
的边界Rectangle
。Area类将尝试返回Shape的最紧密边界框。边界框不会填充以包括形状轮廓中曲线的控制点,但应紧密适合轮廓本身的实际几何形状。由于返回的对象用整数表示边界框,因此边界框只能尽可能紧密地包围几何形状的最近整数坐标。
-
clone
返回此Area
对象的精确副本。 -
equals
测试两个Area
对象的几何图形是否相等。如果参数为null,则此方法将返回false。- 参数:
-
other
- 要与此Area
比较的Area
- 返回:
-
如果两个几何图形相等,则返回
true
; 否则返回false
。 - 自1.2版本起:
- 1.2
-
transform
使用指定的AffineTransform
转换此Area
的几何图形。几何图形将就地转换,从而永久更改此对象定义的封闭区域。- 参数:
-
t
- 用于转换区域的变换 - 抛出:
-
NullPointerException
- 如果t
为null - 自1.2版本起:
- 1.2
-
createTransformedArea
创建一个包含与此Area
相同几何图形的新Area
对象,该Area
对象未更改。- 参数:
-
t
- 用于转换新Area
的指定AffineTransform
- 返回:
-
表示转换后几何图形的新
Area
对象。 - 抛出:
-
NullPointerException
- 如果t
为null - 自1.2版本起:
- 1.2
-
contains
public boolean contains(double x, double y) 测试指定坐标是否在Shape
的边界内,如内部定义所述。 -
contains
-
contains
public boolean contains(double x, double y, double w, double h) 测试Shape
的内部是否完全包含指定的矩形区域。所有位于矩形区域内的坐标必须位于整个矩形区域内的Shape
中,才能认为整个矩形区域包含在Shape
内部。Shape.contains()
方法允许Shape
实现在以下情况下保守地返回false
:intersect
方法返回true
且- 用于确定
Shape
是否完全包含矩形区域的计算代价过高。
Shapes
,即使Shape
包含矩形区域,此方法可能返回false
。与大多数Shape
对象相比,Area
类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用它。 -
contains
测试Shape
的内部是否完全包含指定的Rectangle2D
。当:intersect
方法返回true
且计算确定Shape
是否完全包含Rectangle2D
的代价过高时,Shape.contains()
方法允许Shape
实现保守地返回false
。- 这意味着对于某些
Shapes
,即使Shape
包含Rectangle2D
,该方法可能返回false
。比Shape
对象更准确地执行几何计算的Area
类,因此如果需要更精确的答案,则可以使用它。
- 这意味着对于某些
-
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
- 指定矩形区域的高度 - 返回值:
-
true
如果Shape
的内部与矩形区域的内部相交,或者两者高度可能相交且交集计算过于昂贵;否则返回false
。 - 自版本:
- 1.2
- 参见:
- 矩形区域和
-
intersects
测试Shape
的内部是否与指定的Rectangle2D
的内部相交。当:Rectangle2D
和Shape
有很高的概率相交,但准确确定此交集的计算代价过高时,Shape.intersects()
方法允许Shape
实现保守地返回true
。- 这意味着对于某些
Shapes
,即使Rectangle2D
与Shape
不相交,该方法可能返回true
。比Shape
对象更准确地执行几何交集计算的Area
类,因此如果需要更精确的答案,则可以使用它。
- 指定者:
-
intersects
在接口Shape
中 - 参数:
-
r
- 指定的Rectangle2D
- 返回值:
-
true
如果Shape
的内部与指定的Rectangle2D
的内部相交,或者两者高度可能相交且交集计算过于昂贵;否则返回false
。 - 自版本:
- 1.2
- 参见:
- 这意味着对于某些
-
getPathIterator
为此Area
对象的轮廓创建一个PathIterator
。此Area
对象保持不变。- 指定者:
-
getPathIterator
在接口Shape
中 - 参数:
-
at
- 可选的AffineTransform
,用于在迭代返回坐标时应用,如果需要未转换的坐标,则为null
- 返回值:
-
返回以一段一段方式返回此
Area
轮廓的几何的PathIterator
对象。 - 自版本:
- 1.2
-
getPathIterator
为此Area
对象的平坦轮廓创建一个PathIterator
。迭代器仅返回由SEG_MOVETO、SEG_LINETO和SEG_CLOSE点类型表示的非曲线路径段。此Area
对象保持不变。- 指定者:
-
getPathIterator
在接口Shape
中 - 参数:
-
at
- 可选的AffineTransform
,用于在迭代返回坐标时应用,如果需要未转换的坐标,则为null
-
flatness
- 给定曲线的控制点可以在变成共线之前变化的最大量,此时通过连接端点替换子曲线 - 返回值:
-
返回以一段一段方式返回此
Area
轮廓的几何的PathIterator
对象。 - 自版本:
- 1.2
-