iphone - transformaciones - ¿Dónde puedo encontrar una explicación de todos los campos de la matriz de transformación?
transformaciones lineales ejercicios resueltos pdf (1)
Esa estructura se ve así:
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
Esto es simplemente una matriz de transformación 4x4 utilizada para transformar 4 vectores. Se puede utilizar para representar cualquier número de transformaciones lineales. Vea this artículo de wikipedia sobre este tipo de matriz. La mayoría de esos elementos no se pueden interpretar de forma independiente, pero algunos sí pueden interpretarse de forma independiente. Por ejemplo, m41, m42 y m43 representan una traducción en 3 espacios. Así, por ejemplo, si multiplicas un punto por esta matriz:
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
Luego se traducirá ese punto en 1 hacia + X, 2 unidades hacia + Y, y 3 hacia + Z.
[ 1 0 0 0 ]
[ x y z 1 ] x [ 0 1 0 0 ] = [ x+1 y+2 z+3 1 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
Tenga en cuenta que el punto debe representarse como un vector 4 con el cuarto elemento 1. También tenga en cuenta que este vector es en realidad una matriz y el formato de esta matriz difiere del descrito en el artículo de wikipedia sobre matrices de transformación. Esto se debe a que un punto suele estar representado por una sola columna, matriz de 4 filas, sin embargo, Apple los representa como 4 columnas, matrices de una sola fila. Esto significa que cualquier matriz de transformación que vea en el artículo de wikipedia debe transponerse antes de usarla en el iPhone para que funcione correctamente.
Otro ejemplo es una transformación de escala:
[ 2 0 0 0 ]
[ 0 2 0 0 ]
[ 0 0 2 0 ]
[ 0 0 0 1 ]
Doblará todas las coordenadas de su punto, por lo que (1, 2, 3) se convertirá en (2, 4, 6). Otras transformaciones, como rotaciones y proyecciones de perspectiva, son más difíciles de reconocer a simple vista.
Aquí hay más información sobre las transforms de Apple. Apple proporciona un montón de transformaciones de utilidad para generar estas matrices, consulte este enlace . Realmente no discuten las matemáticas detrás de CATransform3DMakeRotation, pero este enlace lo hace.
He visto en un documento de Apple que la matriz detrás de la propiedad de transformación de CALayer tiene campos como m14, m21, m22, etc. También recuerdo que vi una tabla que explica esos campos, hace aproximadamente uno o dos meses. Me costó mucho intentar encontrarlo. ¿Alguien sabe una fuente?