Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2.3.1.- Definiciones
Clasificación:
– Transformación directa: Se conservan el sentido en el plano orientado
– Transformación inversa: Cuando los sentidos de la figura original y la homóloga son
contrarios.
package modelos;
import java.awt.*;
@Override
public void dibujar(Graphics g) {
g.setColor(color);
g.fillPolygon(this);
g.setColor(Color.BLACK);
g.drawPolygon(this);
for (Punto punto : puntos) {
punto.dibujar(g);
}
}
Clase TransformacionesBidimensionales
package transformacionesbidimensionales;
import controladores.*;
import modelos.*;
import vistas.*;
OyenteTransformaciones oyente
= new OyenteTransformaciones(trans, panel); //CONTROLADOR
f.addEventos(oyente);
f.setSize(800, 600);
f.setLocation(50, 50);
f.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
f.add(panel);
f.setVisible(true);
}
}
import java.awt.event.ActionListener;
public VentanaTransformaciones() {
initComponents();
}
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Transformaciones Bidimensionales");
menuOpciones.setText("Transformación");
opcionSimetriaCentral.setText("Simetría Central");
opcionSimetriaCentral.setName("sCentral"); // NOI18N
menuOpciones.add(opcionSimetriaCentral);
opcionSimetriaAxial.setText("Simetría Axial");
opcionSimetriaAxial.setName("sAxial"); // NOI18N
menuOpciones.add(opcionSimetriaAxial);
opcionTranslacion.setText("Translación");
opcionTranslacion.setName("translacion"); // NOI18N
menuOpciones.add(opcionTranslacion);
opcionRotacion.setText("Rotación");
opcionRotacion.setName("rotacion"); // NOI18N
menuOpciones.add(opcionRotacion);
opcionEscalado.setText("Escalado");
opcionEscalado.setName("escalado"); // NOI18N
menuOpciones.add(opcionEscalado);
menuOpciones.add(separador);
opcionSalir.setText("Salir");
opcionSalir.setName("salir"); // NOI18N
menuOpciones.add(opcionSalir);
barraMenu.add(menuOpciones);
setJMenuBar(barraMenu);
pack();
}// </editor-fold>//GEN-END:initComponents
import java.awt.Color;
import java.awt.geom.Line2D;
public Transformaciones() {
crearShapeOriginal();
}
public void aplicarSimetriaAxial(int x1, int y1, int x2, int y2) {
tipoTransformacion = SIMETRIA_AXIAL;
}
VISTA: PanelTransformaciones
package vistas;
import java.awt.*;
import javax.swing.JPanel;
import modelos.*;
import static modelos.Transformaciones.*;
@Override
CONTROLADOR: OyenteTransformaciones
package controladores;
import java.awt.event.*;
import javax.swing.JComponent;
import modelos.Transformaciones;
import vistas.PanelTransformaciones;
public OyenteTransformaciones(
Transformaciones trans, PanelTransformaciones panel) {
this.trans = trans;
this.panel = panel;
}
@Override
public void actionPerformed(ActionEvent e) {
JComponent origen = (JComponent) e.getSource();
switch (origen.getName()) {
case "sCentral":
int xC = 400;
int yC = 300;
trans.aplicarSimetriaCentral(xC, yC);
break;
case "sAxial":
trans.aplicarSimetriaAxial(50, 500, 650, 50);
break;
case "translacion":
trans.aplicarTranslacion(300, 100);
break;
case "rotacion":
trans.aplicarRotacion(30);
break;
case "escalado":
trans.aplicarEscalado(2);
break;
case "salir":
System.exit(0);
}
panel.repaint();
}
}
Simetría central
Se trazan segmentos que unen los puntos de una figura original con el Centro de Simetría
(C.S.) y se prolongan con una longitud igual a la existente entre el punto y el C.S.
• Elemento característico: Centro de simetría
• Propiedades:
◦ Involutivo: Dos simetrías sucesivas producen el elemento original
◦ Directo: Conserva la relación de ordenación en el plano.
Método aplicarSimetríaCentral
public class Transformaciones{
...
...
}
Simetría axial
Se traza una perpendicular desde un punto al eje de simetría (e.s.) y se prolonga la misma
distancia desde el punto en el eje.
Método aplicarSimetríaAxial
public class Transformaciones{
...
public void aplicarSimetriaAxial(int x1, int y1, int x2, int y2) {
double m1 = (double) (y2 - y1) / (x2 - x1);
Puntos puntos = new Puntos();
for (Punto punto : original.getPuntos()) {
int xO = punto.x;
int yO = punto.y;
int xC = (int) ((xO + m1 * (yO + m1 * x1 - y1)) / (m1 * m1 + 1));
int yC = (int) (m1 * (xC - x1) + y1);
int xH = 2 * xC - punto.x;
int yH = 2 * yC - punto.y;
puntos.add(new Punto(xH, yH, 2, Color.RED));
}
homologa = new Poligono(puntos, Color.GREEN);
double xS = x1 - y1 / m1;
double yI = y1 - m1 * x1;
ejeSimetria = new Line2D.Double(xS, 0, 0, yI);
tipoTransformacion = SIMETRIA_AXIAL;
}
...
}
Traslación
Se sitúa el extremo de un segmento paralelo al vector de traslación (v.t.) sobre el punto en la
figura original y el otro extremo en el punto homólogo
Método aplicarTraslacion
public class Transformaciones{
...
public void aplicarTranslacion(double dX, double dY) {
Puntos puntos = new Puntos();
for (Punto punto : original.getPuntos()) {
int xO = punto.x;
int yO = punto.y;
int xH = (int) (xO + dX);
int yH = (int) (yO + dY);
puntos.add(new Punto(xH, yH, 2, Color.RED));
}
homologa = new Poligono(puntos, Color.GREEN);
tipoTransformacion = TRASLACION;
}
...
}
Giro
Se traza por el punto de la imagen original un arco con centro en el centro de giro (C.G.) que
abarque el ángulo de giro
• Elemento característico: Centro de giro, ángulo de giro.
• Propiedades:
◦ No es Involutivo:
◦ Directa: Conserva la relación de ordenación en el plano.
Método aplicarGiro
public class Transformaciones{
...
public void aplicarRotacion(double angulo) {
double rad = Math.toRadians(angulo);
Puntos puntos = new Puntos();
for (Punto punto : original.getPuntos()) {
int xO = punto.x;
int yO = punto.y;
int xH = (int) (xO * Math.cos(rad) - yO * Math.sin(rad));
int yH = (int) (xO * Math.sin(rad) + yO * Math.cos(rad));
puntos.add(new Punto(xH, yH, 2, Color.RED));
}
homologa = new Poligono(puntos, Color.GREEN);
tipoTransformacion = ROTACION;
}
...
}
Homotecia (Escalado)
Se traza la recta que contiene al punto de la imagen original y al centro de homotecia (C.H.) y
a partir del C.H., la distancia dada por la razón de homotecia (k) por la longitud entre el C.H.
y el punto original.
• Propiedades:
◦ No es Involutivo: