【发布时间】:2021-11-09 14:48:54
【问题描述】:
我正在尝试将 CGAffineTransform 分解为旋转、缩放和平移组件,如下所示:
public extension CGAffineTransform {
func rotationRadians() -> CGFloat {
return atan2(b, a)
}
func translation() -> CGPoint {
return CGPoint(x: tx, y: ty)
}
func scaleXY() -> CGPoint {
let scalex = sqrt(a * a + c * c)
let scaley = sqrt(d * d + b * b)
return CGPoint(x: scalex, y: scaley)
}
}
现在我通过破坏它然后从相同的组件重新构造它来尝试随机变换的代码,但无论我在连接中使用什么顺序,答案都不会相同。不知道我做错了什么。
let randomTransform = __CGAffineTransformMake(2.078, 3.459, 1.676, 0, 591, 397)
let rotationRadians = randomTransform.rotationRadians()
let scaleXY = randomTransform.scaleXY()
let translation = randomTransform.translation()
let translationTransform = CGAffineTransform(translationX: translation.x, y: translation.y)
let scalingTransform = CGAffineTransform(scaleX: scaleXY.x, y: scaleXY.y)
let rotationTransform = CGAffineTransform(rotationAngle: rotationRadians)
var newTransform = rotationTransform.concatenating(scalingTransform).concatenating(translationTransform)
NSLog("New transform \(newTransform), original \(randomTransform)")
这是控制台的输出:
New transform CGAffineTransform(a: 1.374790977280978, b: 2.965084308709465, c: -2.2884513909600113, d: 1.7812793274062642, tx: 591.0, ty: 397.0), original CGAffineTransform(a: 2.078, b: 3.459, c: 1.676, d: 0.0, tx: 591.0, ty: 397.0)
【问题讨论】:
标签: ios swift uikit core-graphics cgaffinetransform