Ios 围绕中心点旋转一个点
我一直试图找到一个使用2D变换矩阵围绕另一个CG点的中心旋转一个CG点的例子,但我没有找到最近的任何东西 有人做到了吗?在这个用例中,使用CGAffineTransform不是一个选项,因为我需要这些点Ios 围绕中心点旋转一个点,ios,swift,xcode,swift3,cgpoint,Ios,Swift,Xcode,Swift3,Cgpoint,我一直试图找到一个使用2D变换矩阵围绕另一个CG点的中心旋转一个CG点的例子,但我没有找到最近的任何东西 有人做到了吗?在这个用例中,使用CGAffineTransform不是一个选项,因为我需要这些点 提前感谢围绕任意点旋转的最简单方法是将该点移动到零,旋转所需的角度,然后移回原点CGAffineTransform可以很好地使用CGPoint操作: let transform = CGAffineTransform(translationX:-center.x y:-center.y)
提前感谢围绕任意点旋转的最简单方法是将该点移动到零,旋转所需的角度,然后移回原点
CGAffineTransform
可以很好地使用CGPoint
操作:
let transform = CGAffineTransform(translationX:-center.x y:-center.y)
.rotate(by:angle)
.translateBy(x:center.x, y:center.y)
let newPoint = point.applying(transform)
在我的用例中,使用CGAffineTransform并不是一个真正的选项,但是我能够使用这个答案中的方法成功地旋转一系列CGPoints。下面是我用来旋转CGP点的扩展
func rotate(around center: CGPoint, with degrees: CGFloat) -> CGPoint {
let dx = self.x - center.x
let dy = self.y - center.y
let radius = sqrt(dx * dx + dy * dy)
let azimuth = atan2(dy, dx) // in radians
let newAzimuth = azimuth + degrees * CGFloat(M_PI / 180.0) // convert it to radians
let x = center.x + radius * cos(newAzimuth)
let y = center.y + radius * sin(newAzimuth)
return CGPoint(x: x, y: y)
}
这个方法在我的用例中实际上不起作用。不过,这里的方法非常有效!什么是真正不起作用的?您的解决方案有时是不必要的,因为您使用的是平方根和反tangens。注意:
角度
以弧度而不是度为单位。