UNIDAD II.- TRANSFORMACIONES GEOMÉTRICAS

Anuncio
Graficación
UNIDAD II.- TRANSFORMACIONES GEOMÉTRICAS
___________________________________________________________________
LECCIÓN 2.1 Transformaciones bidimensionales.
___________________________________________________________________
2.1.8.- Colores, Gradientes y Texturas
Color: Para definir un color se utiliza el método setColor
–
void setColor(Color c)
Colores:
black,
blue,
cyan,
darkGray,
gray, green,
lightGray,
magenta,
orange,
pink,
red,
white,
yellow
Creando un color basado en el contructor y los valores RGB
–
Color(int r, int g, int b);
–
Color(int rgb);
–
Color(float r, float g, float b);
package ejemplosgraphics2d;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public class Colores extends JPanel{
public void paintComponent(Graphics g){
int red = 255;
int green = 255;
int blue = 255;
Graphics2D g2 = (Graphics2D)g;
Shape rc = new Ellipse2D.Double(100, 113, 200, 200);
Rafael Rivera López
1
Graficación
Shape gc = new Ellipse2D.Double(50, 200, 200, 200);
Shape bc = new Ellipse2D.Double(150, 200, 200, 200);
Area ra = new Area(rc);
Area ga = new Area(gc);
Area ba = new Area(bc);
Area rga = new Area(rc);
rga.intersect(ga);
Area gba = new Area(gc);
gba.intersect(ba);
Area bra = new Area(bc);
bra.intersect(ra);
Area rgba = new Area(rga);
rgba.intersect(ba);
ra.subtract(rga);
ra.subtract(bra);
ga.subtract(rga);
ga.subtract(gba);
ba.subtract(bra);
ba.subtract(gba);
// fill the color regions
g2.setColor(new Color(red,0,0));
g2.fill(ra);
g2.setColor(new Color(0,green,0));
g2.fill(ga);
g2.setColor(new Color(0,0,blue));
g2.fill(ba);
g2.setColor(new Color(red,green,0));
g2.fill(rga);
g2.setColor(new Color(0,green,blue));
g2.fill(gba);
g2.setColor(new Color(red,0,blue));
g2.fill(bra);
g2.setColor(new Color(red,green,blue));
g2.fill(rgba);
// draw three circles
g2.setColor(Color.black);
g2.draw(rc);
g2.draw(gc);
g2.draw(bc);
}
}
Rafael Rivera López
2
Graficación
Interfaz Paint
–
La interfaz Paint es una generalización de color.
–
Se utiliza el método setPaint(Paint p).
Clase GredientPaint
–
Define el pintado usando varios colores.
–
Se define con dos puntos y dos colores. El color cambia del primero al segundo del punto
inicial al final.
–
Este cambio puede ser cíclico o no
Aciclico:
–
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2);
Cíclico o acíclico:
–
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, boolean cycl);
Rafael Rivera López
3
Graficación
Clase TexturePaint
- Define una textura para un objeto gráfico.
- TexturePaint(BufferImage image, Rectangle2D anchor);
package ejemplosgraphics2d;
import
import
import
import
import
import
javax.swing.*;
java.awt.*;
java.awt.geom.*;
java.awt.image.*;
javax.imageio.*;
java.io.*;
public class ClasePaint extends JPanel{
public void paintComponent(Graphics g){
BufferedImage image = null;
try{
image = ImageIO.read(new File("World.jpg"));
} catch(IOException e){
System.err.println("Error");
}
Graphics2D g2 = (Graphics2D)g;
GradientPaint gp = new GradientPaint(100,50,Color.white,
150,50, Color.gray, true);
g2.setPaint(gp);
g2.fillRect(100, 40, 300, 20);
gp = new GradientPaint(100,50,Color.white,
150, 50, Color.gray, false);
g2.setPaint(gp);
g2.fillRect(100, 80, 300, 20);
TexturePaint tp = new TexturePaint(image,
new Rectangle2D.Double(100, 100,
image.getWidth(),image.getHeight()));
g2.setPaint(tp);
Shape ellipse = new Ellipse2D.Double(100, 100,
image.getWidth(),image.getHeight());
g2.fill(ellipse);
Rafael Rivera López
4
Graficación
}
GradientPaint paint = new GradientPaint(100, 300, Color.white,
400, 400, Color.black);
g2.setPaint(paint);
Font font = new Font("Serif", Font.BOLD, 144);
g2.setFont(font);
g2.drawString("Java", 100, 400);
}
2.1.9.- Trazado de Líneas
Trazos: Son los detalles del trazado de líneas
Clase para trazado: BasicStroke.
–
BasicStroke()
–
BasicStroke(float width)
–
BasicStroke(float width, int cap, int join)
–
BasicStroke(float width, int cap, int join, float miterlimit)
–
BasicStroke(float width, int cap, int join, float miterlimit, float[] dash, float dashphase)
Tabla: Parámetros para el trazado
Parámetros
Descripción
width
El ancho del trazo.
cap
Estilo de la terminación de la línea:
CAP_BUTT, CAP_ROUND, CAP_SQUARE
join
El estilo de la unión de trazos:
JOIN_BEVEL, JOIN_MITER, JOIN_ROUND
miterlimit
Ajusta el límite de un JOIN_MITER cuando el ángulo dentre las líneas es
muy pequeño.
dash
El patrón de punteado de los segmetos
dashphase
El punto inicial del patron de punteado.
Rafael Rivera López
5
Graficación
El método que se utiliza para definir un trazo es:
–
void setStroke(Stroke s)
package ejemplosgraphics2d;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public class Trazos extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
path.moveTo(0,120);
path.lineTo(80,0);
path.lineTo(160,120);
Stroke stroke = new BasicStroke(20, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
g2.setStroke(stroke);
g2.translate(50,50);
g2.draw(path);
g2.drawString("JOIN_BEVEL",100,0);
g2.drawString("CAP_BUTT", 40, 120);
stroke = new BasicStroke(20, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER);
g2.setStroke(stroke);
g2.translate(200,0);
g2.draw(path);
g2.drawString("JOIN_MITER",100,0);
g2.drawString("CAP_ROUND", 40, 120);
stroke = new BasicStroke(20,BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_ROUND);
g2.setStroke(stroke);
g2.translate(200,0);
g2.draw(path);
g2.drawString("JOIN_ROUND",100,0);
g2.drawString("CAP_SQUARE", 40, 120);
float[] dashArray = {60,20,20,40};
float dashPhase = 0;
stroke = new BasicStroke(10, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL, 0,
dashArray, dashPhase);
Rafael Rivera López
6
Graficación
g2.setStroke(stroke);
g2.translate(-400,200);
g2.drawLine(100, 50, 550, 50);
g2.drawString("dash=60 20 20 40", 250, 10);
g2.drawString("phase=0", 0, 50);
dashPhase = 20;
stroke = new BasicStroke(10, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL, 0,
dashArray, dashPhase);
g2.setStroke(stroke);
g2.translate(0,50);
g2.drawLine(100, 50, 550, 50);
g2.drawString("phase=20", 0, 50);
}
}
2.1.10.- Transformación afín
Una trasformación afín genera un objeto gráfico que conserva las líneas paralelas
–
Traslación
–
Rotación
–
Reflexión
–
Escalado
–
Cizallado
Clase AffineTransform:
Define una transformación afín:
void setToRotation(double theta)
void setToRotation(double theta, double x, double y)
void setToScale(double sx, double sy)
void setToShear(double shx, double shy)
void setToTranslation(double tx, double ty)
Rafael Rivera López
7
Graficación
Forma de definir una transformación afín:
–
–
–
AffineTransform tr = new AffineTransform();
tr.setToTranslation(x,y);
Shape x = tr.createTransformedShape(drawShape);
package ejemplosgraphics2d;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public class Traslación extends JPanel{
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
path.moveTo(0,120);
path.lineTo(80,0);
path.lineTo(160,120);
AffineTransform tr = new AffineTransform();
tr.setToTranslation(200,200);
Shape path1 = tr.createTransformedShape(path);
g2.draw(path);
g2.draw(path1);
}
}
Rafael Rivera López
8
Descargar