- java.lang.Object
-
- java.awt.geom.Area
-
public class Area extends Object implements Shape, Cloneable
Area
对象存储和操纵对二维空间的封闭区域的分辨率独立描述。Area
对象可以被转化,并且当与其它组合可以执行各种建设性区域几何形状(CAG)操作Area
对象。 该CAG操作包括区域addition
,subtraction
,intersection
,并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
- 只存储封闭的路径和子路径。
-
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
为这个Area
对象的扁平轮廓创建一个PathIterator
。void
intersect(Area rhs)
将这个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
中包含的区域。// 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()
- 结果
-
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
实现保守返回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
- 另请参见:
-
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
实现保守返回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)
为此Area
对象的扁平轮廓创建一个PathIterator
。 由SEG_MOVETO,SEG_LINETO和SEG_CLOSE点类型表示的未曲线的路径段仅由迭代器返回。 这个Area
对象没有变化。- Specified by:
-
getPathIterator
在接口Shape
- 参数
-
at
- 要在迭代中返回时应用于坐标的可选AffineTransform
,如果需要未转换的坐标,null
-
flatness
- 给定曲线的控制点的最大量可以在共线之前变化,而细分曲线由连接终点的直线代替 - 结果
-
PathIterator
对象返回此Area
的轮廓的几何,一次一个段。 - 从以下版本开始:
- 1.2
-
-