100% encontró este documento útil (1 voto)
618 vistas10 páginas

Transformaciones en Java 2D

Este documento explica diferentes tipos de transformaciones en Java 2D, incluyendo traducción, rotación, escala y cizallamiento. Describe cómo aplicar cada transformación usando métodos como translate(), rotate(), scale() y shear().
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
618 vistas10 páginas

Transformaciones en Java 2D

Este documento explica diferentes tipos de transformaciones en Java 2D, incluyendo traducción, rotación, escala y cizallamiento. Describe cómo aplicar cada transformación usando métodos como translate(), rotate(), scale() y shear().
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

26/9/2019 Transformaciones en Java 2D

Inicio Contenido Suscribirse Anterior Siguient

Transformaciones
En esta parte del tutorial de programación Java 2D, hablaremos sobre las transformaciones.

Una transformación afín se compone de cero o más transformaciones lineales (rotación, escala o
cizallamiento) y traslación (desplazamiento). Se pueden combinar varias transformaciones lineales en una
sola matriz. Una rotación es una transformación que mueve un cuerpo rígido alrededor de un punto fijo.
Una escala es una transformación que aumenta o disminuye los objetos. El factor de escala es el mismo en
todas las direcciones. Una traslación es una transformación que mueve cada punto una distancia constante
en una dirección específica. Una cizalla es una transformación que mueve un objeto perpendicular a un eje
dado, con mayor valor en un lado del eje que en el otro. fuentes: (wikipedia.org, freedictionary.com)

Esta AffineTransformes la clase en Java 2D para realizar transformaciones afines.

Traducción

El siguiente ejemplo describe una traducción simple.

TranslationEx.java

paquete com.zetcode;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

clase Surface extiende JPanel {

doDrawing privado vacío (Gráficos g) {

Graphics2D g2d = (Graphics2D) g.create ();

g2d.setPaint (nuevo color (150, 150, 150));


g2d.fillRect (20, 20, 80, 50);
g2d.translate (150, 50);
g2d.fillRect (20, 20, 80, 50);

g2d.dispose ();
}

@Anular
public void paintComponent (Gráficos g) {

zetcode.com/gfx/java2d/transformations/ 1/10
26/9/2019 Transformaciones en Java 2D

super.paintComponent (g);
doDrawing (g);
}
}

La clase pública TranslationEx extiende JFrame {

Public TranslationEx () {

initUI ();
}

initUI privado vacío () {

add (nueva Surface ());

setTitle ("Traducción");
setSize (300, 200);
setLocationRelativeTo (nulo);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}

public static void main (String [] args) {

EventQueue.invokeLater (new Runnable () {


@Anular
public void run () {

TranslationEx ex = nueva TranslationEx ();


ex.setVisible (verdadero);
}
});
}
}

El ejemplo dibuja un rectángulo. Luego hacemos una traducción y dibujamos el mismo rectángulo
nuevamente.

g2d.translate (150, 50);

Esta línea mueve el origen del Graphics2Dcontexto a un nuevo punto.

Figura: Traducción

zetcode.com/gfx/java2d/transformations/ 2/10
26/9/2019 Transformaciones en Java 2D

Rotación
El siguiente ejemplo demuestra una rotación.

RotationEx.java

paquete com.zetcode;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Surface extends JPanel {

private void doDrawing(Graphics g) {

Graphics2D g2d = (Graphics2D) g.create();

g2d.setPaint(new Color(150, 150, 150));


g2d.fillRect(20, 20, 80, 50);
g2d.translate(180, -50);
g2d.rotate(Math.PI/4);
g2d.fillRect(80, 80, 80, 50);

g2d.dispose();
}

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g);
doDrawing(g);
}
}

public class RotationEx extends JFrame {

public RotationEx() {

initUI();
}

private void initUI() {

setTitle("Rotation");

add(new Surface());

setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

zetcode.com/gfx/java2d/transformations/ 3/10
26/9/2019 Transformaciones en Java 2D

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {

RotationEx ex = new RotationEx();


ex.setVisible(true);
}
});
}
}

The example draws a rectangle, performs a translation and a rotation and draws the same rectangle again.

g2d.rotate(Math.PI/4);

The rotate() method performs rotation. Note that the rotation parameter is in radians.

Figure: Rotation

Scaling
The next example demonstrates scaling of an object. Scaling is done with the scale() method. In this
method, we provide two parameters. They are the x scale and y scale factor, by which coordinates are scaled
along the x or y axis respectively.

ScalingEx.java

package com.zetcode;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Surface extends JPanel {

zetcode.com/gfx/java2d/transformations/ 4/10
26/9/2019 Transformaciones en Java 2D

private void doDrawing(Graphics g) {

Graphics2D g2d = (Graphics2D) g.create();

g2d.setColor(new Color(150, 150, 150));


g2d.fillRect(20, 20, 80, 50);

AffineTransform tx1 = new AffineTransform();


tx1.translate(110, 22);
tx1.scale(0.5, 0.5);

g2d.setTransform(tx1);
g2d.fillRect(0, 0, 80, 50);

AffineTransform tx2 = new AffineTransform();


tx2.translate(170, 20);
tx2.scale(1.5, 1.5);

g2d.setTransform(tx2);
g2d.fillRect(0, 0, 80, 50);

g2d.dispose();
}

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g);
doDrawing(g);
}
}

public class ScalingEx extends JFrame {

public ScalingEx() {

initUI();
}

private void initUI() {

add(new Surface());

setTitle("Scaling");
setSize(330, 160);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {

ScalingEx ex = new ScalingEx();


ex.setVisible(true);

zetcode.com/gfx/java2d/transformations/ 5/10
26/9/2019 Transformaciones en Java 2D

}
});
}
}

We have a rectangle. First we scale it down and then we scale it up a bit.

AffineTransform tx2 = new AffineTransform();


tx2.translate(170, 20);
tx2.scale(1.5, 1.5);

Another scaling would be added to the first one. So we need to create and apply a new affine transform.

Figure: Scaling

Shearing
In the following example we perform shearing. We use the share() method.

ShearingEx.java

package com.zetcode;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Surface extends JPanel {

private void doDrawing(Graphics g) {

Graphics2D g2d = (Graphics2D) g.create();

AffineTransform tx1 = new AffineTransform();


tx1.translate(50, 90);

g2d.setTransform(tx1);
g2d.setPaint(Color.green);
g2d.drawRect(0, 0, 160, 50);

zetcode.com/gfx/java2d/transformations/ 6/10
26/9/2019 Transformaciones en Java 2D

AffineTransform tx2 = new AffineTransform();


tx2.translate(50, 90);
tx2.shear(0, 1);

g2d.setTransform(tx2);
g2d.setPaint(Color.blue);

g2d.draw(new Rectangle(0, 0, 80, 50));

AffineTransform tx3 = new AffineTransform();


tx3.translate(130, 10);
tx3.shear(0, 1);

g2d.setTransform(tx3);
g2d.setPaint(Color.red);
g2d.drawRect(0, 0, 80, 50);

g2d.dispose();
}

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g);
doDrawing(g);
}
}

public class ShearingEx extends JFrame {

public ShearingEx() {

initUI();
}

private void initUI() {

add(new Surface());

setTitle("Shearing");
setSize(330, 270);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {

ShearingEx ex = new ShearingEx();


ex.setVisible(true);
}
});

zetcode.com/gfx/java2d/transformations/ 7/10
26/9/2019 Transformaciones en Java 2D

}
}

In this example, we draw three rectangles in three different colors. They form a structure. Two of them are
sheared.

tx2.shear(0, 1);

The two parameters are multipliers by which coordinates are shifted in the direction of the x and y axis.

Figure: Shearing

Donut
In the following example we create an complex shape by rotating an ellipse.

DonutEx.java

package com.zetcode;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Surface extends JPanel {

private void doDrawing(Graphics g) {

Graphics2D g2d = (Graphics2D) g.create();

zetcode.com/gfx/java2d/transformations/ 8/10
26/9/2019 Transformaciones en Java 2D

RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,


RenderingHints.VALUE_ANTIALIAS_ON);

rh.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);

g2d.setRenderingHints(rh);

Dimension size = getSize();


double w = size.getWidth();
double h = size.getHeight();

Ellipse2D e = new Ellipse2D.Double(0, 0, 80, 130);


g2d.setStroke(new BasicStroke(1));
g2d.setPaint(Color.gray);

for (double deg = 0; deg < 360; deg += 5) {


AffineTransform at =
AffineTransform.getTranslateInstance(w / 2, h / 2);
at.rotate(Math.toRadians(deg));
g2d.draw(at.createTransformedShape(e));
}
}

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g);
doDrawing(g);
}
}

public class DonutEx extends JFrame {

public DonutEx() {

initUI();
}

private void initUI() {

add(new Surface());

setTitle("Donut");
setSize(370, 320);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {

DonutEx ex = new DonutEx();


ex.setVisible(true);

zetcode.com/gfx/java2d/transformations/ 9/10
26/9/2019 Transformaciones en Java 2D

}
});
}
}

In this example, we create a donut shape.

Ellipse2D e = new Ellipse2D.Double(0, 0, 80, 130);


g2d.setStroke(new BasicStroke(1));
g2d.setPaint(Color.gray);

Al principio hay una elipse.

para (doble deg = 0; deg <360; deg + = 5) {


AffineTransform en =
AffineTransform.getTranslateInstance (w / 2, h / 2);
at.rotate (Math.toRadians (deg));
g2d.draw (at.createTransformedShape (e));
}

Después de varias rotaciones, hay una rosquilla.

En esta parte del tutorial Java 2D, hemos hablado sobre transformaciones.

Inicio Contenido Principio de la página Anterior Siguient


ZetCode última modificación 16 de abril de 2015 © 2007-2019 Jan Bodnar Seguir en Facebook

zetcode.com/gfx/java2d/transformations/ 10/10

También podría gustarte