从几何图元构造复杂形状

构造区域几何(CAG)是通过对现有形状执行布尔运算来创建新几何形状的过程。在 Java 2D API 中,Area类实现Shapeinterface并支持以下布尔操作。

维恩图显示 unionUnion维恩图显示减法Subtraction
显示相交的维恩图Intersection维恩图显示异或运算异或(XOR)

Example: Areas

在此示例中,Area个对象根据多个椭圆构造了梨形。

Note:

如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)7版本。

Pear.java包含此 Servlets 的完整代码。

每个叶子都是通过在两个重叠的圆上执行相交而创建的。

leaf = new Ellipse2D.Double();
...
leaf1 = new Area(leaf);
leaf2 = new Area(leaf);
...
leaf.setFrame(ew-16, eh-29, 15.0, 15.0);
leaf1 = new Area(leaf);
leaf.setFrame(ew-14, eh-47, 30.0, 30.0);
leaf2 = new Area(leaf);
leaf1.intersect(leaf2);
g2.fill(leaf1);
...
leaf.setFrame(ew+1, eh-29, 15.0, 15.0);
leaf1 = new Area(leaf);
leaf2.intersect(leaf1);
g2.fill(leaf2);

重叠的圆还用于通过减法运算来构造茎。

stem = new Ellipse2D.Double();
...
stem.setFrame(ew, eh-42, 40.0, 40.0);
st1 = new Area(stem);
stem.setFrame(ew+3, eh-47, 50.0, 50.0);
st2 = new Area(stem);
st1.subtract(st2);
g2.fill(st1);

梨的身体是通过对圆形和椭圆形进行联合操作而构造的。

circle = new Ellipse2D.Double();
oval = new Ellipse2D.Double();
circ = new Area(circle);
ov = new Area(oval);
...
circle.setFrame(ew-25, eh, 50.0, 50.0);
oval.setFrame(ew-19, eh-20, 40.0, 70.0);
circ = new Area(circle);
ov = new Area(oval);
circ.add(ov);
g2.fill(circ);