Académique Documents
Professionnel Documents
Culture Documents
JMC
1. Introduccin
Este trabajo tratar de crear un programa que mediante el uso de unas determinadas funciones se
consiga realizar cualquier tipo de giro, traslacin, homotecia, simetra,... mediante el uso de
transformaciones ortogonales y afines. La estructura del programa se puede dividir en dos partes bien
diferenciadas.
En una primera parte se encontraran un conjunto de funciones donde el usuario introduce el
elemento a transformar y la funcin produce la transformacin.
Por otro lado, la segunda parte del programa estara constituida por funciones en las cuales el usuario
introduce una matriz y la funcin identifica la transformacin y la clasifica.
Adems de estos dos bloques de funciones, tambin podemos diferenciar entre funciones de A2 y
A3, es decir, transformaciones en el plano o en el espacio. Y finalmente tambin podramos diferenciar
entre transformaciones ortogonales y transformaciones afines.
2. Funciones
Las transformaciones ortogonales se dividen en:
ORTO_HOMOTECIA(, k) : Funcin en la que se introduce un punto ( ) y una razn (k) y se
calcula la transformacin.
el punto transformado por el giro de ngulo . En esta funcin slo se pueden introducir puntos del
plano.
JMC
cartesianos (), un punto (), un ngulo () y devuelve el punto girado un radianes respecto del eje .
En esta funcin slo se pueden introducir puntos del espacio.
ser el centro de simetra. La funcin devuelve el simtrico del punto respecto del centro de simetra.
SIMETRIA_PLANO(, ) : Funcin en la que se introduce un punto () y uno de los planos
coordenados (), que ser el plano de simetra, y devuelve el simtrico respecto de ese plano . El plano
habr que introducirlo como XY, por ejemplo (con las comillas incluidas), que se tratara del plano
z = 0. Lgicamente esta funcin slo admite puntos del espacio.
SIMETRIA_EJE(, ) : Funcin en la que se introduce uno de los tres ejes coordenados
sobre el que efectuar el giro. La funcin devuelve el transformado del punto por el giro de ngulo .
En esta funcin slo se pueden introducir puntos del plano.
GIRO_A3(, , ) : Funcin en la que se introduce uno de los tres ejes coordenados cartesianos
() , un punto () y un ngulo () y devuelve el punto girado un ngulo respecto del eje . En esta
funcin slo se pueden introducir puntos del espacio.
JMC
JMC
3. Ejemplos prcticos
3.1 Transformaciones ortogonales
En primer lugar, mostramos algunos ejemplos de las funciones que se encargan de las
transformaciones ortogonales:
La funcin ORTO_HOMOTECIA(, k) produce una homotecia de razn k sobre el punto
.
Ejemplo 1 : se introducen una serie de puntos que configuran el contorno de un pentgono
irregular y mediante el uso de esta funcin se ampliar su tamao cinco veces. Los puntos introducidos
en dos dimensiones sern el (-1,-2.25), (1,-2.25), (2,1), (0,3), (-2 ,1).
JMC
JMC
JMC
Ejemplo 2: hallar el transformado del punto (4,2,3) aplicando una simetra central. (siempre
respecto del origen pues estamos trabajando con transformaciones ortogonales).
JMC
JMC
Ejemplo 1 : hallar el punto simtrico del punto (5,5) respecto del eje X:
ORTO_SIMETRIA_EJE([2, 4, 3], z)
9
JMC
[-2, -4, 3]
10
JMC
ORTO_GIROA2[2, 3],
4
2 52
- ,
2
2
[-0.7071067811, 3.535533905]
11
JMC
Ejemplo : hallar el transformado del punto (1,2,3) aplicndole un giro de ngulo 30 respecto al
eje Z.
ORTO_GIROA3[1, 2, 3], , z
6
3
1
- 1, 3 + , 3
2
2
12
JMC
13
JMC
14
JMC
15
JMC
Ejemplo 2 : vamos a hacer una simetra central respecto al punto (1,1,1). Tambin vamos a
transformar 3 puntos: el (1,2,1), el (0,3,1) y el (2,1,0).
SIMETRIA_CENTRAL([1, 2, 1], [1, 1, 1])
[1, 0, 1]
SIMETRIA_CENTRAL([0, 3, 1], [1, 1, 1])
[2, -1, 1]
SIMETRIA_CENTRAL([2, 1, 0], [1, 1, 1])
[0, 1, 2]
16
JMC
La funcin SIMETRIA_EJE(, ) produce una simetra del punto respecto del eje .
Ejemplo 1 : simetra del punto (-2,3) respecto al eje Y.
SIMETRIA_EJE([-2, 3], y)
[2, 3]
17
JMC
18
JMC
SIMETRIA_EJE([-4, 4, 0], z)
[4, -4, 0]
19
JMC
2
2
+ 1, + 1
2
2
La funcin GIRO_A3(,, ) produce un giro de ngulo alrededor del eje sobre el punto
.
Ejemplo : Giro de 90 del punto (3,2,1) respecto del eje z
20
JMC
GIRO_A3[3, 2, 1], , z
2
[-2, 3, 1]
21
JMC
[1, 1, -3]
22
JMC
Esta funcin recibe como argumento una matriz A. Dependiendo de sus caractersticas devolver
al usuario si se trata o no de una transformacin afn y en caso de que lo sea, devuelve el tipo de
transformacin que es.
A continuacin, vamos a introducir diversas matrices y con la funcin BUSQUEDA(A)
intentaremos averiguar qu tipo de transformacin representa esa matriz
1
0
A
0
0 0 0
1 0 0
0 1 0
0 0 1
BUSQUEDA(A)
Es la identidad
1 0 0
A6 1 0
4 0 1
BUSQUEDA(A)
[Se trata de una traslacin de vector, [6, 4]]
1
A
2
0 0 0
1 0 0
0 1 0
0 0 1
BUSQUEDA(A)
23
JMC
1 0 0
A 0 -1 0
0 0 1
BUSQUEDA(A)
[Se trata de una simetra respecto del eje, Y]
1 0 0
A 3 -1 0
1 0 1
BUSQUEDA(A)
[Se trata de una simetra respecto del eje, Y, seguida de una traslacin de vector,
[3, 1]]
0
A
0
0 0 0
-1 0 0
0 -1 0
0 0 1
BUSQUEDA(A)
[Simetria respecto al eje, Z]
24
1
A
7
JMC
0 0 0
-1 0 0
0 -1 0
0 0 1
BUSQUEDA(A)
[Es una simetra respecto del eje, Z, seguida de traslacin de vector, [1, 7, 4]]
0
A
0
0 0 0
1 0 0
0 1 0
0 0 -1
BUSQUEDA(A)
[Simetria respecto al plano, z = 0]
2
A
5
0 0 0
1 0 0
0 1 0
0 0 -1
BUSQUEDA(A)
[Es una simetria respecto al plano, z = 0, seguida de una traslacin de vector, [2,
5, 1]]
25
JMC
1 0 0
A 4 -1 0
3 0 -1
BUSQUEDA(A)
3
Se trata de una simetra central respecto al punto, x = 2 y =
1
A
7
0 0 0
-1 0 0
0 -1 0
0 0 -1
BUSQUEDA(A)
1
7
2
2
0
A
1
3
-
2
2
3
1
2
2
26
JMC
BUSQUEDA(A)
1
3
- 0
2
2
3
1
0
2
2
0
0 1
BUSQUEDA(A)
1
3
- 0
2
2
3
1
0
2
2
0
0 1
BUSQUEDA(A)
27
JMC
1
3
- 0
2
2
3
1
0
2
2
0
0 -1
BUSQUEDA(A)
Es un giro de angulo, , respecto al eje, Z, seguido de una simetra respecto a ese eje
1
2
2
1 -
3
3
3
2
1
2
0 -
3
3
3
2
2
1
28
JMC
-1 -
3
3
3
BUSQUEDA(A)
1
Simetria respecto al eje, x - z = 1 y - z =
29
JMC
[k, 0, 0; 0, k, 0; 0, 0, k]
If DIM() 2 DIM() 3
RETURN ?
ORTO_SIMETRIA_CENTRAL()
Prog
If DIM() = 2
[-1, 0; 0, -1]
If DIM() = 3
[-1, 0, 0; 0, -1, 0; 0, 0, -1]
If DIM() 2 DIM() 3
RETURN ?
ORTO_SIMETRIA_EJE(, )
Prog
If DIM() = 2
Prog
If = x
RETURN [1, 0; 0, -1]
If = y
RETURN [-1, 0; 0, 1]
If DIM() = 3
Prog
If = x
RETURN [1, 0, 0; 0, -1, 0; 0, 0, -1]
If = y
RETURN [-1, 0, 0; 0, 1, 0; 0, 0, -1]
If = z
RETURN [-1, 0, 0; 0, -1, 0; 0, 0, 1]
If DIM() 2 DIM() 3
RETURN ?
COS() - SIN()
ORTO_GIROA2(, )
SIN() COS()
ORTO_GIROA3(, , )
Prog
If = x
RETURN [1, 0, 0; 0, COS(), - SIN(); 0, SIN(), COS()]
If = y
RETURN [COS(), 0, - SIN(); 0, 1, 0; SIN(), 0, COS()]
If = z
RETURN [COS(), - SIN(), 0; SIN(), COS(), 0; 0, 0, 1]
TRANSFORMACIONES AFINES
TRASLACION(, v)
Prog
If DIM() = 2
Prog
t [1, 0, 0; v1, 1, 0; v2, 0, 1]APPEND([1], )
RETURN [t2, t3]
If DIM() = 3
Prog
t [1, 0, 0, 0; v1, 1, 0, 0; v2, 0, 1, 0; v3, 0, 0, 1]APPEND([1], )
RETURN [t2, t3, t4]
If DIM() 2 DIM() 3
RETURN ?
SIMETRIA_CENTRAL(, P)
Prog
30
JMC
If DIM() = 2
Prog
u 2P1
v 2P2
c [1, 0, 0; u, -1, 0; v, 0, -1]APPEND([1], )
RETURN [c2, c3]
If DIM() = 3
Prog
u 2P1
v 2P2
w 2P3
c [1, 0, 0, 0; u, -1, 0, 0; v, 0, -1, 0; w, 0, 0, -1]APPEND([1], )
RETURN [c2, c3, c4]
If DIM() 2 DIM() 3
RETURN ?
SIMETRIA_PLANO(, )
Prog
If = XY
f [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0, -1]APPEND([1], )
If = XZ
f [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, -1, 0; 0, 0, 0, 1]APPEND([1], )
If = YZ
f [1, 0, 0, 0; 0, -1, 0, 0; 0, 0, 1, 0; 0, 0, 0, 1]APPEND([1], )
RETURN [f2, f3, f4]
SIMETRIA_EJE(, )
Prog
If DIM() = 2
Prog
If = x
e [1, 0, 0; 0, 1, 0; 0, 0, -1]APPEND([1], )
If = y
e [1, 0, 0; 0, -1, 0; 0, 0, 1]APPEND([1], )
RETURN [e2, e3]
If DIM() = 3
Prog
If = x
e [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, -1, 0; 0, 0, 0, -1]APPEND([1], )
If = y
e [1, 0, 0, 0; 0, -1, 0, 0; 0, 0, 1, 0; 0, 0, 0, -1]APPEND([1], )
If = z
e [1, 0, 0, 0; 0, -1, 0, 0; 0, 0, -1, 0; 0, 0, 0, 1]APPEND([1], )
RETURN [e2, e3, e4]
If DIM() 2 DIM() 3
RETURN ?
GIRO_A2(, , P)
Prog
t [1, 0, 0; P1(1 - COS()) + P2SIN(), COS(), - SIN(); - P1SIN() + P2(1 - COS()),
SIN(), COS()]APPEND([1], )
RETURN [t2, t3]
GIRO_A3(, , )
Prog
If = x
g [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, COS(), - SIN(); 0, 0, SIN(), COS()]APPEND([1], )
If = y
g [1, 0, 0, 0; 0, COS(), 0, - SIN(); 0, 0, 1, 0; 0, SIN(), 0, COS()]APPEND([1], )
If = z
g [1, 0, 0, 0; 0, COS(), - SIN(), 0; 0, SIN(), COS(), 0; 0, 0, 0, 1]APPEND([1], )
RETURN [g2, g3, g4]
31
JMC
FUNCIONES DE BUSQUEDA
A
A
2,2 2,3
M
A
A
3,2 3,3
1 0
0
0 M
M
L
1,1 1,2
0 M
M
2,1 2,2
A
A
A
2,2 2,3 2,4
A
A
A
C 3,2 3,3 3,4
A
A
A
4,2 4,3 4,4
1 0
0
0
0 C
C
C
Q0 C
C
C
0 C
C
C
32
JMC
If DIM(A) = 4
Prog
h SOLVE(A[1, x, y, z] = [1, x, y, z], [x, y, z])
If h = false
RETURN 0
If LOGICAL?(h) = false h = true
RETURN 1
EJE(A)
Prog
If DIM(A) = 4
Prog
If (EXACT_EIGENVECTOR(C, 1))1 [0] (EXACT_EIGENVECTOR(C, 1))2 = [0]
(EXACT_EIGENVECTOR(C, 1))3 = [0]
RETURN "X"
If (EXACT_EIGENVECTOR(C, 1))2 [0] (EXACT_EIGENVECTOR(C, 1))1 = [0]
(EXACT_EIGENVECTOR(C, 1))3 = [0]
RETURN "Y"
If (EXACT_EIGENVECTOR(C, 1))3 [0] (EXACT_EIGENVECTOR(C, 1))1 = [0]
(EXACT_EIGENVECTOR(C, 1))2 = [0]
RETURN "Z"
RETURN SOLVE(A[1, x, y, z] = [1, x, y, z], [x, y, z])
If DIM(A) = 3
Prog
If (EXACT_EIGENVECTOR(M, 1))1 [0] (EXACT_EIGENVECTOR(M, 1))2 = [0]
RETURN "X"
If (EXACT_EIGENVECTOR(M, 1))1 = [0] (EXACT_EIGENVECTOR(M, 1))2 [0]
RETURN "Y"
RETURN SOLVE(A[1, x, y] = [1, x, y], [x, y])
ANGULO_GIRO(A)
Prog
If DIM(A) = 4
Prog
If C11 = 1 C11 = -1
RETURN ACOS(C22)
If C22 = 1 C22 = -1
RETURN ACOS(C11)
If C33 = 1 C33 = -1
RETURN ACOS(C11)
If DIM(A) = 3
RETURN ACOS(M11)
BUSQUEDA(A)
Prog
If DIM(A) = 3
Prog
If ORTOGONAL(M) = 0
RETURN "La matriz introducida no representa un movimiento"
Prog
If DET(M) = 1
Prog
If IDENTICAL?(A, IDENTITY_MATRIX(DIM(A))) = true
RETURN "Es la identidad"
If MULTIPLICIDAD(M, 1) = 2 PUNTOS_INVARIANTES(A) = 0
RETURN {"Se trata de una traslacin de vector", [A21, A31]}
If MULTIPLICIDAD(M, -1) = 2 PUNTOS_INVARIANTES(A) = 1
RETURN ["Se trata de una simetra central respecto al punto", EJE(A)]
If MULTIPLICIDAD(M, 1) = 0 MULTIPLICIDAD(M, -1) = 0 PUNTOS_INVARIANTES(A) = 0
RETURN "Se trata de un giro respecto de un punto seguida de una traslacin"
If MULTIPLICIDAD(M, 1) = 0 MULTIPLICIDAD(M, -1) = 0 PUNTOS_INVARIANTES(A) = 1
33
JMC
If DET(M) = -1
Prog
If MULTIPLICIDAD(M, 1) = 1 PUNTOS_INVARIANTES(A) = 0
RETURN {"Se trata de una simetra respecto del eje", EJE(A), "seguida de una
traslacin de vector", [A21, A31]}
If MULTIPLICIDAD(M, 1) = 1 PUNTOS_INVARIANTES(A) = 1
RETURN ["Se trata de una simetra respecto del eje", EJE(A)]
If DIM(A) = 4
Prog
If ORTOGONAL(C) = 0
RETURN "La matriz introducida no representa un movimiento"
Prog
If DET(C) = 1
Prog
If IDENTICAL?(A, IDENTITY_MATRIX(DIM(A))) = true
RETURN "Es la identidad"
If MULTIPLICIDAD(C, 1) = 3 PUNTOS_INVARIANTES(A) = 0
RETURN {"Es una traslacin de vector", [A21, A31, A41]}
If MULTIPLICIDAD(C, -1) = 2 PUNTOS_INVARIANTES(A) = 0
RETURN {"Es una simetra respecto del eje", EJE(A), "seguida de traslacin de vector",
[A21, A31, A41]}
If MULTIPLICIDAD(C, -1) = 2 PUNTOS_INVARIANTES(A) = 1
RETURN ["Simetria respecto al eje", EJE(A)]
If MULTIPLICIDAD(C, -1) = 0 MULTIPLICIDAD(C, 1) = 1 PUNTOS_INVARIANTES(A) = 1
RETURN ["Es un giro de ngulo", ANGULO_GIRO(A), "alrededor del eje", EJE(A)]
If MULTIPLICIDAD(C, -1) = 0 MULTIPLICIDAD(C, 1) = 1 PUNTOS_INVARIANTES(A) = 0
RETURN "Es un giro mas una traslacin"
If DET(C) = -1
Prog
If MULTIPLICIDAD(C, -1) = 1 MULTIPLICIDAD(C, 1) = 2 PUNTOS_INVARIANTES(A) = 1
RETURN ["Simetria respecto al plano", EJE(A)]
If MULTIPLICIDAD(C, -1) = 1 PUNTOS_INVARIANTES(A) = 0
RETURN ["Es una simetria respecto al plano", EJE(Q), "seguida de una traslacin de
vector", [A21, A31, A41]]
If MULTIPLICIDAD(C, -1) = 3 PUNTOS_INVARIANTES(A) = 1
RETURN ["Es una simetra central respecto al punto", EJE(A)]
If MULTIPLICIDAD(C, -1) = 1 MULTIPLICIDAD(C, 1) = 0 PUNTOS_INVARIANTES(A) = 1
RETURN ["Es un giro de angulo", ANGULO_GIRO(A), "seguido de una simetra respecto
a", EJE(A)]
34