He visto en algún documento de apple que la matriz detrás de la propiedad de transformación de un CALayer tiene campos como m14, m21, m22, etc. También recuerdo que vi una tabla que explica esos campos, hace uno o dos meses. Me costó mucho tratar de encontrarlo. ¿Alguien sabe una fuente?¿Dónde puedo encontrar una explicación de todos los campos de la matriz de transformación?
Respuesta
Esa estructura se parece a esto:
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 un 4x4 matriz de transformada utilizada para transformar 4-vectores. Se puede usar para representar cualquier cantidad de transformaciones lineales. Ver el artículo de wikipedia de this sobre este tipo de matriz. La mayoría de esos elementos no se pueden interpretar de forma independiente, pero algunos sí. Por ejemplo, m41, m42 y m43 representan una traducción en 3 espacios. Así, por ejemplo si se multiplica un punto por esta matriz:
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
entonces será traducir ese punto por 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 ser representada como un vector de 4 con el cuarto elemento es 1. También tenga en cuenta que este vector es en realidad una matriz de sí mismo y el formato de esta matriz se diferencia de la que se describe en el artículo de Wikipedia en matrices de transformación. Esto se debe a que un punto generalmente está representado por una sola columna, matriz de 4 filas, sin embargo, Apple los representa como matrices de 4 columnas y una sola fila. Esto significa que cualquier matriz de transformación que veas en el artículo de wikipedia necesita ser transpuesta antes de usarla en el iPhone para que funcione correctamente.
Otro ejemplo es una transformada de escala:
[ 2 0 0 0 ]
[ 0 2 0 0 ]
[ 0 0 2 0 ]
[ 0 0 0 1 ]
que duplicará todas las coordenadas de su punto, así 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 la vista.
Aquí está más información en transforms de Apple. Apple proporciona una serie de transformaciones de utilidad para generar estas matrices, véase this link. En realidad, no discuten las matemáticas detrás de CATransform3DMakeRotation, pero sí lo hace this link.
- 1. ¿Dónde encontrar una lista de todos los eventos jQuery?
- 2. ¿Cómo encontrar todos los subconjuntos posibles de una matriz determinada?
- 3. ¿Dónde puedo encontrar una lista de consultas de medios CSS3 para todos los dispositivos comunes?
- 4. ¿Dónde puedo encontrar los registros de IIS?
- 5. ¿Dónde puedo encontrar una lista completa (!) De todos los eventos de Hibernate?
- 6. ¿Dónde puedo encontrar la documentación de configuración de xml arquillian?
- 7. Matriz de vista XNA - Buscando la explicación
- 8. ¿Dónde puedo encontrar una lista de horarios?
- 9. ¿Dónde puedo encontrar la lista de todos los rasgos especiales en Scala?
- 10. ¿Dónde puedo encontrar una biblioteca de ECommerce?
- 11. ¿Dónde puedo encontrar la implementación de XMLHttpRequest?
- 12. ¿Dónde puedo encontrar una implementación de javax.validation. *?
- 13. ¿Dónde puedo encontrar la documentación de PythonMagick?
- 14. Convierta la matriz de transformación Affine 2D a la matriz de transformación afín 3D
- 15. ¿Dónde puedo encontrar una lista de códigos de tecla?
- 16. JavaScript, objeto de transformación en una matriz
- 17. ¿Cómo puedo encontrar todos los campos públicos de un objeto en C#?
- 18. ¿Dónde puedo encontrar la fuente de System.Web.Optimization?
- 19. ¿Dónde puedo encontrar la documentación de Hpricot?
- 20. ¿Dónde puedo encontrar la documentación de MSpec?
- 21. ¿Puedo obtener todos los campos de un elemento (en Sitecore)?
- 22. ¿Dónde puedo encontrar la especificación de comandos de USSD?
- 23. Mongo: exportar todos los datos de los campos de la colección sin especificar los campos?
- 24. Separar una cadena supresión de todos los campos nulos
- 25. ¿Dónde puedo encontrar ejemplos claros de MVC?
- 26. ¿Dónde puedo encontrar una lista de bittorent dht bootstrap nodes?
- 27. Copie todos los campos de una instancia de modelo django
- 28. ¿Dónde puedo encontrar Microsoft.Build.Utilities.v3.5
- 29. ¿Dónde puedo encontrar una gran cantidad de archivos de texto?
- 30. ¿Dónde puedo encontrar "j_security_check"?
Esta es una gran explicación, pero creo que tienes tus ejes transpuestos. Los valores de traducción X, Y y Z están representados por m41, m42 y m43, no m14, m24 y m34. –
@NickLockwood buena captura, he actualizado la explicación en consecuencia. – Gabe