Graficación UNIDAD II.- TRANSFORMACIONES GEOMÉTRICAS ___________________________________________________________________ LECCIÓN 2.1 Transformaciones bidimensionales. ___________________________________________________________________ 2.1.4.- Sistema de coordenadas Para ubicar los objetos gráficos se utiliza un sistema de coordenadas Representación de objetos gráficos: Se hace utilizando una ecuación que define la relación que deben satisfacer todas las coordenadas (x,y) del objeto. – Linea: Ax + By + C=0 – Círculo con centro en el origen de coordenadas: x2 + y2 = R2 Rafael Rivera López 1 Graficación – Elipse con centro en x0,y0: Ecuación estándar: Ecuación parámetrica: x = x0 + a cos t y = y0 + b sin t Una ecuación paramétrica proporciona una forma explícita para evaluar las coordenadas. Espacios: Existen tres espacios: – Espacio del objeto: El centro del sistema de coordenadas coincide con el centro del objeto. – Espacio del mundo: Define un espacio de referencia común a todos los objetos gráficos de la escena. – Espacio del dispositivo: Es el espacio de referencia del dispositivo de despliegue: En Java, el espacio del mundo es el mismo del espacio del dispositivo. Rafael Rivera López 2 Graficación 2.1.5.- Clases gráficas en Java En Java se utiliza un objeto como motor de interpretación de las primitivas gráficas, a este objeto se le conoce como contexto gráfico o simplemente brocha. – java.awt.Graphics contiene métodos básicos para interpretar primitivas gráficas y controlar los modos de despliegue. – java.awt.Graphics2D es Una forma mejorada. Formas de obtener una referencia al contexto gráfico: – Usando el argumento del método paint() de Frame o del método paintComponent() de JFrame: void paintComponent(Graphics g) – Utilizando el método getGraphics() java.awt.Graphics Cada método ejecuta la modelación del objeto gráfico para luego realizar la interpretación sobre el dispositivo de despliegue: void setColor(Color c) void setFont(Font f) void setXORMode(Color c) Rafael Rivera López 3 Graficación void setPaintMode() void translate(int x, int y) void drawLine(int x1, int y1, int x2, int y2) void drawRect(int x1, int y1, int width, int height) void drawOval(int x1, int y1, int width, int height) void drawArc(int x1, int y1, int width, int height, int start, int arc) void drawRoundRect(int x1, int y1, int width, int height, int arcW, int arcH) void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) void fillRect(int x1, int y1, int width, int height) void fillOval(int x1, int y1, int width, int height) void fillArc(int x1, int y1, int width, int height, int start, int arc) void fillRoundRect(int x1, int y1, int width, int height, int arcW, int arcH) void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) void drawString(String str, int x, int y) java.awt.Graphics2D Es mas sofisticado ya que el modelado se hace de forma separada a la interpretación. void draw(Shape s) void fill(Shape s) void setTransform(AffineTransform Tx) void transform(AffineTransform Tx) void setPaint(Paint p) void setStroke(Stroke s) void clip(Shape s) void setComposite(Composite c) void addRenderingHints(Map hints) Rafael Rivera López 4 Graficación package ejemplosgraphics2d; import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class Hola2D extends JFrame{ public Hola2D(){ setTitle("Hello 2D"); setSize(640,480); setBackground(Color.lightGray); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(new MiPanel()); setVisible(true); } } class MiPanel extends JPanel{ public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.blue); Ellipse2D e = new Ellipse2D.Double(-100, -50, 200, 100); AffineTransform tr = new AffineTransform(); tr.rotate(Math.PI / 6.0); Shape shape = tr.createTransformedShape(e); g2.translate(300,200); g2.drawLine(-300,0,300,0); g2.drawLine(0, -200, 0, 200); g2.draw(shape); g2.scale(1.5,1.5); g2.draw(shape); g2.scale(1.5,1.5); g2.draw(shape); g2.scale(1.5,1.5); g2.draw(shape); g2.drawString("Hello 2D", 0, 0); } } Rafael Rivera López 5 Graficación Ecuaciones gráficas x = (r1 + r2) cos t - p cos((r1 + r2)t/r2) y = (r1 + r2) sin t - p sin((r1 + r2)t/r2) package ejemplosgraphics2d; import javax.swing.*; import java.awt.*; public class Spiro extends JPanel{ private int nPoints = 1000; private double r1 = 60; private double r2 = 50; private double p = 70; public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.translate(200,200); int x1 = (int)(r1 + r2 - p); int y1 = 0; int x2; int y2; for (int i = 0; i < nPoints; i++) { double t = i * Math.PI / 90; x2 = (int)((r1+r2)*Math.cos(t)-p*Math.cos((r1+r2)*t/r2)); y2 = (int)((r1+r2)*Math.sin(t)-p*Math.sin((r1+r2)*t/r2)); g2.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; } } } 2.1.6.- Modelos gráficos Un objeto gráfico se puede dibujar si implementa la interfaz Shape. Los métodos draw() y fill() reciben un objeto Shape. Rafael Rivera López 6 Graficación Rafael Rivera López 7