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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top