5

我有一個高度爲50的圖層,並且我將它圍繞x軸旋轉。 。 。如何在旋轉過程中計算高度?CATransform3D:透視變換後計算高度

CATransform3D subLayerTransform = CATransform3DMakeTranslation(0, 0, 0); 
subLayerTransform.m34 = -1/1800; //How does height relate to perspective and angle? 
subLayerTransform = CATransform3DTranslate(subLayerTransform, 0, 0, 0); 
subLayerTransform = CATransform3DRotate(subLayerTransform, 45 * (M_PI/180), 1, 0, 0); 
_transitionLayer.sublayerTransform = subLayerTransform; 
+1

它是sin(alpha)* length + cos(alpha)* height。 –

+0

你能詳細說一下嗎?什麼是阿爾法,高度和長度?你能把身高作爲方程的主題嗎?如果高度爲50,沒有旋轉,旋轉45度後的高度是多少? –

+1

它是:new_height = sin(50)* _ transitionLayer.bounds.size.width + cos(50)* _ transitionLayer.bounds.size.height。 –

回答

3

繞y軸

  • Y '= Y * COS q - Z *罪q
  • Z'= Y *罪Q + Z * COS q
  • x'= x

並且高度是y1-y0。爲此計算新的y1和y0:

CGFloat y0 = 0; 
CGFloat y1 = 50; 
CGFloat z = -1800; //This relates to the m34 perspective matrix. 

y0 = y0 * cos(radians(45)) - z * sin(radians(45)); 
y1 = y1 * cos(radians(45)) - z * sin(radians(45)); 

CGFloat newHeight = y1 - y0; 
+0

如果.m34不是0,newHeight實際上不是y1 - y0,它比y1 - y0稍短。因爲透視效果使得屏幕上的高度顯示更短。 – lxmfly123