Construir Formas Complejas desde Geométricos Primitivos
Construir un área geométrica (CAG) es el proceso de crear una nueva forma geométrica
realizando operaciones con las ya existentes. En el API Java 2D un tipo especial de
Shape llamado Area soporta operaciones
booleanas. Podemos construir un Area desde cualquier
Shape .
Area soporta la siguientes operaciones booleanas:
| |
Unión |
|
Subtracción |
| |
Intersección |
|
Or-Exclusivo (XOR) |
Ejemplo: Areas
En este ejemplo, los objetos Area construyen una forma de pera
partiendo de varias elipses.
Esta es una imagen del GUI del applet. Para ajecutar el applet, pulsa
sobre ella. El applet aparecerá en una nueva ventana del navegador.
Pear.java
contiene el código completo de este applet.
Las hojas son creadas realizando una interesección entre dos círculos solapados:
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);
Los círculos solapados también se usan para cosntruir el rabo mediante una operación de
subtracción:
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);
El cuerpo de la pera está construido mediante una operación unión de un círculo y un
óvalo:
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);