x’ = x + dx
y’ = y + dy

Si definimos los vectores 

Podemos decir en forma concisa que P’ = P + T . En coordenadas homogéneas podemos
escribir como:

Para el escalamiento podemos hacer

donde sx representa el
factor de escalamiento en x y sy el
factor de escalamiento en y.

Para determinar la rotación consideremos un punto
que se encuentra a una distancia del origen R
y esta distancia forma un ángulo f con la horizontal. 
x = r cos f
y = r sen f
Si movemos este punto un ángulo q tenemos que 

x’ = r cos (f+q) = [r cos f]
cos q
- [rsen f]sen q
y’ = r sen (f+q) = [r cos f]
sen q
- [rsen f]cos q
Lo cual da como resultado que la matriz de rotación
para un punto esta dada por


Existe dos posibilidades de hacer transformaciones
de sesgo, la primera en la dirección x y la segunda en la dirección y. Para
aplicar una transformación de sesgo en la dirección x hacemos

y en la dirección y hacemos


Consideremos que tenemos una ventana del mundo real
cuyos límites son {x_min, x_max,
y_min, y_max} 

Deseamos mapear a
coordenadas de pantalla con límites {u_min, u_max, v_min, v_max}.
Para tal propósito debemos :
1.- Trasladar las coordenadas mínimas al origen T(-x_min, -y_min),
2.- Aplicar un escalamiento anisotrópico
dado por S((u_max-u_min)/(x_max-x_min),
(v_max-v_min)/(y_max-y_min)) y
3.- Trasladar las coordenadas a un nuevo origen u_min, v_min T(u_min, v_min)
Estos pasos dan la siguiente transformación

Al multiplicar P = M[x,y,1]T se obtiene

La translación, escalamiento, rotación y sesgo en
tres dimensiones, es simplemente una extensión de la que se lleva a cabo en dos
dimensiones. Desde este punto de vista podemos representar:
Translación

Escalamiento

Rotación
Podemos componer rotaciones tridimensionales a
partir de las tres matrices de rotación bidimensional sobre cada uno de los
ejes x, y, y z.



Sesgo
Existen tres matrices de sesgo tridimensional
correspondientes a las matrices de sesgo bidimensional. El sesgo (x,y) es

Podemos
descomponer una transformación tridimensional en 
M =
SRT
Componer
una matriz de translación y escalamiento resulta fácil, pero no es el caso de
la matriz de rotación. Para la rotación debemos analizar las propiedades de
esta
Para
el caso de la matriz R tiene la forma

podemos mostrar que:
1.-
Cada vector ri, tiene magnitud
unitaria
2.-
Cada uno es perpendicular al otro riT rj=0
3.-
La inversa de la matriz es la matriz transpuesta
4.-
El determinante de la matriz de rotación es 1.
Ejemplo
Consideremos
el caso de calcular la transformación, para llevar los puntos P1 =[2,1,0]T,
P2 =[4,2,0]T y P3 = [2,3,0]T (definidos en el plano xy) de la posición original a la posición destino (en el
plano zy).

Paso 1.
Calculamos la translación al origen T(-x1, -y1, -z1)
Paso 2.
Calculamos la matriz de rotación

donde 

a)   
Rz es el vector unitario sobre el vector que va de P1
a P2, P1P2

b) Rx es el vector perpendicular
al plano definido por P1, P2 y P3

c) Finalmente 

Para los datos dados
El vector unitario en la dirección P1P2 = [0.894427,
0.447214, 0.000000] y en la dirección P1P3 = [0.000000, 1.000000, 0.000000]
a) Rz = [0.894427,
0.447214, 0.000000]
b) Rx = [0.000000,
0.000000, -1.000000]
c) Ry = Rz x Rx = [-0.447214, 0.894427,
0.000000]
La matriz de transformación queda constituida por
| 0.000000 0.000000
-1.000000 -2.0000|
|-0.447214 0.894427 
0.000000 -1.0000|
| 0.894427 0.447214 
0.000000  0.0000|
| 0.000000 0.000000  0.000000  1.0000|
Para esta transformación los puntos quedan en la
nueva posición
P1’ = [0.000000 0.000000 0.000000]
P2’ = [0.000000 0.000000
2.236068]
P3’ = [0.000000 1.788854 0.894427]
Podemos hacer un cambio a cualquier plano
simplemente intercambiado los vectores Rx, Ry y Rz. Asi
por ejemplo 
a) Para llevar estos puntos al plano xy tenemos 
| 0.894427 0.447214 
0.000000 -2.00000 |
|-0.447214 0.894427 
0.000000 -1.00000 |
| 0.000000 0.000000
-1.000000  0.00000 |
P1’ = [0.000000 0.000000 0.000000]
P2’ = [2.236068 0.000000 0.000000]
P3’ = [0.894427 1.788854 0.000000]
b) Para llevar estos puntos al plano xz tenemos 
|
0.894427 0.447214 
0.000000 -2.0000 |
|
0.000000 0.000000 -1.000000 -1.0000 |
|-0.447214
0.894427  0.000000  0.0000 |
|
0.000000 0.000000  0.000000  1.0000 |
P1’
= [0.000000 0.000000 0.000000]
P2’
= [2.236068 0.000000 0.000000]
P3’
= [0.894427 0.000000 1.788854]
Ejemplo
Calcular la transformación para llevar puntos en el
plano xy a cualquier plano definido por tres puntos
P1 = [10, 40, 50]T, P2 = [40, 30, 60]T
y P3 = [60, 70, 80]T tomando como referencia el punto 1.
1.- Calculamos el vector unitario en la dirección Rx = P1P2 
2.- Calculamos el vector perpendicular al plano Rz = P1P3 x P1P2
3.- Calculamos el vector Ry
= Rz x Rx
De acuerdo con lo anterior esto proyecta el plano
P1-P2-P3 al plano xy, para hacer la operación
calculamos la inversa (la transpuesta es equivalente) con lo cual nuestra
transformación queda:
R = [RxT RyT RzT]
y la transformación final es 
M = | R P1T |
    | 0 1   |
     
T = | 0.904534 -0.191460  0.381000 
10.000000 |
    |-0.301511
-0.919007  0.254000  40.000000 | 
    | 0.301511
-0.344628 -0.889001  50.000000 |
    |
0.000000  0.000000  0.000000   1.000000 |

Ver código ejemplo113.cpp
Ejemplo
Considere un aeroplano definido en el sistema
coordenado xp, yp, zp y centrado en el origen. Queremos mover el avión para
que apunte en la dirección del vector unitario de vuelo DDV. 
Para resolver
1.- El eje zp debe
transformarse en la dirección de vuelo DDV,
2.- mientras xp es una
dirección perpendicular a DDV o sea y x DDV (y es un vector unitario en la
dirección de y) y
3.- la dirección final yp
debe ser ortogonal al plano zp y xp
así que calculamos esta dirección como DDV x (y x DDV)
La transformación resultante es
    |                                    0 |
T = | y X DDV  
DDV X (y X DDV)    DDV   0 |
    |                                    0 |
    |    0           
0            
0    1 |
