【iOS】Swiftでtransformから角度、ラジアン、ディグリー、スケールを求める


メモ

Swift 4 でtransformから角度、ラジアン、ディグリー、スケールを求める 忘れがちなので・・・。


let transform = view.transform
let radians = atan2(transform.b, transform.a)
let degrees = radians * 180 / .pi
let scale = sqrt(abs(transform.a * transform.d - transform.b * transform.c))


import CoreGraphics

extension CGAffineTransform {
    var angle: CGFloat {
        return atan2(b, a)
    }
    
    var radians: CGFloat {
        return angle
    }
    
    var degrees: CGFloat {
        return angle * 180.0 / CGFloat.pi
    }
    
    var scale: CGPoint {
        return CGPoint(x: sqrt(a * a + c * c), y: sqrt(b * b + d * d))
    }
}

// 例として、適当な CGAffineTransform を作成
let transform = CGAffineTransform(rotationAngle: CGFloat.pi/4).scaledBy(x: 2.0, y: 1.5)

let angleInRadians = transform.radians
let angleInDegrees = transform.degrees
let scale = transform.scale

print("Angle in radians: \(angleInRadians)")
print("Angle in degrees: \(angleInDegrees)")
print("Scale: \(scale)")

2024/06/14 、コメント多めに書き直してみた。

import CoreGraphics

// CGAffineTransformの拡張機能を定義
extension CGAffineTransform {
    
    // 現在の変換の回転角度をラジアン単位で取得
    var angle: CGFloat {
        return atan2(b, a)
    }
    
    // 回転角度をラジアンで取得('angle'プロパティのエイリアス)
    var radians: CGFloat {
        return angle
    }
    
    // 回転角度を度数法で取得
    var degrees: CGFloat {
        return angle * 180.0 / CGFloat.pi
    }
    
    // 現在の変換のスケールをCGPointとして取得
    var scale: CGPoint {
        return CGPoint(x: sqrt(a * a + c * c), y: sqrt(b * b + d * d))
    }
}

// 例として、回転とスケールを含むCGAffineTransformを作成
let transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4).scaledBy(x: 2.0, y: 1.5)

// 回転角度をラジアンで取得
let angleInRadians = transform.radians

// 回転角度を度数法で取得
let angleInDegrees = transform.degrees

// スケールを取得
let scale = transform.scale

// 結果を出力
print("Angle in radians: \(angleInRadians)") // 出力: 回転角度(ラジアン)
print("Angle in degrees: \(angleInDegrees)") // 出力: 回転角度(度数法)
print("Scale: \(scale)") // 出力: スケール

コメント

このブログの人気の投稿

【android】 Webviewのコントローラー(ピンチイン・ピンチアウトのボタン)を消す

【android】PdfDocumentとPdfRenderer を利用しPDFの作成と表示 (java)