如何通過給出CATransform3D結構作爲輸入來計算圍繞Z軸的弧度旋轉?iPhoneSDK通過CATransform3D計算旋轉角度
基本上我需要的是另一輪的CATransform3DMakeRotation
。
如何通過給出CATransform3D結構作爲輸入來計算圍繞Z軸的弧度旋轉?iPhoneSDK通過CATransform3D計算旋轉角度
基本上我需要的是另一輪的CATransform3DMakeRotation
。
這取決於你在做什麼軸旋轉。
繞z軸被表示爲:
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)
所以角應一個= ATAN2(transform.m12,transform.m11);
繞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)
繞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)
如果變換被附接到的層,則可以得到這樣的旋轉的值如下:
CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];
核心動畫延伸鍵值編碼協議,以允許獲取和通過鍵路徑的層的CATransform3D矩陣的公共值的設定。表4描述了圖層的transform和sublayerTransform屬性是關鍵值編碼和觀察兼容的關鍵路徑
確保使用atan2而不是atan,因爲後者不會在正確的象限中給出角度。 – 2010-10-15 13:02:05
謝謝你納德,在你回答之前,我已經回過頭來使用CALayer的affineTransform屬性將Transform3D轉換成AffineTransform,然後從這個計算中獲得角度:http://stackoverflow.com/questions/2051811/iphone- sdk-cgaffinetransform-getting-the-object-rotation-of-object 現在我知道了,如何從Transform3D直接計算。謝謝! – ravinsp 2010-10-16 06:18:44
是的,我在第一年瞭解到了這一點,並記得詢問我的朋友「爲什麼他會這麼做,我們需要知道這個」 – 2010-10-16 12:51:45