Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 围绕中心点旋转一个点_Ios_Swift_Xcode_Swift3_Cgpoint - Fatal编程技术网

Ios 围绕中心点旋转一个点

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)

我一直试图找到一个使用2D变换矩阵围绕另一个CG点的中心旋转一个CG点的例子,但我没有找到最近的任何东西

有人做到了吗?在这个用例中,使用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并不是一个真正的选项,但是我能够使用这个答案中的方法成功地旋转一系列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。注意:
角度
以弧度而不是度为单位。