¿Cómo calculo la rotación en radianes alrededor del eje Z dando una estructura CATransform3D como entrada?iPhoneSDK calcular Ángulo de rotación de CATransform3D
básicamente lo que necesito es al revés de CATransform3DMakeRotation
.
¿Cómo calculo la rotación en radianes alrededor del eje Z dando una estructura CATransform3D como entrada?iPhoneSDK calcular Ángulo de rotación de CATransform3D
básicamente lo que necesito es al revés de CATransform3DMakeRotation
.
Depende del eje en el que esté haciendo la rotación.
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)
así ángulo debe 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)
Si la transformada está unida a una capa, entonces se puede obtener el valor de la rotación como de la siguiente manera:
CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];
Desde el documentation:
Animación núcleo se extiende el protocolo de codificación de valor-clave para permitir la obtención y configuración de los valores comunes de matriz CATransform3D de una capa a través de caminos principales. La tabla 4 describe las rutas clave para las que las propiedades transform y sublayerTransform de una capa son clave-valor de codificación y observación conforme
Asegúrese de utilizar atan2 y not atan, ya que el último no dará un ángulo en el cuadrante correcto. –
Gracias Nader, antes de su respuesta, había recurrido a utilizar la propiedad affaireTransform de CALayer, convierta el Transform3D en un AffineTransform y luego saque el ángulo de este cálculo: http: //stackoverflow.com/questions/2051811/iphone- sdk-cgaffinetransform-getting-the-angle-of-rotation-of-an-object Ahora sé cómo calcular directamente desde Transform3D. ¡Gracias! – ravinsp
Sí, aprendí esto en el primer año de la universidad y recuerdo haberle preguntado a mi amigo "por qué lo hará, necesitamos saber esto" –