- java.lang.Object
-
- java.awt.geom.Area
-
public class Area extends Object implements Shape, Cloneable
Area
对象存储和操作二维空间的封闭区域的与分辨率无关的描述。Area
对象可以转换,并且可以在与其他Area
对象组合时执行各种构造区域几何(CAG)操作。 该CAG操作包括区域addition
,subtraction
,intersection
和exclusive or
。 有关各种操作的示例,请参阅链接的方法文档。Area
类实现了Shape
接口,并为其所有命中测试和路径迭代工具提供了全面支持,但Area
在许多方面比通用路径更具体:- 仅存储封闭路径和子路径。
Area
闭合路径构造的Area
对象在构造期间隐式关闭,就好像这些路径已由Graphics2D.fill
方法填充。 - 各个存储的子路径的内部都是非空的且不重叠的。 在构造期间将路径分解成单独的组件非重叠部分,丢弃路径的空片段,然后通过所有后续CAG操作维护这些非空和非重叠属性。 不同组件子路径的轮廓可以彼此接触,只要它们不交叉以使它们的封闭区域重叠。
- 描述
Area
轮廓的路径的几何形状类似于构造它的路径,因为它描述了相同的封闭二维区域,但可以使用完全不同的类型和路径段的顺序来实现。
Area
时并不总是显而易见的有趣问题包括:-
Area
闭合(打开)Shape
创建Shape
导致Area
对象中的闭合轮廓。 - 从
Shape
创建Area
,其中不包含任何区域(即使“关闭”)会产生空Area
。 此问题的一个常见示例是,从一行生成Area
将为空,因为该行不包含任何区域。 空的Area
将在其PathIterator
对象中不迭代任何几何体。 - 自交叉
Shape
可以分成两个(或更多个)子路径,每个子路径包围原始路径的一个非交叉部分。 - 即使原始轮廓简单明了,
Area
也可以采用更多路径段来描述相同的几何形状。Area
类必须在路径上执行的分析可能不会反映出与人类感知的“简单和明显”相同的概念。
- 从以下版本开始:
- 1.2
- 仅存储封闭路径和子路径。
-
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 void
add(Area rhs)
添加指定的形状Area
这个形状Area
。Object
clone()
返回此Area
对象的精确副本。boolean
contains(double x, double y)
测试指定的坐标是否在Shape
的边界内,如 definition of insideness所述 。boolean
contains(double x, double y, double w, double h)
测试Shape
的内部Shape
完全包含指定的矩形区域。boolean
contains(Point2D p)
测试指定Point2D
是的边界内Shape
,如所描述的definition of insideness 。boolean
contains(Rectangle2D r)
测试Shape
的内部Shape
完全包含指定的Rectangle2D
。Area
createTransformedArea(AffineTransform t)
创建一个新的Area
对象,该对象包含与由指定的AffineTransform
转换的Area
相同的几何。boolean
equals(Area other)
测试两个Area
对象的几何是否相等。void
exclusiveOr(Area rhs)
将此Area
的形状设置为其当前形状和指定的Area
的形状的组合区域,减去它们的交点。Rectangle
getBounds()
返回边界Rectangle
完全包围此Area
。Rectangle2D
getBounds2D()
返回一个高精度的边界Rectangle2D
完全包围此Area
。PathIterator
getPathIterator(AffineTransform at)
为此Area
对象的轮廓创建一个PathIterator
。PathIterator
getPathIterator(AffineTransform at, double flatness)
创建PathIterator
此的扁平轮廓Area
对象。void
intersect(Area rhs)
将此Area
的形状设置为其当前形状与指定的Area
的形状的Area
。boolean
intersects(double x, double y, double w, double h)
测试Shape
的内部是否与指定矩形区域的内部相交。boolean
intersects(Rectangle2D r)
测试Shape
的内部是否与指定的Rectangle2D
的内部相交。boolean
isEmpty()
测试此Area
对象是否包含任何区域。boolean
isPolygonal()
测试此Area
是否完全由直边多边形几何体组成。boolean
isRectangular()
测试这个Area
是否为矩形。boolean
isSingular()
测试此Area
是否由单个关闭的子路径组成。void
reset()
从此Area
删除所有几何体并将其还原到空白区域。void
subtract(Area rhs)
减去指定的形状Area
从这个形状Area
。void
transform(AffineTransform t)
使用指定的AffineTransform
转换此Area
的几何图形 。
-
-
-
构造方法详细信息
-
Area
public Area()
默认构造函数,它创建一个空区域。- 从以下版本开始:
- 1.2
-
Area
public Area(Shape s)
- 参数
-
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
以及指定的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
独家Area
。 - 异常
-
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()
- 结果
-
true
如果Area
由单个基本几何体组成; 否则为false
。 - 从以下版本开始:
- 1.2
-
getBounds2D
public Rectangle2D getBounds2D()
返回一个高精度的边界Rectangle2D
完全包围此Area
。Area类将尝试返回Shape可能的最紧密的边界框。 边界框不会被填充以包含Shape轮廓中的曲线控制点,但应紧密适合轮廓本身的实际几何形状。
- Specified by:
-
getBounds2D
在界面Shape
- 结果
-
Rectangle2D
的边界Area
。 - 从以下版本开始:
- 1.2
- 另请参见:
-
Shape.getBounds()
-
getBounds
public Rectangle getBounds()
返回边界Rectangle
完全包围此Area
。Area类将尝试返回Shape可能的最紧密的边界框。 边界框不会被填充以包含Shape轮廓中的曲线控制点,但应紧密适合轮廓本身的实际几何形状。 由于返回的对象表示带有整数的边界框,因此边界框只能与包含Shape几何体的最近整数坐标一样紧密。
- Specified by:
-
getBounds
接口Shape
- 结果
-
Rectangle
为Area
。 - 从以下版本开始:
- 1.2
- 另请参见:
-
Shape.getBounds2D()
-
clone
public Object clone()
返回此Area
对象的精确副本。
-
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所述 。
-
contains
public boolean contains(Point2D p)
测试指定Point2D
是的边界内Shape
,如所描述的definition of insideness 。
-
contains
public boolean contains(double x, double y, double w, double h)
测试Shape
的内部Shape
完全包含指定的矩形区域。 摆在矩形区域内必须将内在于所有的坐标Shape
整个矩形区域被认为包含内Shape
。Shape.contains()
方法允许Shape
实现在Shape
情况下保守地返回false
:-
intersect
方法返回true
和 - 用于确定
Shape
是否完全包含矩形区域的计算非常昂贵。
Shapes
即使Shape
包含矩形区域,此方法也可能返回false
。Area
类比大多数Shape
对象执行更精确的几何计算,因此如果需要更精确的答案,则可以使用它。- Specified by:
-
contains
接口Shape
- 参数
-
x
- 指定矩形区域左上角的X坐标 -
y
- 指定矩形区域左上角的Y坐标 -
w
- 指定矩形区域的宽度 -
h
- 指定矩形区域的高度 - 结果
-
true
如果内部Shape
完全包含指定矩形区域;false
否则或者,如果Shape
包含矩形区域并且intersects
方法返回true
并且包含计算将太昂贵而无法执行。 - 从以下版本开始:
- 1.2
- 另请参见:
-
Area
,Shape.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
包含Rectangle2D
和intersects
方法返回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
实施在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
:-
Rectangle2D
与Shape
交叉的概率很高,但是 - 精确确定这个交叉点的计算非常昂贵。
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)
创建PathIterator
此的扁平轮廓Area
对象。 迭代器仅返回由SEG_MOVETO,SEG_LINETO和SEG_CLOSE点类型表示的未弯曲路径段。 此Area
对象未更改。- Specified by:
-
getPathIterator
接口Shape
- 参数
-
at
- 可选的AffineTransform
应用于迭代中返回的坐标,如果需要未转换的坐标则null
-
flatness
- 在将细分曲线替换为连接端点的直线之前,给定曲线的控制点的最大量可以flatness
线变化 - 结果
-
PathIterator
对象,返回此Area
轮廓的几何,一次一个段。 - 从以下版本开始:
- 1.2
-
-