Aplicación matrices de transformación
Enviado por Sara • 20 de Diciembre de 2017 • 764 Palabras (4 Páginas) • 396 Visitas
...
for (int j = 0; j GetSizeY(); j++)
{
x = 0;
for (int i = 0; i GetSizeX(); i++)
{
CVector4D Pos(x, y, 0, 1);
CVector4D Rot = Pos*M;
(*spImgDest)(i, j).ulI = spImg- >LinearSample((Rot.x),(Rot.y)).ulI;
x += dx;
}
y += dy;
}
}
Donde S es una matriz de escalacion, que al ver sus valores, se puede deducir que la imagen se reducirá de tamaño.La matriz R es nuestra imagen de rotación, que por parámetro es una variable que aumenta proporcionalmente al timer definido. La matriz T es la matriz de traslación y aquí esta definida -0.5 y -0.5, que nos indica la mitad de la imagen ( el tamaño está ya normalizado) y el signo negativo es por el punto de referencia, ya que el origen en nuestra aplicación esta ubicado en la esquina superior izquierda. La matriz Tinv es tambíen una matriz de traslación con los mismos parámetros, pero con signo contrario, que es usada para poder girar la imagen en torno a su centro. La matriz M es la matriz resultante de todas las operaciones deseadas, que será la que modifique finalemente cada pixel de la imagen.
Ya teniendo lo anterior en cuenta, se puede experimentar con los productos entre matrices de transformación, en donde si solo se deja la rotación, la imagen girará en torno a su origen, dando como resultado:
M= R
[pic 7]
Entonces, si a la operación anterior se le multiplica también la matriz T, se moverá el punto de rotación al centro, teniendo en cuenta que las operaciones matriciales no tienen la propiedad conmutativa, por lo que debe primero trasladarse el punto de rotación:
M= T*R
[pic 8]
Y si a esta operación se le agrega además la matriz Tinv mencionada anteriormente, se regresará el origen de la imagen al origen inicial, pero no el punto de rotación. Esto se logra únicamente ejecutando correctamente las operaciones entre las matrices. Dando como resultado una rotación respecto al centro de la imagen:
M= T*R*TInv
[pic 9]
Finalmente, si a todas las operaciones anteriores, se le agrega la matriz de escalación , se va tener como resultado la misma imagen girando respecto a su centro, pero ya con una escalacion determinada por S:
M = T*S*R*TInv
[pic 10]
...