Question

Comment puis-je calculer la rotation en radians autour de l'axe Z en donnant une struct CATransform3D comme entrée?

essentiellement ce que j'ai besoin est l'inverse de CATransform3DMakeRotation.

Était-ce utile?

La solution

Cela dépend de quel axe que vous faites la rotation sur.

Rotation autour de l'axe z est représentée comme suit:

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 angle doit être a = atan2 (transform.m12, transform.m11);

Rotation autour de l'axe 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)

Rotation autour de l'axe 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) 

Autres conseils

Si la transformation est fixée à une couche, alors vous pouvez obtenir la valeur de la rotation comme suit:

CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];

De la documentation :

  

Core Animation étend le protocole de codage clé-valeur pour permettre l'obtention et le réglage des valeurs communes de la matrice CATransform3D d'une couche à travers des chemins principaux. Le tableau 4 décrit les voies principales pour lesquelles une couche transform et les propriétés de sublayerTransform sont-valeur de clé de codage et d'observation conforme

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top