从CGAffineTransform获取旋转

Pie*_*sma 6 iphone transform objective-c

是否可以从具有平移和缩放值的CGAffineTransform获得旋转角度?如果有,怎么样?

提前致谢!

Jos*_*ord 6

atan2(rotationTransform.b, rotationTransform.d)
Run Code Online (Sandbox Code Playgroud)

某人建议的acos(b)解决方案仅在+/- 0.5pi范围内有效.这种解决方案在旋转,平移和缩放的组合下似乎很稳健,尽管几乎肯定不会剪切.我之前的回答(atan2(rotationTransform.b, rotationTransform.a)对于缩放并不健壮.

这个副本是我原来答案的基础.

  • 我认为它应该是`atan2(rotationTransform.b,rotationTransform.d)` (2认同)

zap*_*aph 5

取仿射成员b或c的asin()或acos().

struct CGAffineTransform {
   CGFloat a;
   CGFloat b;
   CGFloat c;
   CGFloat d;
   CGFloat tx;
   CGFloat ty;
};
Run Code Online (Sandbox Code Playgroud)

  • "Quartz 2D Programming Guide"的"Math Behind the Matrices"子部分解释了这背后的数学原理:http://developer.apple.com/mac/library/DOCUMENTATION/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_affine/dq_affine.html# // apple_ref/DOC/UID/TP30001066-CH204-CJBECIAD (4认同)
  • 有规模时,asin和acos不正确.正确的公式是:CGFloat radians = atan2f(self.view.transform.b,self.view.transform.a); CGFloat度=弧度*(180/M_PI); (3认同)