TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una...

34
Transformaciones Geométricas Bidimensionales 3 TRANSFORMACIONES GEOMÉTRICAS BIDIMENSIONALES Computación Gráfica 35

Transcript of TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una...

Page 1: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

3 TRANSFORMACIONES

GEOMÉTRICAS BIDIMENSIONALES

Computación Gráfica 35

Page 2: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Con los procedimientos para desplegar primitivos de salida y sus atributos, podemos crear una variedad de imágenes y gráficas. En muchas aplicaciones también es necesario alterar o manipular los despliegues. Se crean aplicaciones de diseño y planos de construcciones al ordenar las orientaciones y los tamaños de las partes que componen la escena. Las transformaciones geométricas básicas son traslación, rotación y escalación. Otras transformaciones que se aplican con frecuencia en objetos incluyen la reflexión y el recorte. Primero analizamos los métodos para realizar transformaciones geométricas. 3.1 Transformaciones Básicas Aquí, estudiamos primero los procedimientos generales para aplicar parámetros de traslación, rotación y escalación para cambiar la posición y el tamaño de objetos bidimensionales. Consideramos cómo se puede expresar ecuaciones de transformación en una formulación de matriz más conveniente que permite combinar de manera eficiente transformaciones de objetos. 3.1.1 Traslación Se aplica una traslación en un objeto para cambiar su posición a lo largo de la trayectoria e una línea recta de una dirección de coordenadas a otra. Convertimos un punto bidimensional al agregar las distancias de traslación, tx y ty a la posición de coordenadas original (x, y) para mover el punto a una nueva posición (x’, y’) x’ = x + tx , y’ = y + ty (3-1) El par de distancia de traslación (tx , ty) se llama vector de traslación o vector de cambio. Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones de coordenadas y el vector de traslación :

P = , P’ = , T = (3-2)

2

1

xx

2

1

''

xx

y

x

tt

Esto nos permite expresar las dos ecuaciones de traslación bidimensional en la forma de

matriz :

P’ = P + T (3-3)

36 Dpl. Ing. Carlos Balderrama Vásquez

Page 3: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

Figura 3-1Traslación de un punto de la posición P a la posición P’ con el vector de traslación T. La traslación es una transformación de cuerpo rígido que mueve objetos sin deformarlos. Es decir, se traslada cada punto del objeto la misma distancia. Se traslada un segmento de línea recta al aplicar la ecuación de transformación 3-3 en cada uno de los extremos de la línea y se vuelve a trazar la línea entre las nuevas posiciones de los extremos. Los polígonos se trasladan al sumar el vector de traslación a la posición de coordenadas de cada vértice y se vuelve a generar el polígono utilizando el nuevo conjunto de coordenadas de vértices y las especificaciones actuales de los atributos. La figura 3-2 ilustra la aplicación de un vector de traslación específico para mover un objeto de una posición a otra.

Figura 3-2 Movimiento de un polígono de la posición (a) a la posición (b) con el vector de traslación (-2.20, 3.72).

Computación Gráfica 37

Page 4: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

3.1.2 Rotación

Se aplica una rotación bidimensional en un objeto al cambiar su posición a lo largo de la trayectoria de una circunferencia en el plano de xy. Para generar una rotación, especificamos un ángulo de rotación θ y la posición (xr , yr ) del punto de rotación (o punto pivote) en torno al cual se gira el objeto (figura 3-3). Los valores positivos para el ángulo de rotación definen rotaciones en sentido opuesto a las manecillas del reloj alrededor del punto pivote, como en la figura 3-3, y los valores negativos giran los objetos en la dirección del reloj. También es posible describir esta transformación como una rotación sobre el eje de rotación que es perpendicular al plano de xy y pasa a través del punto pivote. Primero determinamos las ecuaciones de transformación para la rotación de la posición de un punto P cuando el punto pivote está en el origen de las coordenadas. Las relaciones angulares y de coordenadas de la posiciones de puntos originales y transformadas se ilustran en la figura 3-4. Al utilizar identidades trigonométricas estándar, podemos expresar las coordenadas transformadas en términos de los ángulos θ y ϕ como : x’ = r cos (ϕ + θ) = r cos ϕ cos θ - r sen ϕ sen θ (3-4)

y’ = r sen (ϕ + θ) = r cos ϕ sen θ + r sen ϕ cos θ Las coordenadas originales del punto en las coordenadas polares son :

x = r cos ϕ , y = r sen ϕ (3-5) Al sustituir expresiones 3-2 en las 3-4, obtenemos las ecuaciones de transformación para girar un punto en la posición (x, y) a través de un ángulo θ alrededor del origen :

x’ = x cos θ - y sen θ (3-6) y’ = x sen θ +y cos θ

Con las representaciones del vector de columna 3-2 para las posiciones de coordenadas, podemos expresar las ecuaciones de rotación en la forma de matriz:

P’ = R · P (3-7)

Figura 3-3 Rotación de un objeto través del ángulo θ alrededor del punto pivote (x, y).

38 Dpl. Ing. Carlos Balderrama Vásquez

Page 5: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

Figura 3-4 Rotación de un punto desde la posición (x, y) a la posición (x’, y’) a través de un ángulo θ con respecto del origen de las coordenadas. El desplazamiento angular original del punto desde el eje de las x es ϕ. donde la matriz de rotación es :

R =

(3,8) θ

θsencos

−θθ

cossen

Cuando las posiciones de coordenadas se representan como vectores de renglón en vez de vectores de columna, el producto de la matriz en la ecuación de rotación 3-7 se transpone, de modo que el vector de coordenadas de renglón transformado [x’ y’] se calcula como:

P’T = (R · P)T = PT · RT

donde PT = [x y] y se obtiene la transposición RT de la matriz R con sólo cambiar el signo de los términos del seno.

Figura 3-5 Rotación de un punto desde la posición (x, y) a la posición (x’, y’) a través de un ángulo θ con respecto del punto de rotación (x r , y r). En la figura 3-2 se ilustra la rotación de un punto alrededor de una posición pivote arbitraria. Al utilizar las relaciones trigonométricas en esta figura, podemos generalizar las ecuaciones 3-6 para obtener las ecuaciones de transformación para la rotación de un punto con respecto a cualquier posición de rotación específica (x r , y r) :

x’ = x r + (x – x r) cos θ - (y – y r) sen θ (3-9) y’ = y r + (x – x r) sen θ + (y – y r) cos θ

Computación Gráfica 39

Page 6: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Estas ecuaciones generales de rotación difieren de las ecuaciones de rotación 3-6 por la inclusión de términos aditivos, así como los factores de multiplicación en los valores de las coordenadas. 3.1.3 Escalación Una transformación de escalación altera el tamaño de un objeto. Se puede realizar esta operación para polígonos, para multiplicar los valores de coordenadas (x, y) de cada vértice por los factores de escalación s x y s y para producir las coordenadas transformadas (x’, y’): x’ = x · s x , y’ = y · s y (3-10) El factor de escalación s x escala objetos en la dirección de x, mientras el factor de escalación s y lo hace en dirección de y. También se pueden expresar las ecuaciones de transformación 3-10 en la forma matricial:

= · (3-11)

''

yx

0

xs

ys0

yx

P’ = S · P (3-12) Donde S es la matriz de escalación de 2 por 2 en la ecuación 3-11. Se pueden asignar valores numéricos positivos cualesquiera a los factores de escalación s x y s y. Los valores menores que 1 reducen el tamaño de los objetos y los valores mayores que 1 producen una ampliación. Cuando se asigna el mismo valor a s x y s y se genera una escalación uniforme que mantiene las proporciones relativas de los objetos. Cuando s x y s y tienen valores distintos, se obtiene una escalación diferencial. Los objetos que se transforman con las ecuaciones 3-11 se escalan y cambian de posición. Los factores de escalación con valores menores que 1 acercan los objetos al origen de las coordenadas, en tanto que los valores mayores que 1 alejan las posiciones de coordenadas de origen. La figura 3-7 ilustra la escalación de una línea al asignar el valor de 0.2 tanto a s x como a s y en la ecuación 3-11. Tanto la longitud de la línea como la distancia desde el origen se reducen por un factor de ½. Podemos controlar la localización de un objeto escalado al seleccionar una posición, llamada punto fijo, que debe permanecer sin cambios después de la transformación de escalación. Se puede seleccionar las coordenadas para el punto fijo (x f , y f) como uno de los vértices, el centroide del objeto, o cualquier otra posición (figura 3-8). Así, se escala un polígono con respecto del punto fijo al escalar la distancia desde cada vértice al punto fijo. Para un vértice con coordenadas (x, y), se calculan las coordenadas escaladas (x’, y’) como

40 Dpl. Ing. Carlos Balderrama Vásquez

Page 7: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

x’ = x f + (x – x f) s x , y’ = y f + (y – y f) s y (3-13) Podemos volver a expresar estas transformaciones de escalación para separar los términos de multiplicación y de adición : x’ = x · s x + x f (1 - s x ) y’ = y · s y + y f (1 - s y ) (3-14) donde los términos aditivos x f (1 - s x ) y y f (1 - s y ) son constantes para todos los puntos en el objeto.

Figura 3-6 Conversión de un cuadrado (a) en un rectángulo (b) con los factores de escalación s x =2 y s y = 1.

Figura 3-7 Una línea escalada con la ecuación 3-12 al utilizar s x = s y = 0.2 se reduce en tamaño y se aproxima al origen de las coordenadas.

Figura 3-8 Escalación con respecto de un punto fijo seleccionado (x f , y f ).Las distancias desde cada vértice del polígono al punto fijo se escalan mediante las ecuaciones de transformación3-13.

Computación Gráfica 41

Page 8: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

3.2 Representaciones De Matriz Y Coordenadas Homogéneas . En la sección anterior vimos que es posible expresar cada una de las transformaciones básicas en la forma de matriz general P’ = M 1 · P + M 2 (3-15) con las posiciones de coordenadas P y P’ representadas como columnas de vector. La matriz M 1 es matriz de 2 por 2 que contiene factores de multiplicación y M 2 contiene los términos de traslación asociados con el punto pivote o el punto fijo de escalación. Con el fin de producir una secuencia de transformaciones con estas ecuaciones, como escalación seguida por rotación y luego traslación, debemos calcular las coordenadas transformadas un paso a la vez. Primero, se escalan las posiciones de coordenadas, después se giran estas coordenadas escaladas y, por último se trasladan las coordenadas giradas. Para expresar cualquier transformación bidimensional como una multiplicación de matiz, representamos cada posición de coordenadas cartesianas (x, y) con las tres coordenadas homogéneas (x h ,y h , h), donde

x =h

hx , y =

hyh (3-16)

Por tanto, una representación general de coordenadas homogéneas se puede expresar también como (h · x, h · y, h). Para transformaciones geométricas bidimensionales seleccionamos el parámetro homogéneo h como cualquier valor no cero. Así, existe un número finito de representaciones homogéneas equivalentes para cada punto de coordenadas (x, y). Una opción conveniente consiste en solo establecer h = 1. Entonces, se presenta cada posición bidimensional con las coordenadas homogéneas (x, y, 1). Se requieren otros valores para el parámetro h, por ejemplo, en las formulaciones de matriz de transformaciones de vista tridimensionales. Expresar posiciones en coordenadas homogéneas nos permite representar todas las ecuaciones de transformación geométrica como multiplicaciones de matriz. Se representan las coordenadas con vectores de columnas de tres elementos y las operaciones de transformación se expresan como matrices de 3 por 3. Para la traslación, tenemos

= · (3-17)

1''

yx

001

010

1y

x

tt

1yx

que podemos expresar con la forma abreviada P’ = T(t x , t y) · P (3-18)

42 Dpl. Ing. Carlos Balderrama Vásquez

Page 9: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

Con T(t x , t y) como la matriz de traslación de 3 por 3en la ecuación 3-17. Se obtiene el inverso de la matriz de traslación al reemplazar los parámetros de traslación t x y t y con sus valores negativos -t x y -t y. De modo similar, ahora se expresan las ecuaciones de transformación de rotación con respecto del origen de las coordenadas como

= ·

(3-19)

1''

yx

0

cosθθ

sen0cosθ

θsen−

100

1yx

o como P’ = R(θ) · P (3-20) El operador de transformación de rotación R(θ) es la matriz de 3 por 3 en la ecuación 3-19 con el parámetro de rotación θ. Obtenemos la matriz de rotación inversa cuando se sustituye θ con -θ. Por último, ahora se expresa una transformación de escalación con respecto del origen de las coordenadas como la multiplicación de matriz.

1''

yx

= · (3-21)

00

xs

0

0

ys

100

1yx

o P’ = S(s x , sy) · P (3-22) Donde S(s x , sy) es la matriz de 3 por 3 en la ecuación 3-21 con los parámetros s x y sy. Al sustituir sus inversos multiplicativos (1/s x ,1/ sy) se obtienen la matriz de escalación inversa. 3. 3 Transformaciones Compuestas Con las representaciones de matriz de la sección anterior, podemos establecer una matriz para cualquier secuencia de transformaciones como una matriz de transformación compuesta al calcular el producto de la matriz de las transformaciones individuales. La creación de productos de matrices de transformación a menudo se conoce como concatenación o composición de matrices.

Computación Gráfica 43

Page 10: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Para la representación de la matriz de columnas de las posiciones de coordenadas, formamos transformaciones compuestas al multiplicar las matrices de derecha a izquierda. Es decir, cada matriz de transformación premultiplica el producto de las matrices de transformación previas. 3.3.1 Traslaciones Si se aplican dos vectores de traslación sucesivos (t x1 , t y1) y (t x2 , t y2) en la posición de coordenadas P, la localización final P’ se calcula como : P’ = T(t x2 ,t y2) · |T(t x1, t y1) · P | = |T(t x2, t y2) · T(t x1, t y1 )| · P (3-23) donde se representa P y P’ como vectores de columna de coordenadas homogéneas. Podemos verificar este resultado al calcular el producto de la matriz para las dos agrupaciones asociativas. Así mismo, la matriz de transformación compuesta para esta secuencia de transformaciones es

001

010

12

2

y

x

tt

· = (3-24)

001

010

tt

11

1

y

x

001

010

1

tt

++

21

21

yy

xx

tt

o T(t x2 ,t y2) · T(t x1, t y1) = T (t x1, + t x2 , t y1+ t y2) (3-25) que demuestre que dos transformaciones sucesivas son aditivas. 3.3.2 Rotaciones Dos rotaciones sucesivas que se aplican en el punto P producen la posición transformada:

P’ = R (θ2) · {R(θ1) · P} (3-26) = {R (θ2) · {R(θ1)} · P Al multiplicar las dos matrices de rotación, podemos verificar que dos rotaciones sucesivas son aditivas :

44 Dpl. Ing. Carlos Balderrama Vásquez

R(θ2) · R(θ1) = R(θ1+θ2) (3-27)

Page 11: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

de modo que es posible calcular las coordenadas giradas finales con la matriz de rotación compuesta como : P’ = R(θ1+θ2) · P (3-28) 3.3.3 Escalaciones Concatenar matrices de transformación para dos operaciones de escalación sucesivas produce la siguiente matriz de escalación compuesta :

00

2xS

0

0

2yS

100

00

1xS

0

0

1yS

100

= (3-29)

00

· 21 xx SS

0

·0

21 yy SS

100

o S( s x2, sy2) · S(s x1, sy1 ) = S(s x1 · s x2, sy1 · sy2) (3-30) La matriz resultante en este caso indica que las operaciones de escalación sucesivas son multiplicativas. Es decir, si deberíamos triplicar el tamaño de un objeto dos veces en una sucesión, el tamaño final sería de nueve veces el tamaño original. 3.4 Rotación del punto pivote general Con un paquete de graficas que sólo ofrece una función de rotación para girar objetos con respecto del origen de las coordenadas, podemos generar casi cualquier punto pivote seleccionado (x r, y r) al realizar la siguiente secuencia de operaciones de traslación-rotación-traslación. 1. Traslade el objeto de modo que se mueva la posición del punto pivote al origen de las

coordenadas. 2. Gires el objeto con respecto del origen de las coordenadas. 3. Traslade el objeto de manera que se regrese el punto pivote a su posición original.

Computación Gráfica 45

Page 12: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Figura 3-9 Secuencia de transformación para girar un objeto con respecto de un punto pivote específico al utilizar la matriz de rotación R( θ) de la transformación

001

010

1r

r

yx

· · =

0

cosθθ

sen0cosθ

θsen−

100

001

010

−−

1r

r

yx

0

cosθθ

sen0cosθ

θsen−

−−+−

1)cos1()cos1(

θθθθ

senxysenyx

rr

rr

(3-31) Que se puede expresar en la forma

T (x r , y r) · R(θ) · T(-x r, -y r) = R(x r, y r, θ) (3-32)

Donde T(-x r, -y r) = T-1 (x r, y r). En general, es posible determinar una función de rotación para aceptar parámetros para las coordenadas del punto pivote, así como el ángulo de rotación, y generar en forma automática la matriz de rotación de la ecuación 3-31. 3.5 Escalación del punto fijo general La figura 3-10 ilustra una secuencia de transformación para producir escalación con respecto de una posición fija seleccionada (x f, y f) al utilizar una función de escalación que solo puede escalar en relación con el origen de las coordenadas.

1. Traslade el objeto de modo que el punto fijo coincida con el origen de las coordenadas.

2. Escale el objeto con respecto del origen de las coordenadas.

46 Dpl. Ing. Carlos Balderrama Vásquez

Page 13: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

3. Utilice la traslación inversa del paso 1 para regresar el objeto a su posición original.

La concatenación de las matrices para estas tres operaciones produce la matriz de escalación requerida.

001

010

1f

f

y

x · ·

1 − = (3-33)

00

xs

0

0

ys

100

001

0

0

1f

f

y

x

00

xs

0

0

ys

1

)1(

)1(

yf

xf

sy

sx

o T(x f, y f) · S(s x,s y) · T(-x f, -y f) = S(x f, y f , s x,s y) (3-34) Esta transformación se genera de manera automática en sistemas que ofrecen una función de escalación que acepta las coordenadas para el punto fijo. 3.6 Direcciones de escalación Los parámetros s x y s y escalan objetos a lo largo de las direcciones de x y de y. Podemos escalar un objeto en otras direcciones al girar el objeto para alinear las direcciones de escalación deseadas con los ejes de las coordenadas antes de aplicar la transformación de escalación. Suponga que queremos aplicar factores de escalación con valores que se especifican con los parámetros s 1 y s2 en la direcciones que se presentan en la figura 3-11. Para llevar a cabo la escalación sin cambiar la orientación del objeto, primero realizamos una rotación de modo que las direcciones de s y s coincidan con los ejes de x e y , en forma respectiva. Entonces se aplica la transformación de escalación, seguida por una rotación opuesta para regresar los puntos a sus orientaciones originales. La matriz compuesta resultante del producto de estas tres transformaciones es:

R-1(θ)·S(s1,s2)·R(θ) =

−+

0cos)(

cos

12

22

21

θθθθ

sensssenss

0cos

cos)(2

22

1

12

θθ

θθ

ssens

senss

+

100

(3-35)

Computación Gráfica 47

Page 14: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Figura 3-10 Secuencia de transformación para escalar un objeto con respecto de una posición fija específica utilizando la matriz de escalación S(s x, s y) de la transformación.

Figura 3-11 Los parámetros de escalación s1 y s2 se debe aplicar en direcciones ortoganales definidas por el desplazamiento angular θ. Como un ejemplo de estas transformaciones de escalación, convertimos un cuadro unitario en un paralelogramo (figura 3-12 ) al extenderlo a lo largo de la diagonal de (0, 0) a (1, 1). Giramos la diagonal sobre el eje de las y y duplicamos su longitud con los parámetros de transformación θ = 42 ,s 1 = 1 y s 2 = 2. En la ecuación 3-32, suponemos que se debió realizar la escalación con respecto del origen. Podríamos realizar un paso más con esta operación de escalación y concatenar la matriz con operadores de traslación, de modo que la matriz compuesta incluiría los parámetros para la especificación de una posición fija de escalación. 3.7 Propiedades de concatenación La multiplicación de matrices es asociativa. Para tres matrices cualquiera ; A, B y C, el producto matricial A · B · C se puede llevar a cabo al multiplicar primero A por B o multiplicar primero B y C:

48 Dpl. Ing. Carlos Balderrama Vásquez

Page 15: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

A · B · C = (A · B) · C = A · (B · C) (3-36) Por tanto, podemos evaluar los productos matriciales al utilizar una agrupación asociativa ya sea de izquierda a derecha o de derecha a izquierda. Por otro lado, los lados de transformación tal vez no sean conmutativos: en general, el producto matricial A · B no es igual que B · A. Esto significa que si queremos trasladar y girar un objeto, debemos tener cuidado sobre el sentido en que se evalúa la matriz compuesta (figura 3-13). Para casos especiales, como una secuencia de transformación es conmutativa. Como un ejemplo, se podría realizar dos rotaciones sucesivas en cualquier sentido y la posición final sería la misma. Esta propiedad conmutativa se aplica también para dos traslaciones sucesivas o dos escalaciones sucesivas. Otro par conmutativo de operaciones es la rotación y la escalación uniforme (s x =s y). 3.8 Otras Transformaciones Las transformaciones básicas como la traslación, rotación y escalación se incluyen en la mayor parte de los paquetes de las gráficas. Algunos paquetes proporcionan algunas transformaciones adicionales que son útiles para ciertas aplicaciones. Dos de estas transformaciones son la reflexión y el recorte. 3.8.1 Reflexión Una reflexión es una transformación que produce una imagen de espejo de un objeto. La imagen de espejo para una reflexión bidimensional se genera en relación con un eje de reflexión al girar el objeto a 180º alrededor al eje de reflexión. Podemos elegir un eje de reflexión en el plano de xy o perpendicular al plano xy. Cuando el eje de reflexión es una línea en el plano xy, la trayectoria de rotación alrededor de este eje es un plano perpendicular al plano de xy. Para los ejes de reflexión que son perpendiculares al plano xy , la trayectoria de rotación está en el plano xy . Los siguientes son ejemplos de algunas reflexiones comunes .

Computación Gráfica 49

Page 16: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

y 1 2 3 x 2’ 3’ 1’ Figura 3-16 Reflexión de un objeto con respecto del eje de las x. La reflexión alrededor de la línea y=0, el eje de x, se logra con la matriz de transformación.

001

(3-37) 0

10−

100

Esta transformación conserva iguales los valores de x, pero “gira” los valores de y de las posiciones de las coordenadas. La orientación que resulta de un objeto después de que la reflexión alrededor del eje x se muestra en la figura 3-16. Una reflexión alrededor del eje de y gira las coordenadas de x en tanto que mantiene iguales las coordenadas de y. La matriz para esta transformación es:

00

1 1 (3-38)

0

0

100

La figura 3-17 ilustra el cambio de la posición de un objeto que se reflejó alrededor de la línea x = 0. En este caso, la rotación equivalente es 180º a través del espacio tridimensional alrededor del eje de y.

50 Dpl. Ing. Carlos Balderrama Vásquez

Page 17: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

________________ Figura 3-17 Reflexión de un objeto con respecto del eje de las y. Giramos tanto las coordenadas de x como de y de un punto mediante la reflexión con respecto de un eje que es perpendicular al plano de xy y que pasa a través del origen de las coordenadas. Esta transformación, que se conoce como una reflexión en relación con el origen de las coordenadas, tiene la representación matricial:

10

1 (3-39) 0

10−

100

Un ejemplo de reflexión alrededor del origen se muestra en la figura 3-18. La matriz de reflexión 3-20 es la matriz de rotación R(θ) con θ = 180º. Simplemente giramos el objeto en el plano de xy media vuelta alrededor del origen.

________________ Figura 3-18 Reflexión de un objeto con respecto de un eje perpendicular al plano xy y que pasa a través del origen de las coordenadas. La reflexión 3-20 se puede generalizar para cualquier punto de reflexión en el plano xy (figura 3-19). Esta reflexión es igual a una rotación de 180º en el plano de xy al utilizar el punto de reflexión como el punto de pivote.

Computación Gráfica 51

Page 18: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

______________________________________________ Figura 3-19 Reflexión de un objeto con respecto de perpendicular al plano xy y que pasa a través del punto Prft.

Figura 3-20 Reflexión de un objeto con respecto un eje de la línea y = x

________________ Figura 3-21 Secuencia de transformaciones para reducir la reflexión con respecto de la línea y=x (a) rotación a 42º en el sentido de las manecillas del reloj, (b) reflexión con respecto del eje de las x y (c) rotación a 42º en sentido inverso a la dirección de las manecillas del reloj. Si elegimos el eje de reflexión como la línea diagonal y = x (figura 3-20), la matriz de reflexión es :

52 Dpl. Ing. Carlos Balderrama Vásquez

Page 19: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

010

001

100

(3-40)

Para obtener una matriz de transformación para una reflexión alrededor de la diagonal y = -x, podemos concatenar las matrices para la secuencia de transformación : (1) rotación de 45º en sentido de las manecillas del reloj, (2) reflexión alrededor del eje de y y (3) rotación 45º en sentido opuesto a las manecillas del reloj. La matriz de transformación que resulta es :

(3-41)

−0

10

00

1−

100

La figura 3-22 muestra las posiciones original y final de un objeto que se transforma con una matriz de reflexión.

Figura 3.22 Reflexión con respecto de la línea y = -x. Las reflexiones alrededor de cualquier línea y = mx + b en el plano de xy puede lograr con una combinación de transformación de traslación-rotación-reflexión. 3.8.2 Recorte Una transformación que distorsiona la forma de un objeto de manera que la forma que se transforma aparece como si el objeto estuviera compuesto por capas internas que se deslizaron una sobre otra se llama recorte. Dos transformaciones comunes de recorte son aquellas que cambian los valores de las coordenadas de x y aquellas que cambian los valores de y.

Computación Gráfica 53

Page 20: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Un recorte de la dirección de x en relación con ele eje de x se produce con la matriz de transformación.

001

01

xsh

100

(3-42)

que transforma las posiciones de las coordenadas como :

x’ = x + sh x · y , y’ = y (3-43) Cualquier número real se puede asignar para el parámetro de recorte sh x . Entonces una posición de las coordenadas (x, y) se cambia en forma horizontal por una cantidad proporcional a su distancia (valor de y ) del eje de x (y = 0). Por ejemplo, al establecer sh x para 2, cambia el cuadro de la figura 3-23 es un paralelogramo. Los valores negativos para sh x cambia las posiciones de las coordenadas hacia la izquierda. Podemos generar los recortes de la dirección de x en relación con otras líneas de referencia con :

001

01

xsh (3-44)

10

· refx ysh

Con las posiciones de las coordenadas transformadas como : x’ = x + sh x (y – y ref) , y’ =y (3-45) Un ejemplo de estas transformaciones de recorte se da en la figura 3-24 para un valor de parámetros de recorte de ½ en relación con la línea y ref = -1. Un recorte de dirección de y en relación con la línea x = x ref se genera con la matriz de transformación:

0

1

ysh 1 (3-46) 0

0

1

·0

refy xsh

que genera las posiciones de las coordenadas transformadas :

54 Dpl. Ing. Carlos Balderrama Vásquez

Page 21: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

Figura 3-23 Se convierte un cuadrado unitario (a), en un paralelogramo (b) al utilizar la matriz de recorte en la dirección de x, con sh x =2.

Figura 3-24 Se transforma en cuadrado unitario (a), en un paralelogramo cambiado (b) con shx = ½ y y ref = -1 en la matriz de recorte.

x’ = x , y’ = sh y (x – x ref) + y (3-47) Esta transformación cambia una posición de las coordenadas en forma vertical por una cantidad proporcional a su distancia de la línea de referencia x = x ref .La figura 3-25 ilustra la conversión de cuadrado en un paralelogramo con sh y = ½ y x ref = -1.

__________________________________________________________ Figura 3-25 Se convierte el cuadrado unitario, (a) en un paralelogramo cambiado (b) con los valores de los parámetros sh x =1/2 y x ref =-1 en la dirección de y al utilizar la transformación de recorte.

Computación Gráfica 55

Page 22: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

3.9 Vistas en dos dimensiones Las proyecciones en dos dimensiones no tiene muchos problemas en la representación en la pantalla. Puesto que para ello manejamos ventanas de visión. Ywmax ventana yvmax puerto de vista Yw yvmin Xwmin xwmax xv min xvmax Coordenadas mundiales coordenadas de dispositivo Figura 3-26 Transformación de vista al utilizar rectángulos estándar para la ventana y el puerto de vista Uno de las principales aspectos que debemos tomar en cuenta son las coordenadas del dispositivo de proyección y las coordenadas Universales en la que están los objetos. Ymundial Y vista 1 Yo ventana Puerto de vista Xvista 0 Xo X mundial 1 Coordenadas mundiales Coordenadas de dispositivo Normalizado Figura 3-27 Establecimiento de una ventana girada en coordenadas de vista y el puerto de vista en coordenadas normalizadas.

56 Dpl. Ing. Carlos Balderrama Vásquez

Page 23: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

Y Y Y Mundial Mundial vista Yo yvista T x vista Xo Xmundial x mundial R Xvista (a) (b) Figura 3-28 Se mueve un marco de coordenadas de vista para coincidir con el marco mundial en dos pasos: (a) se traslada al origen de las coordenadas de vista al origen de las coordenadas mundiales, luego (b) se gira para alinear los ejes de los dos sistemas. Ywmax yvmax (xv, yv) (xw, yw)

yvmin ywmin xwmin xwmax xvmin xvmax Figura 3-29 Un punto en una posición (xy, yw) en una ventana designada se transforma a las coordenadas de puerto de vista (xv, yv) de modo que las posiciones relativas en las dos áreas son las mismas.

Computación Gráfica 57

Page 24: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Ventana de coordenadas Vista. Espacio normalizado Puerto de vista 1 ventana de la estación 0 1

ventana de la estación de trabajo 1

puerto de vista de la puerto de vista de la Estación de trabajo 1 Estación de trabajo 2 Monitor1 Monitor 2 Figura 3-30 Transformación de partes seleccionadas de una escena en coordenadas normalizadas a diferentes monitores de vídeo con transformaciones de estación de trabajo. 3.10 Recorte De Lineas P9 Ventana P10 Ventana P4 P2 P2 P1 P1 P3 P5 P6 P8 P5 P6 P8 P7 P7 Antes del recorte Después del recorte

(a) (b) Figura 3-31 Recorte de líneas contra una ventana de recorte rectangular.

58 Dpl. Ing. Carlos Balderrama Vásquez

Page 25: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

P2 P'2 P''2 P'1 ventana P3 P1 P'3 P4 Figura 3-32 Las lineas que se extienden de una región de coordenadas a otra pueden pasar através de la ventana de recorte opueden intersectar las fronteras de recorte sin entrar en la ventana. P1 * P1 * P1 * P1 en ventana P1 en región de arista P1 en región de esquina (a) (b) (c) Figura 3-33 Tres posiciones posibles para un extremo de la línea P1 en el algoritmo de recorte de líneas de NLN.

3.11 Recorte De Poligonos Antes del corte Después del corte Figura 3-34 Despliegue de un polígono que se procesó por medio de un algoritmo de recorte de líneas.

Computación Gráfica 59

Page 26: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

Figura 3-35 Despliegue de un polígono que se recortó de manera correcta. Polígono Recorte Recorte Recorte Recorte Original izquierda derecha abajo arriba Figura 3-36 recorte de un polígono contra fronteras sucesivas de la ventana. V1 V2 V1 V2 V1 V2 V1 V2 V1 V1 Afuera adentro adentro adentro adentro afuera afuera afuera Guardar V1,V2 guardar V2 guardar V1 no guardar ningún Vértices Figura 3-35 procesamiento sucesivo de pares de vértices del polígono contra la frontera izquierda de la ventana. 3.12 Programas program transformaciones_geometricas; uses crt,graph; var

60 Dpl. Ing. Carlos Balderrama Vásquez

Page 27: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

x,y:array[1..10] of real; {arreglos para puntos} i,j,k:integer; {manejo de ciclos} mx,my,m2x,m2y,m210x,m210y:integer; {manejo de pantalla} dg,mg:integer; {inicializar pantalla gráfica} t:integer; {tamaño unidad} t1:string; {impresión de números} tecla:char; {tecla de opción} canpun:integer; {cantidad de puntos} retardo:integer; {retardador de aparición de puntos} {trazado de escala y ejes*********************************} procedure trazado_escala; begin cleardevice; {trazado lineas verticales} setcolor(1); m2x:=mx div 2; m210x:=m2x div t; for i:=1 to m210x do begin line(m2x+(i*t),0,m2x+(i*t),my); line(m2x-(i*t),0,m2x-(i*t),my) end; {trazado de lineas horizontales} m2y:=my div 2; m210y:=m2y div t; for i:=1 to m210y do begin line(0,m2y+(i*t),mx,m2y+(i*t)); line(0,m2y-(i*t),mx,m2y-(i*t)) end; {trazado de ejes centrales y marco} setcolor(7); line(0,m2y,mx,m2y); line(m2x,0,m2x,my); rectangle(0,0,mx,my); str(t,t1); setcolor(15); outtextxy(10,10,'Valor unidad (pixeles): '+t1); end;

Computación Gráfica 61

Page 28: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

{menu**************************************************} procedure menu; begin setcolor(10); outtextxy(10,40,'Opciones disponibles:'); outtextxy(10,60,'i:Ingresar puntos'); outtextxy(10,70,'t:Traslación'); outtextxy(10,80,'r:Rotación'); outtextxy(10,90,'e:Escalación'); outtextxy(10,100,'x:Reflexión eje X'); outtextxy(10,110,'y:Reflexión eje Y'); outtextxy(10,120,'-:Reducir'); outtextxy(10,130,'+:Ampliar'); outtextxy(10,140,'f:Finalizar'); end; {trazado de figura ****************************************} procedure trazado_figura(x1,y1:array of real;canpun1:integer); var xx1,yy1,xx2,yy2:integer; begin setcolor(12); if canpun1>0 then begin for k:=0 to (canpun1-2) do begin xx1:=m2x+(round(x1[k])*t); yy1:=m2y+((round(y1[k])*t)*(-1)); xx2:=m2x+(round(x1[k+1])*t); yy2:=m2y+((round(y1[k+1])*t)*(-1)); line(xx1,yy1,xx2,yy2); delay(retardo); end; xx1:=m2x+(round(x1[0])*t); yy1:=m2y+((round(y1[0])*t)*(-1)); line(xx1,yy1,xx2,yy2); end; end; {trazado de puntos************************************} procedure trazado_puntos(x1,y1:array of real;canpun1:integer); var xx1,yy1:integer; begin if canpun1>0 then

62 Dpl. Ing. Carlos Balderrama Vásquez

Page 29: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

begin setcolor(14); for k:=0 to (canpun1-1) do begin xx1:= m2x+(trunc(x1[k])*t); yy1:= m2y+((trunc(y1[k])*t)*(-1)); circle(xx1,yy1,2); end; end; end; {incremento de unidad de escala***************************} procedure mas_escala; begin t:=t+1; trazado_escala; menu; trazado_puntos(x,y,canpun); retardo:=1; trazado_figura(x,y,canpun); end; {decremento de unidad de escala****************************} procedure men_escala; begin if (t-1)>=1 then begin t:=t-1; trazado_escala; menu; trazado_puntos(x,y,canpun); retardo:=1; trazado_figura(x,y,canpun); end; end; {ingreso de datos de la figura **************************} procedure ing_datos; begin trazado_escala; setcolor(15); repeat outtextxy(10,50,'¨ Puntos ? ( 2<P<10 ):'); gotoxy(25,4);

Computación Gráfica 63

Page 30: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

readln(canpun) until ((canpun>2) and (canpun<10)); trazado_escala; {borrado de puntos} for j:=1 to 10 do begin x[j]:=0; y[j]:=0; end; for j:=1 to canpun do begin setcolor(15); str(j,t1); outtextxy(10,50,'Ingresar punto X'+t1+' : '); gotoxy(23,4); readln(x[j]); str(j,t1); outtextxy(10,70,'Ingresar punto Y'+t1+' : '); gotoxy(23,5); readln(y[j]); trazado_escala; trazado_puntos(x,y,j); end; menu; delay(1000); retardo:=1000; trazado_figura(x,y,canpun); menu; end; {procedimiento traslación ***************************} procedure traslacion(var x1,y1:array of real;canpun1:integer); var tx,ty,txx,tyy:integer; begin setcolor(15); outtextxy(10,150,'Ingresar traslaci¢n X : '); gotoxy(26,10); readln(tx); outtextxy(10,165,'Ingresar traslaci¢n Y : '); gotoxy(26,11); readln(ty); {traslaci¢n en eje x}

64 Dpl. Ing. Carlos Balderrama Vásquez

Page 31: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

for txx:=1 to abs(tx) do begin for k:=0 to (canpun-1) do begin if tx<0 then x1[k]:=x1[k]-1 else x1[k]:=x1[k]+1; end; retardo:=1; trazado_figura(x1,y1,canpun); delay(200) end; {traslaci¢n en eje y} for tyy:=1 to abs(ty) do begin for k:=0 to (canpun-1) do begin if ty<0 then y1[k]:=y1[k]-1 else y1[k]:=y1[k]+1; end; retardo:=1; trazado_figura(x1,y1,canpun); delay(200) end; delay(100); trazado_escala; menu; trazado_puntos(x1,y1,canpun); retardo:=1000; trazado_figura(x1,y1,canpun); end; {procedimiento rotación *********************************} procedure rotacion(var x1,y1:array of real;canpun1:integer); var ar,pr:integer; agr,xr,yr,x11,y11:real; begin setcolor(15); outtextxy(10,150,'Angulo de rotaci¢n : '); gotoxy(26,10);

Computación Gráfica 65

Page 32: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

readln(ar); outtextxy(10,165,'Punto de rotaci¢n : '); gotoxy(26,11); readln(pr); xr:=x1[pr-1]; yr:=y1[pr-1]; {rotaci¢n} agr:=ar*pi/180; for k:=0 to (canpun-1) do begin x11:=(xr+((x1[k]-xr)*cos(agr))-((y1[k]-yr)*sin(agr))); y11:=(yr+((x1[k]-xr)*sin(agr))+((y1[k]-yr)*cos(agr))); x1[k]:=round(x11); y1[k]:=round(y11); end; trazado_escala; menu; trazado_puntos(x1,y1,canpun); retardo:=1000; trazado_figura(x1,y1,canpun); end; {procedimiento escalaci¢n *****************************} procedure escalacion(var x1,y1:array of real;canpun1:integer); var sx,sy,sxx,syy:real; begin setcolor(15); outtextxy(10,150,'Ingresar escalaci¢n X : '); gotoxy(26,10); readln(sx); outtextxy(10,165,'Ingresar escalaci¢n Y : '); gotoxy(26,11); readln(sy); for k:=0 to (canpun-1) do begin x1[k]:=x1[k]*sx; y1[k]:=y1[k]*sy; end; trazado_escala; menu; trazado_puntos(x1,y1,canpun); retardo:=1000; trazado_figura(x1,y1,canpun); end; {procedimiento reflexi¢n eje X ***************************}

66 Dpl. Ing. Carlos Balderrama Vásquez

Page 33: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Transformaciones Geométricas Bidimensionales

procedure reflexionX(var x1,y1:array of real;canpun1:integer); begin for k:=0 to (canpun-1) do begin y1[k]:=y1[k]*(-1); end; trazado_escala; menu; trazado_puntos(x1,y1,canpun); retardo:=1000; trazado_figura(x1,y1,canpun); end; {procedimiento reflexi¢n eje Y *************************} procedure reflexionY(var x1,y1:array of real;canpun1:integer); begin for k:=0 to (canpun-1) do begin x1[k]:=x1[k]*(-1); end; trazado_escala; menu; trazado_puntos(x1,y1,canpun); retardo:=1000; trazado_figura(x1,y1,canpun); end; {*********programa principal**********************} begin {valores iniciales} t:=10; canpun:=0; {inicializando pantalla grafica} initgraph(dg,mg,'c:\bp\bgi'); if GraphResult<>grOK then begin clrscr; writeln('Error de modo gr fico : ',GraphErrorMsg(GraphResult)); halt end; mx:=getmaxx; my:=getmaxy; trazado_escala; setcolor(10);

Computación Gráfica 67

Page 34: TRANSFORMACIONES GEOMÉTRICAS … · Podemos expresar las ecuaciones de traslación 3-1 como una sola ecuación matricial al utilizar vectores de columna para representar las posiciones

Tema 3

trazado_escala; menu; tecla:=' '; repeat case tecla of '+':mas_escala; '-':men_escala; 'i','I':ing_datos; 't','T':traslacion(x,y,canpun); 'r','R':rotacion(x,y,canpun); 'e','E':escalacion(x,y,canpun); 'x','X':reflexionX(x,y,canpun); 'y','Y':reflexionY(x,y,canpun); end; tecla:=upCase(readkey); until (tecla='F'); cleardevice; closegraph; writeln('Presionar ENTER para cerrar programa.'); readln; end.

68 Dpl. Ing. Carlos Balderrama Vásquez