Está en la página 1de 6

Representacin Matricial de las

Trasformaciones Afines

Transformaciones Afines y su
representacin matricial

Utilizando este concepto, es posible tratar todas


las transformaciones afines en un ambiente
lineal al agregar una tercera dimensin a la
representacin de los puntos del vector.
La clase AffineTransform tiene constructores y
mtodos que establecen directamente las
primeras dos filas de la matriz de
transformacin:

Matemticamente una transformacin afn


puede ser representada por una matriz 3 x 3.
Se requiere de una matriz de 3 x 3 en lugar de
una de 2 x 2, debido a que las transformaciones
tales como las traslaciones no son lineales en un
espacio 2D.

AffineTransform(double m00, double m10, double


m01, double m11, double m02, double m12)
AffineTransform(float m00, float m10, float m01, float
m11, float m02, float m12)
AffineTransform(double[ ] flatmatrix)
AffineTransform(float[ ] flatmatrix)
void setTransform(AffineTransformaf)
void setTransform(double m00, double m10, double
m01, double m11, double m02, double m12)

Debido a que la ltima fila de una matriz de


transformacin afn siempre es (001), se omite en la
lista de parmetros.

Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.

setToRotation(double theta)
Una rotacin del ngulo sobre el origen es
representado con la matriz:
[ cos() -sin()
0
]
[ sin() cos()
0
]
[
0
0
1
]
AffineTransform(double m00, double m10, double m01,
double m11, double m02, double m12)
AffineTransform(cos() , sin() , -sin(), cos(), o, 0)

setToScale(double sx, double sy)


La traslacin por la cantidad tiene la matriz:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
AffineTransform(double m00, double m10, double
m01, double m11, double m02, double m12)

setToRotation(double theta, double x, double y)


Una rotacin del ngulo sobre el los puntos (x, y)
es representado con la matriz:
[ cos() -sin() x-x*cos()+y*sin () ]
[ sin() cos() y-x*sin( )-y*cos() ]
[
0
0
1
]
AffineTransform(double m00, double m10, double m01,
double m11, double m02, double m12)
AffineTransform(cos(), sin(), -sin(), cos(), xx*cos()+y*sin () , y-x*sin( )-y*cos() )

setToTranslation(double tx, double ty)


La matriz de representacin est dada por:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
AffineTransform(double m00, double m10, double
m01, double m11, double m02, double m12)
AffineTransform(1, 0, 0, 1, tx, ty)

AffineTransform(sx, 0, 0, sy, 0, 0)

Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.

La transformacin de la cual no existe mtodo es


la de reflejar. Sin embargo, se puede definir al
establecer su matriz.
Matriz que define el reflejar sobre el eje x:
[ -1 0 0 ]
[ 0 1 0 ]
[ 0 0 1 ]
AffineTransform(double m00, double m10, double
m01, double m11, double m02, double m12)
AffineTransform(-1, 0, 0, 1, 0, 0)

setToShear(double shx, double shy)


El sesgar por los factores shx y shy est
representado por la siguiente matriz:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]

Matriz que define el reflejar sobre el eje y:


[ 1 0 0 ]
[ 0 -1 0 ]
[ 0 0 1 ]
AffineTransform(double m00, double m10, double
m01, double m11, double m02, double m12)
AffineTransform(1, 0, 0, -1, 0, 0)

Asignacin
Utilizando matrices grafica las figuras de:

AffineTransform(double m00, double m10, double


m01, double m11, double m02, double m12)
AffineTransform(1, shy, shx, 1, 0, 0)

Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.

Logo Escalar
TriForce

Composicin de transformaciones

Composicin de
Transformaciones Afines

Cualquier composicin de transformaciones


afines sigue siendo una transformacin afn.
Una transformacin puede descomponerse en
una serie (normalmente ms simples) de
transformaciones.

Las transformaciones pueden combinarse para


formar nuevas transformaciones.
Por ejemplo, se puede aplicar una traslacin
seguida de una rotacin y esta a su vez seguida
por otra traslacin.

Las transformaciones de una transformacin


compuesta son aplicadas de derecha a izquierda.

Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.

Si se necesita una rotacin sobre el punto (3, 4) a


30 grados, primero se realiza la traslacin para
mover el punto (3, 4) al origen.
Despus se realiza una rotacin de 30 grados
sobre el origen.
Finalmente se puede trasladar el origen de
regreso al punto (3, 4).
Al combinar las tres transformaciones,
obtendremos la transformacin requerida.

En Java 2D, la clase AffineTransform


proporciona los siguientes mtodos que
soportan las transformaciones compuestas:

Estos mtodos no limpian las transformaciones


existentes en los objetos actuales, sino que
combinan las transformaciones actuales con las
nuevas especificadas.
Las nuevas transformaciones son aadidas a la
derecha de las actuales.

Es posible combinar las transformaciones


actuales con otro objeto de AffineTransform:

void rotate(double theta)


void rotate(double theta, double x, double y)
void scale(double sx, double sy)
void shear(double shx, double shy)
void translate(double tx, double ty)

void concatenate(AffineTransformtx)
void preConcatenate(AffineTransformtx)

El primer mtodo concatena la segunda


transformacin a la derecha de la actual.
El segundo mtodo concatena la segunda
transformacin a la izquierda de la actual.

Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.

Cabe notar que el orden de la composicin de la


transformacin es de izquierda a derecha, y los
mtodos
anteriores,
excepto
el
de
preConcatenate, concatena la transformacin a
la derecha.
Si se crea una transformacin de composicin al
llamar
a
los
mtodos
mencionados
anteriormente, las transformaciones son
aplicadas en el orden opuesto a la secuencia del
llamado.

Asignacin
Utilizando composicin de transformaciones
grafica las figuras de:
Logo Escalar
TriForce

Por ejemplo:
AffineTransformtransform = new AffineTransform();
transform.rotate(Math.PI/3);
transform.scale(2, 0.3);
transform.translate(100, 200);

La primera transformacin a aplicar es la


traslacin y la ltima es la rotacin.

Bibliografa
H. Zhang, D. Liang. Computer Graphics using
JAVA 2D and 3D. (2007). Upper Saddle River,
EEUU: Pearson Prentice Hall.
L. Ammeraal. Computer Graphics for JAVA
programmers. (1998). New York, EEUU: Wiley.

Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.

También podría gustarte