从几何图元构造复杂形状
原文: https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html
构造区域几何(CAG)是通过对现有几何形状执行布尔运算来创建新几何形状的过程。在 Java 2D API 中, Area 类实现 Shape 接口并支持以下布尔操作。
|
| 联盟 |
| 减法 |
|
| 路口 |
| 独家或(XOR) |
示例:区域
在此示例中,Area对象从几个椭圆构造一个梨形。
<applet alt=”applet constructs pear shape” archive=”examples/lib/PearApplet.jar” code=”Pear” height=”200” width=”150”><param name=”permissions” value=”sandbox”></applet>
Note: If you don’t see the applet running, you need to install at least the Java SE Development Kit (JDK) 7 release.
Pear.java 包含此 applet 的完整代码。
通过在两个重叠的圆上执行交集来创建叶子。
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);
