1. ホーム
  2. ios

[解決済み] 度数からラジアンへの変換方法を教えてください。

2022-10-04 09:30:54

質問

私は、以下のものを変換しようとしています。 Obj-C のコードを Swift のコードに変換する必要がありますが、このコードに相当するものが何であるかがわかりません。

#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)

ググってみると この

しかし、私の場合、Swiftでそれを変換する方法が理解できませんか?

どのように解決するのですか?

Xcode 11 - Swift 5.1 またはそれ以降。

extension BinaryInteger {
    var degreesToRadians: CGFloat { CGFloat(self) * .pi / 180 }
}

extension FloatingPoint {
    var degreesToRadians: Self { self * .pi / 180 }
    var radiansToDegrees: Self { self * 180 / .pi }
}


遊び場

45.degreesToRadians         // 0.7853981633974483

Int(45).degreesToRadians    // 0.7853981633974483
Int8(45).degreesToRadians   // 0.7853981633974483
Int16(45).degreesToRadians  // 0.7853981633974483
Int32(45).degreesToRadians  // 0.7853981633974483
Int64(45).degreesToRadians  // 0.7853981633974483

UInt(45).degreesToRadians   // 0.7853981633974483
UInt8(45).degreesToRadians  // 0.7853981633974483
UInt16(45).degreesToRadians // 0.7853981633974483
UInt32(45).degreesToRadians // 0.7853981633974483
UInt64(45).degreesToRadians // 0.7853981633974483

Double(45).degreesToRadians    // 0.7853981633974483
CGFloat(45).degreesToRadians   // 0.7853981633974483
Float(45).degreesToRadians     // 0.7853981
Float80(45).degreesToRadians   // 0.78539816339744830963

もし、2進整数が常にCGFloatを返すのではなく、浮動小数点型を返すようにしたい場合は、計算されたプロパティではなく、ジェネリックメソッドを作ることができます。

extension BinaryInteger {
    func degreesToRadians<F: FloatingPoint>() -> F {  F(self) * .pi / 180 }
}


let radiansDouble: Double = 45.degreesToRadians()   // 0.7853981633974483
let radiansCGFloat: CGFloat = 45.degreesToRadians() // 0.7853981633974483
let radiansFloat: Float = 45.degreesToRadians()     // 0.7853981
let radiansFloat80: Float80 = 45.degreesToRadians() // 0.78539816339744830963