围绕一个中心点旋转CGPoint
问题描述:
我一直在试图找到一个使用2D变换矩阵来旋转另一个CGPoint中心附近的CGPoint的例子,但是我没有找到最近的东西。围绕一个中心点旋转CGPoint
有没有人设法做到这一点?在这个用例中使用CGAffineTransform不是一个选项,因为我需要这些点。
预先感谢
答
旋转围绕的任意点的最简单的方式是到该点移动到零,由所希望的角度旋转,并返回到原点。 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是不是真的在我使用的情况选择,但我是能够成功地旋转了一系列使用该方法从这个答案https://*.com/a/35683523/3591202 CGPoints的。以下是我用来旋转CGPoints的扩展名。
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)
}
此方法在我的用例中并未实际工作。 虽然从这里的方法工作完美,但! http://*.com/a/1595337/3591202 – bevbomb
什么是真的不工作?你的解决方案有时是不必要的,因为你正在使用平方根和反向切线。注意:'angle'的弧度不是度数。 – clemens