iPhoneSDK ángulo de rotación de calcular CATransform3D
-
01-10-2019 - |
Pregunta
¿Cómo se calcula la rotación en radianes alrededor del eje Z, dando una estructura CATransform3D como la entrada?
básicamente lo que necesito es a la inversa de CATransform3DMakeRotation
.
Solución
Depende de lo que está haciendo eje de la rotación de.
rotación alrededor del eje z se representa como:
a = angle in radians
x' = x*cos.a - y*sin.a
y' = x*sin.a + y*cos.a
z' = z
( cos.a sin.a 0 0)
(-sin.a cos.a 0 0)
( 0 0 1 0)
( 0 0 0 1)
so ángulo debería ser a = atan2 (transform.m12, transform.m11);
La rotación alrededor del eje x:
a = angle in radians
y' = y*cos.a - z*sin.a
z' = y*sin.a + z*cos.a
x' = x
(1 0 0 0)
(0 cos.a sin.a 0)
(0 -sin.a cos.a 0)
(0 0 0 1)
La rotación alrededor del eje Y:
a = angle in radians
z' = z*cos.a - x*sin.a
x' = z*sin.a + x*cos.a
y' = y
(cos.a 0 -sin.a 0)
(0 1 0 0)
(sin.a 0 cos.a 0)
(0 0 0 1)
Otros consejos
Si la transformación se une a una capa, entonces se puede obtener el valor de la rotación como sigue:
CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];
A partir de la documentación :
Core Animation se extiende el valor-clave protocolo para permitir la obtención y configuración de los valores comunes de matriz CATransform3D de una capa a través de rutas clave de codificación. La Tabla 4 describe los caminos clave para los que una capa de transformar y propiedades sublayerTransform son la codificación y la observación de clave-valor compatible