Domanda

Come faccio a calcolare la rotazione in radianti intorno asse Z, dando una struttura CATransform3D come input?

fondamentalmente quello che ho bisogno è il contrario di CATransform3DMakeRotation.

È stato utile?

Soluzione

Dipende da cosa asse si sta facendo la rotazione su.

rotazione intorno all'asse z è rappresentato come:

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)

così angolo dovrebbe essere a = atan2 (transform.m12, transform.m11);

La rotazione attorno all'asse 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 rotazione attorno all'asse 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) 

Altri suggerimenti

Se la trasformazione è fissato a un livello, allora si può ottenere il valore della rotazione come segue:

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

Dalla documentazione :

  

Core Animation estende il valore-chiave di codifica protocollo per consentire ottenere e impostare dei valori comuni di matrice CATransform3D di un livello attraverso percorsi principali. Tabella 4 descrive i percorsi principali per i quali uno strato di trasformare e le proprietà sublayerTransform sono valore-chiave di codifica e osservando compatibile

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top