Graficación UNIDAD II.- TRANSFORMACIONES GEOMÉTRICAS ___________________________________________________________________ LECCIÓN 2.1 Transformaciones bidimensionales. ___________________________________________________________________ 2.1.6.- Modelos geométricos package ejemplosgraphics2d; import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class Graficos extends JPanel{ public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; g2.translate(5,5); Line2D linea1 = new Line2D.Double(-5,0,640,0); g2.draw(linea1); Line2D linea2 = new Line2D.Double(0,-5,0,480); g2.draw(linea2); g2.setColor(Color.darkGray); QuadCurve2D quad = new QuadCurve2D.Double(20,20,100,300,300,150); g2.draw(quad); g2.setColor(Color.GREEN); CubicCurve2D cubic = new CubicCurve2D.Float(20,20,100,300,300,150,400,400); g2.draw(cubic); g2.setColor(Color.MAGENTA); Arc2D arc; for(int i=0;i<3;i++){ arc = new Arc2D.Float(400f,100f,200f,200f, 0f+120f*i,40f,Arc2D.OPEN); g2.draw(arc); arc = new Arc2D.Float(400f,100f,200f,200f, 40f+120f*i,40f,Arc2D.PIE); g2.fill(arc); arc = new Arc2D.Float(400f,100f,200f,200f, 80f+120f*i,40f,Arc2D.CHORD); g2.draw(arc); } Rafael Rivera López 1 Graficación int [] x = {20,100,300,400}; int [] y = {20,300,150,400}; g2.setColor(Color.BLUE); Polygon p = new Polygon(x, y, 4); g2.draw(p); } } 2.1.7.- Área de Geometría Constructiva Clase Area: Clase para crear formas más complejas se combinan varias formas Operaciones: Se aplican sobre dos formas produciendo una nueva forma – Unión: Todos los puntos de dos formas. – Intersección: Los puntos que están en ambas formas. – Diferencia: Los puntos que están en la primera forma y no están en la segunda. – Diferencia simétrica: Los puntos que están solamente en alguno de las dos formas Area(Shape s) void add(Area a) void intersect(Area a) void subtract(Area a) void exclusiveOr(Area a) package ejemplosgraphics2d; import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class AreaGeometria extends JPanel{ public void paintComponent(Graphics g){ Rafael Rivera López 2 Graficación } Graphics2D g2 = (Graphics2D)g; g2.translate(5,5); Line2D linea1 = new Line2D.Double(-5,0,640,0); g2.draw(linea1); Line2D linea2 = new Line2D.Double(0,-5,0,480); g2.draw(linea2); g2.setColor(Color.darkGray); Shape s1 = new Ellipse2D.Double(0, 0, 100, 100); Shape s2 = new Ellipse2D.Double(60, 0, 100, 100); Area a1; Area a2 = new Area(s2); g2.translate(20, 50); g2.draw(s1); g2.draw(s2); g2.translate(0,200); a1 = new Area(s1); a1.add(a2); g2.fill(a1); g2.translate(140,0); a1 = new Area(s1); a1.intersect(a2); g2.fill(a1); g2.translate(140,0); a1 = new Area(s1); a1.subtract(a2); g2.fill(a1); g2.translate(140,0); a1 = new Area(s1); a1.exclusiveOr(a2); g2.fill(a1); } 2.1.8.- General Path – GeneralPatth: Soporta la construcción de caminos con los objetos gráficos de Graphics2D. El proceso de GeneralPath es como trazar con un lápiz. – Métodos: void moveTo(float x, float y): Mueve el lápiz a la ubicación (x,y) sin trazar nada. void lineTo(float x, float y): Traza una línea de la posición actual a la ubicación (x,y). Rafael Rivera López 3 Graficación void quadTo(float x1, float y1, float x2, float y2): Traza una curva cuadrática iniciando en la posición actual hasta la ubicación (x2,y2). void curveTo(float x1, float y1, float x2, float y2, float x3, float y3): Traza una curva cúbica iniciando en la posición actual hasta la ubicación (x3,y3); void closePath(): Traza una linea entre el punto inicial y el final. package ejemplosgraphics2d; import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class Dibujo extends JPanel{ public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD); float x0 = 1.0f; float y0 = 0.0f; float x1 = (float)Math.cos(2*Math.PI/5.0); float y1 = (float)Math.sin(2*Math.PI/5.0); float x2 = (float)Math.cos(4*Math.PI/5.0); float y2 = (float)Math.sin(4*Math.PI/5.0); float x3 = (float)Math.cos(6*Math.PI/5.0); float y3 = (float)Math.sin(6*Math.PI/5.0); float x4 = (float)Math.cos(8*Math.PI/5.0); float y4 = (float)Math.sin(8*Math.PI/5.0); path.moveTo(x2*100,y2*100); path.lineTo(x0*100,y0*100); path.lineTo(x3*100,y3*100); path.lineTo(x1*100,y1*100); path.lineTo(x4*100,y4*100); path.closePath(); g2.translate(120,120); g2.draw(path); g2.translate(200,0); g2.fill(path); path.setWindingRule(GeneralPath.WIND_NON_ZERO); g2.translate(200,0); g2.fill(path); } } Rafael Rivera López 4