Tarea Clases de Java 2d para Figuras

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 39

Figuras geomtricas en Java2D

ISC Luis Eduardo Torres Hernndez [email protected]

Introduccin
Java2D proporciona varias clases que definen objetos geomtricos simples tales como puntos, lneas, curvas y rectngulos. Estos objetos pueden construirse con las clases proporcionadas p p por el p p paquete q java.awt.geom j g , por lo que es necesario importar este paquete en programas g antes de hacer uso de nuestros p cualquiera de sus clases. Entre otras, se proporcionan las clases Rectangle2D, Line2D, Point2D y Ellipse2D

Fig ras bsicas Figuras


En este sentido, las figuras existentes en Java2D son las lneas rectas, las curvas cuadrticas, las curvas cbicas,los cbicas los rectngulos, rectngulos las elipses u valos, los rectngulos con las esquinas redondeadas y los arcos. arcos

Line2D
Dibujar j una lnea recta es una de las cosas ms sencillas que hacerse con Java2D. Ello se consigue a travs de la clase Line2D, cuyo constructor acepta cuatro parmetros, a saber, las coordenadas del punto de inicio y de respectivamente

Ej Ejemplo l
public void paint (Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; // Dibujo dela lnea g2.setColor(Color.pink); g2.setStroke(new 2 tSt k ( B i St k (3 0f)) BasicStroke(3.0f)); Line2D l = new Line2D.Float(50.0f, 50.0f, 200.0f, 200 0f); 200.0f); g2.draw(l); }

R t l 2D Rectangle2D
La clase que se usa para dibujar rectngulos y cuadrados es la Rectangle2D. El constructor especifica p en los dos p primeros parmetros la posicin de la esquina superior izquierda q con respecto p al sistema de coordenadas de la ventana, y en los dos siguientes el ancho y largo respectivamente. Estos cuatro parmetros pueden especificarse mediante valores float o double, usando para ello los constructores Rectangle2D.Float() y Rectangle2D.Double()

Ej Ejemplo l
p public void p paint ( (Graphics p g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; // Creacin del Rectangle2D g2.setColor(Color.red); g2.setStroke(new S ( BasicStroke(3.0f)); S ( f)) Rectangle2D r = new Rectangle2D.Float(100.0f, 75.0f, 50.0f, 100 0f); 100.0f); g2.draw(r); }

Ro ndRectangle2D RoundRectangle2D
La clase RoundRectangle2D permite dibujar un rectngulo con las esquinas redondeadas. La construccin del rectngulo es idntica a como se haca con la clase Rectangle2D, lo nico que cambia en este caso son dos parmetros adicionales al final del constructor, que indican el ancho y largo de la curva que define cada esquina.

Ej Ejemplo l
p public void p paint ( (Graphics p g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; // Dibujo delrectngulo redondeado g2.setColor(Color.pink); g2.setStroke(new S ( BasicStroke(3.0f)); S ( f)) RoundRectangle2D q = new RoundRectangle2D.Float( 50 0f 50 50.0f, 50.0f, 0f 100 100.0f, 0f 150 150.0f, 0f 25 25.0f, 0f 25 25.0f); 0f); g2.draw(q); }

Ellipse2D
Las elipses u valos se dibujan mediante la clase Ellipse2D. Para ello, ello debe definirse un rectngulo que ser el que encierre entre sus lmites a la elipse. No existe el concepto de crculo crculo, por lo que ste debe obtenerse mediante una elipse encerrada en un cuadrado

Ej Ejemplo l
public void paint (Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.orange); g2 setStroke(new BasicStroke(3.0f)); g2.setStroke(new BasicStroke(3 0f)); Ellipse2D e = new Ellipse2D Float(100 0f 75 0f 50 0f 100 0f); Ellipse2D.Float(100.0f,75.0f,50.0f,100.0f); g2.draw(e); }

Arc2D
La clase Arc2D p permite dibujar j un arco de una elipse p o de un crculo. Para ello, primero se define el rectngulo que contiene la elipse cuyo arco se desea dibujar; a continuacin, continuacin suponiendo que el centro de dicho rectngulo establece el punto (0,0) de un eje de coordenadas cartesianas, se especifican f los ngulos de inicio y de final f del arco en grados sexagesimales. Por ltimo, , se indica si se desea cerrar el arco uniendo sus extremos o no.

A 2D Arc2D
Este

cierre puede ser de tres tipos:

Arc2D.OPEN: A 2D OPEN

el l arco queda d abierto. bi t Arc2D.CHORD: los extremos del arco se unen con un segmento de cuerda. Arc2D.PIE: Cada extremo del arco de une mediante un segmento con el punto (0, ( , 0) ) del eje j de coordenadas.

Ej Ejemplo l
El siguiente cdigo dibuja un rectngulo de referencia. A continuacin, , y dentro de un rectngulo g igual g al de referencia, se dibuja un arco que comienza en el ngulo 0 y finaliza en el 135. Por ltimo el arco se cierra como si fuera un trozo de un diagrama de tarta (Arc2D.PIE)

public void paint (Graphics g) { super paint(g); super.paint(g); Graphics2D g2 = (Graphics2D)g; // Dibujo del rectngulo de referencia g2.setColor(Color.blue); g2.setStroke(new BasicStroke(1.0f)); Rectangle2D g r = new Rectangle2D.Float(100.0f, g ( , 75.0f, , 50.0f, , 100.0f); ); g2.draw(r); // Dibujo del arco g2 setColor(Color red); g2.setColor(Color. g2.setStroke(new BasicStroke(3.0f)); Arc2D a = new Arc2D.Float(100.0f, 75.0f, 50.0f, 100.0f, 0.0f, 135.0f, A 2D PIE); Arc2D. PIE) g2.draw(a); }

QuadCurve2D

La clase QuadCurve2D permite construir un segmento curvo basado b d en ecuaciones i matemticas. t ti

La curva generada tambin recibe el nombre de curva cuadrtica de Bzier que consiste en establecer dos puntos que definen los extremos de un segmento curvo, as como un tercer punto, llamado punto de control que permite estirar estirar ms o menos la curvatura de dicho segmento.

Ejemplo de curva cuadrtica en la que pueden apreciarse los extremos y el punto de control que estira la curva generada. Por motivos ilustrativos se muestran en negro las tangentes que unen los extremos y el punto de control

Supuesto que los os pu puntos tos de inicio c o y de fin so son p1=(x1, y1) y p3=(x3, y3) y el punto de control es p2=(x2, y2), la frmula que calcula todos los puntos por lo que va pasando la curva es: Donde: Ntese que para t=0 se cumple que B(t)=p1 y cuando t=1 entonces B(t)=p3, B(t)=p3 que son los extremos del segmento.

Pues bien, la clase QuadCurve2D permite hacer esto mismo, tomando como parmetros los tres puntos p1 p2 y p3. Un ejemplo j p de utilizacin aparece p en el siguiente g cdigo, en el que tambin se han resaltado los tres puntos de referencia

Ejemplo: Curva cuadrtica de Bzier en la q que p pueden apreciarse p los extremos y el punto de control public void paint (Graphics g) { super.paint(g); i t( ) Graphics2D g2 = (Graphics2D)g; g2 setColor(Color blue); g2.setColor(Color. g2.setStroke(new BasicStroke(3.0f)); QuadCurve2D q = new QuadCurve2D.Float( Q Q ( 40.0f, 70.0f, 40.0f, 170.0f, 190.0f, 220.0f); g2.draw(q); g2.setColor(Color.red); g2.draw(new Rectangle2D.Float(40.0f, 70.0f, 1.0f, 1.0f)); g2.draw(new Rectangle2D.Float(40.0f, 170.0f, 1.0f, 1.0f)); g2.draw(new Rectangle2D.Float(190.0f, 220.0f, 1.0f, 1.0f));}

C bicC r e2D CubicCurve2D


Las curvas de Bzier pueden ser generalizadas a cualquier grado grado. No obstante, N b t t l las ms utilizadas tili d son l las d de grado d dos (vistas en el ejemplo anterior) y las de grado tres modeladas mediante la clase CubicCurve2D. CubicCurve2D Suponiendo que los puntos de inicio y de fin son p1=(x1, y1) y p4=(x4, y4), ahora hay dos puntos de control, , a considerar p p2=(x2, ( , y2) y )yp p3=(x3, ( , y3), y ), de manera que la frmula que calcula todos los puntos por lo que va pasando la curva es:

Ntese que para t t=0 0 se cumple que B(t) B(t)=p1 p1 y cuando t=1 entonces B(t)=p4, que son los extremos del segmento curvo

Ejemplo de curva de Bzier cbica en la que tambin aparecen los segmentos que unen los extremos con los puntos de control y stos entre s

Ejemplo: como se muestra en el siguiente cdigo, en el que se han resaltado los cuatro puntos de referencia
public void paint (Graphics g) { super paint(g); super.paint(g); Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.blue); g2.setStroke(new BasicStroke(3.0f)); CubicCurve2D c=new CubicCurve2D.Float(40.0f, 60.0f, 60.0f, 120.0f, 140.0f, 130.0f, 150.0f, 210.0f); g2.draw(c); g2.setColor(Color.red); g2.draw( g d a (new e Rectangle2D.Float(40.0f, ecta g e oat( 0 0 , 60 60.0f, 0 , 1.0f, 0 , 1.0f)); 0 )); g2.draw(new Rectangle2D.Float(60.0f, 120.0f, 1.0f, 1.0f)); g2.draw(new Rectangle2D.Float(140.0f, 130.0f, 1.0f, 1.0f)); g2 draw(new Rectangle2D.Float(150.0f, g2.draw( Rectangle2D Float(150 0f 210 210.0f, 0f 1 1.0f, 0f 1 1.0f)); 0f)); }

Point2D
La ltima de las clases que definen una figura geomtrica es la clase Point2D. Esta clase no dibuja nada nada, sino que es la representacin de los puntos en Java2D. Ahora bien, bien s se pueden dibujar figuras a partir de puntos, y todos los constructores de figuras que hemos e os visto sto e en ep epgrafes g a es a anteriores te o es est estn sobrecargados para poder construir figuras tanto a p partir de coordenadas sueltas como a partir de objetos Point2D

Un ejemplo de ello aparece en el siguiente cdigo:


p public void p paint ( (Graphics p g) { Graphics2D g2 = (Graphics2D)g; g2.setStroke(newBasicStroke(3.0f)); Point2D p1 = new Point2D.Float(23.5f, 48.9f); Point2D p2 = new Point2D.Float(158.0f, 173.0f); Line2D l = new Line2D.Float(p1, ( p2); ) g2.draw(l); }

Resumen de clases relacionadas con figuras g geomtricas g


Clase o Interfaz Shape (interfaz) Es una Shape? Es una RectangularShape? Descripcin Conjunto de mtodos de manipulacin y descripcin de figuras geomtricas. X Define rutinas de manipulacin comunes a todas las figuras que tienen bordes rectangulares

RectangularShape (interfaz)

Resumen de clases relacionadas con figuras geomtricas


Clase o Interfaz Point2D Es una Shape? Es una RectangularShape? Descripcin Representa una localizacin en el sistema de coordenadas. X X X X X Define una lnea recta. Representa un rectangulo Representa un rectangulo con los l bordes b d redondeados

Line2D Rectangle2D RoundRectangle2D

Resumen de clases relacionadas con figuras geomtricas


Clase o Interfaz Ellipse2D A 2D Arc2D QuadCurve2D Es una Shape? X X X Es una RectangularShape? X X Descripcin Define ulna Ellipse Define D fi un Arco Describe una curva Bzier cuadrtica Define una curva Bzier cbica.

CubicCurve2D

El siguiente ejemplo muestra el uso de varias figuras para representar una baera.

public void paint (Graphics g) { G hi 2D g2 Graphics2D 2 = (G (Graphics2D)g; hi 2D) Rectangle2D r = new Rectangle2D.Float(50.0f, 50.0f,110.0f, 200.0f); RoundRectangle2D rr = new RoundRectangle2D.Float( 60.0f, 60.0f, 90.0f, 180.0f, 25.0f, 25.0f); ) Ellipse2D e = new Ellipse2D.Float(100.0f, 80.0f, 10.0f, 10.0f); g2.draw(r); g2.draw(rr); g2.draw(e); }

reas Geomtricas Constructivas (CAG)


Las reas geomtricas constructivas (Constructive Area Geometry, CAG en ingls) son el resultado de crear nuevas figuras geomtricas realizando operaciones de conjuntos con figuras ya existentes. En la API de Java2D, Java2D una clase heredera de Shape llamada Area es capaz de realizar estas operaciones. operaciones

El mecanismo de funcionamiento consiste en convertir en un objeto Area cada objeto Shape que deba intervenir en la operacin de mezcla: esto se hace gracias a un constructor de Area que toma a un objeto Shape como parmetro; a continuacin se mezclan tales Areas segn la operacin u operaciones de conjuntos que se quieran realizar y y, por ltimo, dibujar el Area resultante de tales operaciones i en el l li lienzo grfico, fi esto t es el l objeto bj t Graphics2D.

Las operaciones de conjuntos que soportan los objetos de tipo Area son las siguientes: Union Interseccin Sustraccin Unin exclusiva (XOR) En el siguiente ejemplo se va a realizar una unin de 2 crculos, ilustrndose el resultado de aplicar t d estas todas t operaciones. i

Union

Interseccin

Sustraccin

Or Exclusivo

Ej Ejemplo: l
public void paint (Graphics g) { Graphics2D g2 = (Graphics2D)g; GradientPaint gp = new GradientPaint(50.0f, GradientPaint(50 0f 50 50.0f, 0f Color.blue,200.0f, 50.0f, Color.red); g2 setPaint(gp); g2.setPaint(gp); Ellipse2D e1 = new Ellipse2D.Double(50.0, 50.0, 80 0 80 80.0, 80.0); 0); Ellipse2D e2 = new Ellipse2D.Double(100.0, 50.0, 80 0 80 80.0, 80.0); 0)

C ti Continuacin i
Area a1 = new Area(e1); Area a2 = new Area(e2); // a1.add(a2); a1 add(a2); // a1.intersect(a2); // a1.subtract(a2); a1 subtract(a2); a1.exclusiveOr(a2); g2 fill(a1); g2.fill(a1); }

Sherezade en el crepsculo
La clase Area puede utilizarse para construir fcilmente figuras complejas a partir de otras ms simples como cuadrados o crculos simples, crculos. Como ya se ha visto, para crear una nueva Shape mediante este mtodo mtodo, tan slo hay que seguir dos pasos: 1. Construir las reas a combinar usando Shapes 2 Llamar a cualquiera de los mtodos explicados 2. en el apartado anterior para combinarlas. combinarlas

Ej Ejemplo: l
public void paint (Graphics g) { Graphics2D g2 = (Graphics2D)g; // Dibujo del cielo. cielo Este es el fondo fondo. // Se ha usado un gradiente que va desde el azul al negro GradientPaint gp1 = new GradientPaint(10.0f, GradientPaint(10 0f 125.0f, Color.blue,250.0f, 125.0f, Color.black); Rectangle2D r = new Rectangle2D Rectangle2D.Double(0.0, Double(0 0 0 0.0, 0 250.0, 250.0); g2 setPaint(gp1); g2.setPaint(gp1); g2.fill(r);

// Dibujo de la luna sobre el fondo

GradientPaint gp2 = new GradientPaint (50.0f, 50.0f, Color.yellow,300.0f, 50.0f, Color.darkGray); g2.setPaint(gp2); Ellipse2D e1 = new Ellipse2D.Double(70.0, 100.0, , 80.0); ); 80.0, Ellipse2D e2 = new Ellipse2D.Double(100.0, 100.0, 80.0, 80.0); Area a1 = new Area(e1); Area a2 = new Area(e2); a1.subtract(a2); g2 fill(a1); g2.fill(a1); }

También podría gustarte