Documentos de Académico
Documentos de Profesional
Documentos de Cultura
cap=006c
Transformaciones Afines
^
Una transformacin es una funcin que acepta un punto y lo convierte - siguiendo alguna lgica o
algoritmo - en otro punto. Asimismo se puede decir de una transformacin de un vector a otro
vector. Si usamos coordenadas homogneas, podemos representar cualquier transformacin usando
la misma funcin para aceptar tanto puntos como vectores. El problema es que esta definicin es
demasiado general para nuestros propsitos. Como vamos a estar manejando objetos geomtricos
ms complicados que puntos y vectores, sera imprctico aplicar la misma transformacin a cada
punto y vector que compone nuestros objetos en nuestra escena y en nuestra imagen.
Necesitamos limitar las transformaciones que queremos usar. La restriccin ms importante es la
linealidad. Sin entrar en mucho detalle, el uso de transformaciones lineales supone que una lnea se
convierte en una lnea. De esta manera, podemos transformar los puntos finales que describen un
segmento para as transformar tal segmento, sin tener que transformar todos los puntos que
comprenden tal segmento. Usando coordenadas homogneas, tales transformaciones implicarn
una multiplicacin matricial. Podemos representar tal transformacin entre a y b, que pueden
representar tanto puntos como vectores, de esta manera,
a = b M
Como podemos ver, esta frmula es idntica a la que usamos para el cambio de marco de referencia.
Por lo tanto, una transformacin lineal corresponde a un cambio de marco. Dicho esto, declaramos
que una transformacin es a) un cambio de representacin de los objetos de un marco de referencia
a otro o b) un cambo de las figuras de los objetos dentro del mismo marco de referencia.
Volviendo a la matriz en coordenadas homogneas,
M =
( a11 a12 0 )
( a21 a22 0 )
( a31 a32 1 )
vemos que slo tenemos 6 elementos con los que trabajar de los 9 que existen en una matriz de 3x3.
Tcnicamente, decimos que esta matriz tiene 6 grados de libertad. Sin embargo, al aplicar este tipo
de matrices para transformar un punto o un vector, podemos deducir dos tipos de matrices
diferentes. Como un vector se define as,
v = ( vxvy 0 )
( a11 a12 0 )
( a21 a22 0 )
( 0 0 1 )
32
( a11 a12 0 )
( a21 a22 0 )
( a31 a32 1 )
Por lo tanto, existen 4 grados de libertad para una transformacin de vectores, pero usamos los 6
grados para las transformaciones afines con puntos.
Operaciones
^
( a11 a12 0 )
M = ( a21 a22 0 )
( a31 a32 1 )
Traslacin
Se trata de una operacin que desplaza un punto una distancia fija en una direccin y sentido
concretos. El parmetro que se necesita es simplemente un vector a modo de desplazamiento: d =
( d , d ),
x
P = P + d
donde,
P = ( PxPy 1 )
P = ( PxPy 1 )
d = ( dxdy 0 )
Figura 11 - Traslacin de
varios puntos por un vectord
Como vemos, una traslacin trata de una suma. Esto va en contra de la multiplicacin matricial que
hemos estado aplicando hasta estos momentos. Sin embargo, no tenemos un grave problema al usar
coordenadas homogneas,
P = P T
donde,
( 1 0 0 )
T = ( 0 1 0 )
( dxdy 1 )
Analizando esta matriz, vemos que tiene 2 grados de libertad. Por ello, solemos describir una
traslacin como una funcin que acepta dos parmetros: T(d ,d ).
x
Como no podemos conseguir el mismo resultado con una matriz de 2x2, se usa una matriz de 3x3 y
coordenadas homogneas como una forma ingeniosa de convertir una suma a una multiplicacin.
Esto nos permitir "encadenar" las transformaciones como multiplicaciones entre matrices. Con una
suma de por medio, no podrmos hacer tal "encadenacin", ya que las multiplicaciones se deben
realizar antes de las sumas.
Podramos calcular la inversa de la matriz de traslacin con el algoritmo general. Sin embargo, para
la traslacin, existe una solucin sencilla basada en la geometra. La inversa de una traslacin es
sencillamente otra traslacin en el sentido contrario. Esto es,
T =
(
(
(
1 0 0 )
0 1 0 )
dxdy 1 )
T-1 =
( 1 0 0 )
( 0 1 0 )
( -dx -dy 1 )
( 1 0
( 3 -1
( -4 5
0 )
1 ) (
1 )
0 )
Esta operacin sirve para modificar proporcional, pero no necesariamente uniformemente, los
valores que representan los puntos o vectores a travs de dos factores; uno para cada dimensin.
Este factor multiplica cada valor de la entidad - punto o vector - en cuestin aumentando o
reduciendo tal valor. Al aplicar esta operacin a un objeto compuesto por segmentos, el resultado
visual ser el de un cambio de tamao. Algebraicamente, expresamos esta operacin de la siguiente
manera:
Px = Px * sx
Py = Py * sy
donde, P contiene las coordenadas del punto original, P las del punto transformado, y s y s son los
factores para el cambio de escala:
x
P = ( PxPy 1 )
P = ( PxPy 1 )
donde,
S =
( sx 0 0 )
( 0 sy 0 )
( 0 0 1 )
Figura 13 - Cambio de
escala del punto P por
los factores sx y sy
Como ocurre con la matriz de traslacin, la matriz para el cambio de escala tambin tiene 2 grados
de libertad. Asimismo podemos representar esta operacin como una funcin que acepta dos
parmetros: S(s ,s ).
x
Adems de agrandar y reducir el tamao, podemos crear el efecto de reflejo al usar nmeros
negativos. Tambin hay que tener en cuenta que al multiplicar por un punto, ste puede cambiar de
posicin. Como esto no ocurre con el origen, (0,0), podemos multiplicar cualquier factor por este
punto, sin variarlo. Por lo tanto, se suele elegir el origen para fijar un punto al aplicar un cambio de
escala.
La inversa de una matriz de cambio de escala es simplemente la inversa de la multiplicacin: la
divisin. Esto es,
( sx 0 0 )
S = ( 0sy 0 )
( 0 0 1 )
( 1/sx 0
S-1 = ( 0
1/sy
( 0
0
0 )
0 )
1 )
Ejemplo
Veamos un ejemplo, para aumentar y aplicar reflejo al siguiente punto, P = ( 3, -1 ), por los
factores, s = 2 y s = -4,
x
P = P S(2,-4)
( 2 0
( 3 -1
( 0 0
( PxPy 1 ) =
0 )
1 ) (
1 )
0 -4
0 )
P = ( 6 4 1 )
En esta operacin, el punto es transformado siguiendo el camino de una circunferencia con el origen
como su centro. El camino a recorrer depende del ngulo indicado. Las siguientes ecuaciones
describen esta operacin usando forma polar,
Px = r * cos
Py = r * sen
Px = r * cos( + )
Py = r * sen( + )
donde, P es el punto original, P el punto transformado, r es el radio en forma polar, y y son los
ngulos inicial y final, respectivamente:
P = ( PxPy 1 )
P = ( PxPy 1 )
Usando identidades trigonomtricas, sustituimos los cosenos y senos de una suma de ngulos por
expresiones equivalentes. Obtenemos la siguiente ecuacin,
Px = r * cos cos - r * sen sen
Py = r * sen cos + r * cos sen
=
=
Px cos - Pysen
Pxsen + Py cos
donde,
( cos
R = ( -sen
( 0
sen
cos
0
0 )
0 )
1 )
sen 0 )
cos 0 )
1 )
cos -sen -
0 )
cos -sen
0 )
R-1 = ( -sen -
( 0
0
cos -
1 )
0 )
=
(
(
0
sen
0
cos 0 )
1 )
Ejemplo
Veamos un ejemplo para rotar el siguiente punto, P = ( 3, -1 ), por el ngulo = /4 (45).
P = P R(/4)
( cos /4 sen/4 0 )
( PxPy 1 ) = ( 3 -1 1 ) ( -sen /4 cos /4
( 0
0
1 )
( 2/2
P = ( 3 -1 1 ) ( -2/2
( 0
2/2
2/2
0
0 )
0 )
0 )
1 )
P = ( 2,8284 1,4142 1 )
Sesgado
La transveccin o el sesgado trata de mudar todas las entidades en la misma direccin a lo largo de
un eje. Esta combinacin de traslacin y cambio de escala "deforma" las entidades, tirando de ellas
en ambos sentidos en la misma direccin. La deformacin se basa en el ngulo, , formado por el eje
elegido y la lnea que corta el eje elegido y contiene los nuevos puntos transformados. Las ecuaciones
que describen esta operacin a lo largo del eje X son las siguientes,
Px = Px + Pycotg
Py = Py
donde,
P = ( PxPy 1 )
P = ( PxPy 1 )
donde,
(
Hx = (
(
1
0 0 )
cotg 1 0 )
0
0 1 )
Realizar la operacin inversa de un sesgado supone otro sesgado con el mismo ngulo en forma
negativa. Esto es,
(
Hx = (
(
1
0 0 )
cotg 1 0 )
0
0 1 )
(
Hx-1 = (
(
1
0 0 )
cotg - 1 0 )
0
0 1 )
(
1
0 0 )
= ( -cotg 1 0 )
(
0
0 1 )
Para conseguir la matriz para el sesgado a lo largo del eje Y, derivamos las ecuaciones de una manera
muy parecida:
Px = Px
Py = Pxcotg + Py
0 )
0 )
1 )
Ejemplo
Veamos un ejemplo sesgando el punto, P = ( 3, -1 ), por el eje X formando el ngulo = /4 (45).
P = P Hx(/4)
(
1
( PxPy 1 ) = ( 3 -1 1 ) (
(
0
( 1
P = ( 3 -1 1 ) ( 1
( 0
0
1
0
0 0 )
cotg /4 1
0 1 )
0 )
0 )
0 )
1 )
P = ( 2 -1 1 )
Las transformaciones bsicas que se han visto hasta ahora controlan las entidades - puntos y
vectores - que operan, con resultados diferentes. Analizando estas transformaciones, podemos
clasificarlas segn el efecto, que provocan, de las entidades resultantes. Se suele hablar de
transformaciones de "cuerpo rgido", que son aquellas transforamciones cuyos cuerpos no sufren
deformaciones. Cualquier secuencia de traslaciones y rotaciones cumple con este criterio, ya que no
distorsiona el objeto, conservando el paralelismo y las longitudes de las lneas al igual que los
ngulos. Sin embargo, operaciones que incluyan cambios de escala y sesgados moldean los cuerpos,
por lo que no conservan las longitudes de las lneas ni los ngulos. Aun existiendo estas diferencias,
s podemos garantizar que cualquier transformacin afn conserva el paralelismo de las lneas.
Con estas transformaciones, podemos crear nuevas operaciones compuestas por las operaciones
bsicas. Para llevar a cabo esta composicin, aplicamos una serie de transformaciones
multiplicndolas por cada entidad a transformar. Multiplicamos la matriz, que representa la
transformacin, por el punto o vector. Esto es,
P
P
P
P
P
.
.
.
P
P
P
P
P
P
M0
M1
M2
M3
M4
P Mn
P P M0M1M2 Mn
.
.
.
Pn
P0M
P1M
P2M
P3M
PnM
Composicin
Veamos algunas transformaciones compuestas que nos pueden ser tiles en el manejo de nuestros
modelos 2D. Debemos tener presente que una secuencia de transformaciones no es necesariamente
igual
a
la
misma
secuencia
en
diferente
orden.
Por
ejemplo,
la
secuencia T R T S S T T R S T R T. Obviamente, esto tiene sentido, ya que no existe la
propiedad conmutativa para las matrices.
El primer ejemplo que trataremos es rotar un objeto por un punto fijo. Como ya hemos explicado, la
rotacin se realiza por el origen (0,0). Para rotar por otro punto, simplemente mudamos ese punto
fijo al origen, rotamos por el origen, y luego devolvemos el punto a las coordenadas del punto fijo.
Algebraicamente, representamos esta idea de la siguiente manera:
M = T(-pf) R() T(pf)
(
cos sen
0 )
M = (
-sen
cos
( (xf - xf cos + yfsen)
0 )
(yf - xfsen - yf cos )
1 )
Ejemplos
Veamos unos ejemplos prcticos.
1.
2.
3.
Tenemos dos puntos, p = (4,2) y q = (-3,1). Queremos rotar estos dos puntos
alrededor del punto (fijo), F = (2,-1), por un ngulo, = /6 (30),
p = p T( (-2,1) ) R(/6) T( (2,-1) )
q = q T( (-2,1) ) R(/6) T( (2,-1) )
sen/6
0 )
cos /6
0 )
(-1 - 2 sen/6 + cos /6) 1 )
( 0,8660 0,5
4 2 1 ) ( -0,5
0,8660
( -0,2321 -1,1340
( 0,8660
q = ( -3 1 1 ) ( -0,5
0,5
0,8660
0 )
0 )
1 )
0 )
0 )
( -0,2321 -1,1340
1 )
5.
( sx 0
0 )
M = (
0sy
0 )
( xf(1 - sx) yf(1 - sy)
6.
1 )
p
q
r
s
=
=
=
=
p
q
r
s
T(
T(
T(
T(
(-1,-2)
(-1,-2)
(-1,-2)
(-1,-2)
)
)
)
)
S(2,
S(2,
S(2,
S(2,
0,5)
0,5)
0,5)
0,5)
T(
T(
T(
T(
(1,2)
(1,2)
(1,2)
(1,2)
)
)
)
)
0
0,5
1
0 )
0 )
1 )
Ahora multiplicamos cada punto, que describe nuestro objeto, por la matriz
resultante,
4
( 2
1 ) ( 0
( -1
0
0,5
1
0 )
0 )
1 )
q = ( -3
( 2
1 ) ( 0
( -1
0
0,5
1
0 )
0 )
1 )
r = ( -2 -2
( 2
1 ) ( 0
( -1
0
0,5
1
0 )
0 )
1 )
s = (
( 2
1 ) ( 0
( -1
0
0,5
1
0 )
0 )
1 )
p = (
=
=
=
=
( 7, 2 )
( -7, 1,5 )
( -5, 0 )
( 5, 1 )
Otro claro ejemplo del uso de las transformaciones tiene que ver con la creacin de nuevos objetos.
En muchas ocasiones, queremos mostrar varios objetos basados en una misma figura. Sera algo
engorroso describir las coordenadas exactas que describen cada instancia basada en la misma figura.
Por ello, definimos un juego de diferentes objetos para luego crear cada objeto escogido de nuestro
juego, que queremos mostrar en nuestra escena. Usando traslaciones, podemos colocar todas las
instancias de cualesquier objetos en nuestra escena los cuales pueden estar descritos de una sola
manera. Por supuesto, tambin podemos modificar cada instancia antes de colocarla en la escena.
Esto supone aplicar otras transformaciones a nuestros objetos antes de trasladarlos a sus respectivas
posiciones finales.
Ejemplo
Describimos un tringulo, t, con la siguiente lista de vrtices: v = ( (0,0), (1,1), y (2,0) ). Vamos a
crear cuatro tringulos basados en esta descripcin: t , t , t , y t . Sin embargo, aplicaremos varias
transformaciones a cada uno de los tringulos para colocarlos en nuestra escena. Describamos
nuestras intenciones algebraicamente,
0
t0
t1
t2
t3
=
=
=
=
t
t
t
t
Figura 23 - El tringulo
original, t
Las matrices resultantes para cada serie de transformaciones son las siguientes:
( -0,8660 -0,5
0 )
M0 = ( -1
1,7321 0 )
( 3
4
1 )
( -1
-0,5
0 )
M1 = ( 3,7321 0,8660 0 )
( 1
-6
1 )
( 0,25
1,1547
M2 = ( 0,4330 4
( -5
0
0 )
0 )
1 )
( -0,125
M3 = ( 0
( -6
0 )
0 )
1 )
0
-0,2
-5
0
1
2
0
1
0
1 ) M0
1 ) M0
1 ) M0
t1:v0 = (
t1:v1 = (
t1:v2 = (
0
1
2
0
1
0
1 ) M1
1 ) M1
1 ) M1
t2:v0 = (
t2:v1 = (
t2:v2 = (
0
1
2
0
1
0
1 ) M2
1 ) M2
1 ) M2
t3:v0 = (
t3:v1 = (
t3:v2 = (
0
1
2
0
1
0
1 ) M3
1 ) M3
1 ) M3
Como se puede ver, debemos aplicar las transformaciones a todos los puntos que representan los
vrtices de cada tringulo. Al final, obtendremos la siguiente informacin para los cuatro tringulos:
t0:v0 = (
t0:v1 = (
t0:v2 = (
3 4 1 )
1,1340 5,2321
1,2680 3 1 )
t1:v0 = (
t1:v1 = (
t1:v2 = (
1 -6 1 )
3,7321 -5,634
1 -7 1 )
1 )
1 )
t2:v0 = ( -5 0 1 )
t2:v1 = ( -4,3170 5,1547 1 )
t2:v2 = ( -4,5 2,3094 1 )
t3:v0 = ( -3 -2 1 )
t3:v1 = ( -4 -2,2 1 )
t3:v2 = ( -5 -2 1 )
Modelado
^
Hasta ahora hemos visto la aplicacin de las transformaciones afines a puntos. Sin embargo,
nuestras escenas seguramente no se compondrn de puntos individuales, sino de objetos
compuestos de segmentos. Asimismo, estos segmentos se compondrn de puntos. Como no
podemos manipular todos los puntos individualmente en la prctica, s podemos manipular los
puntos finales del segmento. Por lo tanto, describiremos nuestros objetos segn los puntos y los
segmentos conectados entre ellos.
Representacin
Para describir cada objeto, necesitaremos una forma de organizar la informacin: los puntos y
segmentos. Adems, capturaremos la geometra - puntos y segmentos - y la topologa: la asociacin
de los puntos para formar la figura. Si pensamos jerrquicamente, daremos con la idea de
descomponer un objeto geomtrico en otros objetos ms pequeos y fundamentales. Estos objetos
fundamentales pueden ser representados como polgonos. Cada polgono a su vez se forma de
vrtices y aristas. Para describir las aristas de un polgono, crearemos una lista de vrtices. De esta
manera, optimizamos la cantidad de vrtices que usaremos. Como seguramente tendremos
polgonos que coincidan en una o varias aristas de otros polgonos, entonces tambin existirn
vrtices que coinciden. Por ello, es ptimo guardar una copia de cada vrtice y luego referirnos a
cada uno, en lugar de copiarlos. Podemos ver esta estrategia en el siguiente esquema acerca de la
organizacin jerrquica de la informacin que describe un molino.
Tenemos dos formas de representar la informacin en las matrices y vectores. Los elementos de cada
fila pueden representar los valores para las coordenadas de los ejes X e Y. Por otro lado, tambin
podramos guardar las coordenadas en las columnas. Esto supondra cambiar el orden de las
multiplicaciones matriciales. Tpicamente, hablamos de operaciones matriciales de fila, con los
elementos en cada fila, y las de columna, donde la informacin se guarda en las columnas.
Dependiendo del tipo de las operaciones matriciales, tambin nos interesa hablar de la manera de
organizar la informacin de nuestros modelos. Geomtricamente, tenemos que elegir los ejes y la
relacin entre ellos. Esta eleccin dictar la colocacin y orientacin de nuestros objetos
geomtricos. Tambin definir el sentido de las rotaciones. Por ello, solemos hablar de la regla de la
mano derecha o de la mano izquierda. Esto hace alusin al uso de una mano u otra para determinar
la relacin entre los ejes y principalmente para las rotaciones. Como en dos dimensiones slo
tenemos dos ejes, no hablaremos de esta regla ya que slo existe una orientacin positiva sobre los
ejes. Volveremos a tratar este concepto cuando veamos el modelado en tres dimensiones.
Hasta ahora y en el resto de este curso, usaremos las operaciones matriciales de fila y la regla de la
mano izquierda.
Vista
^
Despus de todas las transformaciones, que nos interesan aplicar a los objetos en nuestra escena,
tenemos que convertir nuestra escena al medio que queremos. Nuestra escena se compone de los
objetos geomtricos. Sin embargo, la parte que queremos ver - la vista - se basa en un rea que
envuelve estos objetos geomtricos de la escena. Tpicamente, querremos mostrar la vista, como un
rea rectangular, en toda la pantalla, en pxeles. Por supuesto, existirn ocasiones en las que
elegiremos una parte de la pantalla que contendr nuestra vista. El paso de nuestro mundo o
universo en 2D a la pantalla en 2D no es uno complicado, pero s es necesario.
Podemos afrontar este problema como un cambio de representacin. Tenemos el marco de
referencia de nuestro universo descrito como \ y queremos representar los objetos geomtricos en
nuestra escena en el marco de referencia de la pantalla descrito como \. Las siguientes ecuaciones
describen el marco de referencia de la pantalla en trminos del marco de nuestro universo,
ux = sxvx
uy = -syvy
Q0 = qxvx + qyvy
donde,
s es el factor para el cambio de escala en el eje X; es decir, la proporcin de anchuras de la escena y
de
la
pantalla:
d /d
s es el factor para el cambio de escala en el eje Y; es decir, la proporcin de anchuras de la escena y
de
la
pantalla:
d /d
(q ,q ) es el punto en la esquina superior izquierda que encuaderna nuestra escena. Este punto
representar el origen en la pantalla.
x
Ejemplo
Tenemos dos tringulos, s y t, en nuestra escena. El marco de referencia que representa nuestro
universo es el siguiente: \. La vista de nuestra escena ser representada por el cuadrado cuya
esquina superior izquierda es (-3,2) y cuyo lado mide 8. La siguiente figura 32 muestra nuestra
escena y las dimensiones de nuestra vista en el marco de referencia del universo.
0 )
0 )
1 )
Para poder cambiar la representacin, necesitamos calcular la inversa de la matriz, M, que es,
( 50
M-1 = ( 0
( 150
0
0 )
-50 0 )
100 1 )
Podemos ver el resultado del cambio de representacin de los vrtices de ambos tringulos en la
figura 33.
vista para el eje X, y las proporciones de la altura de la pantalla con respecto a la altura de la vista
para el eje Y. En forma matricial, tenemos la siguiente transformacin afn,
M = T(-qx,-qy) S(sx,-sy)
donde,
s es la proporcin de las anchuras de la pantalla y de la escena: d /d
s es la proporcin de las alturas de la pantalla y de la escena: d /d
(q ,q ) es el punto que representar el origen en la pantalla de la esquina superior izquierda del
rectngulo que encuaderna nuestra escena.
x
Al final, conseguimos la misma matriz que la solucin obtenida previamente al realizar un cambio de
marco de referencia,
( 50
M-1 = ( 0
( 150
0
0 )
-50 0 )
100 1 )
Apuntes de Grficos
Transformaciones 2D
Concepto
Traslacin
Operacin
Escala
Transformaciones
proyectivas
Rotacin
Cizalla
Reflexin
Transformaciones afines
Proyeccion
es
Sistemas
de
coordenada
s
Concepto
(x,y,w)
Modo de operacin
1. Forma general:
2. Lneas rectas se transforman en lneas rectas
3. Se mantienen los puntos de interseccin
1. Punto interseccin de rectas transformadas es transformado de
punto interseccin
4. Secciones cnicas se mantienen como tales
Transformaciones afines en P2
1. Forma general:
y siendo invertible
1. Vector de traslacin
2. Transformacin:
4. Matriz de transformacin:
):
1. Transformacin:
2. Paso a coordenadas homogneas
3. Matriz de transformacin:
1. Coordenadas polares
2. Transformacin:
3. Matriz de transformacin:
):
1. Supongamos centro en
(xc,yc)
y ngulo
2. Rotamos
2. Transformacin final
3. Transformacin inversa
Cizalla (shearing)
1. Transformacin:
2. Matriz de transformacin:
1. Transformacin:
2. Matriz de transformacin:
2. Reflejamos
2. Transformacin final
3. Comprobacin
Reflexin respecto de cualquier recta
2. Transformacin final
y=mx+b
con el eje X:
1. Transformacin
2. Propiedades
1. Proyeccin no tiene inversa
2. No est definida para todos los puntos (ej:
(0,1,0))
2. Matriz de transformacin
1. Centro de proyeccin
(xc,yc,1)
(xc,yc,wc):
(xc,yc,wc)=(1,m,0)
1. Centro de proyeccin
(xc,yc,wc)
y recta
y=mx+b
2. Transformacin
Traslacin y rotacin vistas ms arriba
3. OJO! P'w es la matriz de proyeccin para el centro de
proyeccin transformado:
(x0,y0,1)y
http://arantxa.ii.uam.es/~pedro/graficos/practicas/GRAF_2011-2012/hojas/hoja-03.htm