Graficación UNIDAD II.- TRANSFORMACIONES GEOMÉTRICAS ___________________________________________________________________ LECCIÓN 2.1 Transformaciones bidimensionales. ___________________________________________________________________ 2.1.11.- Transformaciones afines Traslación: void setToTranslation(double tx, double ty) – Define la cantidad de puntos que se desplaza el objeto (tx y ty). Rotación: void setToRotation(double theta) void setToRotation(double theta, double x, double y) – Define una rotación sobre el origen de coordenadas. – En ángulo es en radianes. – El giro positivo es en el sentido de las manecillas del reloj – Los valores x y y indican que el objeto va a rotar alrededor del punto (x,y) Escalado: void setToScale(double sx, double sy) – Define la forma en que se agranda o reduce un objeto gráfico – sx es el factor sobre las x y sy es el factor sobre las y – Si los factores son mayores a 1 es un agrandamiento, si son menores a 1 es una reducción. Rafael Rivera López 1 Graficación Cizallado: – void setToShear(double shx, double shy) Produce una deformación del objeto de forma que parece que se alarga de una esquina. package ejemplosgraphics2d; import java.awt.*; import java.awt.geom.*; import javax.swing.*; public class Transformaciones extends JPanel{ public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; // Origen de coordenadas al centro de la pantalla g2.translate(getWidth()/2,getHeight()/2); // Ejes X y Y Line2D linea1 = new Line2D.Double(-1*getWidth()/2,0,getWidth(),0); g2.draw(linea1); Line2D linea2 = new Line2D.Double(0,-getHeight()/2,0,getHeight()); g2.draw(linea2); // Objeto original g2.setColor(Color.blue); Rectangle2D r = new Rectangle2D.Double(100,100,100,100); g2.draw(r); // Definición de transformación AffineTransform tr = new AffineTransform(); // Traslación tr.setToTranslation(20,20); Shape r1 = tr.createTransformedShape(r); g2.setPaint(Color.magenta); g2.draw(r1); // Rotación Shape r2 = null; g2.setPaint(Color.green); for(int i=1;i<8;i++){ tr.setToRotation(45f*i*Math.PI/180); r2 = tr.createTransformedShape(r); g2.draw(r2); } g2.setPaint(Color.cyan); tr.setToRotation(-30f*Math.PI/180,100,100); r2 = tr.createTransformedShape(r); g2.draw(r2); // Cuadrado con centro en el origen g2.setColor(Color.blue); Rafael Rivera López 2 Graficación } r = new Rectangle2D.Double(-50,-50,100,100); g2.draw(r); // Escalado g2.setPaint(Color.ORANGE); tr.setToScale(2,2); Shape r3 = tr.createTransformedShape(r); g2.draw(r3); // Cizallado g2.setPaint(Color.DARK_GRAY); tr.setToShear(0.5,0.5); Shape r4 = tr.createTransformedShape(r); g2.draw(r4); } Rafael Rivera López 3