我一直在試圖找到一個使用2D變換矩陣來旋轉另一個CGPoint中心附近的CGPoint的例子,但是我沒有找到最近的東西。圍繞一箇中心點旋轉CGPoint
有沒有人設法做到這一點?在這個用例中使用CGAffineTransform不是一個選項,因爲我需要這些點。
預先感謝
我一直在試圖找到一個使用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://stackoverflow.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://stackoverflow.com/a/1595337/3591202 – bevbomb
什麼是真的不工作?你的解決方案有時是不必要的,因爲你正在使用平方根和反向切線。注意:'angle'的弧度不是度數。 – clemens