2016-11-22 29 views
0

2D変換マトリックスを使用して別のCGPointの中心を中心にCGPointを回転させる例を見つけようとしていますが、最近は何も見つかりませんでした。中心点を中心にCGPointを回転する

誰でもこれを達成できましたか? CGAffineTransformの使用は、このユースケースではポイントを必要とするためオプションではありません。予め

答えて

1

おかげで任意の点の周りを回転する最も簡単な方法は、ゼロにその点を移動させる所望の角度だけ回転させ、バック原点に移動させることです。 CGAffineTransformは非常によくCGPointで動作することができますCGAffineTransformを使用して

let transform = CGAffineTransform(translationX:-center.x y:-center.y) 
        .rotate(by:angle) 
        .translateBy(x:center.x, y:center.y) 
let newPoint = point.applying(transform) 
+0

この方法は実際には私の使用例では機能しませんでした。 ここからの方法は完全に機能しました! http://stackoverflow.com/a/1595337/3591202 – bevbomb

+0

実際に動作していないものは何ですか?平方根と逆タンジェントを使用しているため、あなたの解は不要なことがあります。注:angleは度ではないラジアンです。 – clemens

0

は本当に私のユースケースではオプションではありませんでしたが、私は正常にこの答えhttps://stackoverflow.com/a/35683523/3591202からメソッドを使用してCGPointsのシリーズを回転させることができました。以下は、CGPointを回転させるために使用した拡張機能です。

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) 
} 
関連する問題