如何将度数转换为弧度?

Dha*_*esh 100 macos macros objective-c ios swift

我试图将此Obj-C代码转换为Swift代码,但我不知道这段代码的等价物应该是什么?

#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
Run Code Online (Sandbox Code Playgroud)

我用Google搜索并找到了这个

但我不明白在我的情况下如何在Swift中转换它?

Leo*_*bus 247

Xcode 10•Swift 4.2或更高版本

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

extension FloatingPoint {
    var degreesToRadians: Self { return self * .pi / 180 }
    var radiansToDegrees: Self { return self * 180 / .pi }
}
Run Code Online (Sandbox Code Playgroud)

操场

45.degreesToRadians         // 0.785398163397448

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

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

Double(45).degreesToRadians    // 0.7853981633974483
CGFloat(45).degreesToRadians   // 0.785398163397448
Float(45).degreesToRadians     // 0.7853981
Float80(45).degreesToRadians   // 0.785398163397448278999
Run Code Online (Sandbox Code Playgroud)

  • 你不应该扩展`CGFloat`? (3认同)
  • 实际上,在Swift 3中你可以使用测量类型,你根本不需要知道转换公式! (3认同)
  • **请注意**这个superpro提示...... http://stackoverflow.com/a/28600210/294884 (3认同)
  • @Zorayr 更新到 Swift 3 并扩展 FloatingPoint 现在扩展了它们 (2认同)
  • 无故投票没有任何意义。发表评论 (2认同)

mat*_*att 58

这与你提出的不完全相同,但在Swift 3/iOS 10中,你可以使用Measurement类型并在不知道公式的情况下进行转换!

let result = Measurement(value: 45, unit: UnitAngle.degrees)
    .converted(to: .radians).value
Run Code Online (Sandbox Code Playgroud)

  • 惊人的@matt再次上班,谢谢!不幸的是只有iOS 10. (4认同)

Cra*_*lot 42

Apple 为转换提供了这些GLKit函数:

func GLKMathDegreesToRadians(_ degrees: Float) -> Float
func GLKMathRadiansToDegrees(_ radians: Float) -> Float
Run Code Online (Sandbox Code Playgroud)


t1s*_*ser 16

let angle = 45° // angle will be in radians, 45 is in degrees
Run Code Online (Sandbox Code Playgroud)

Swift 3下编译.仍保留所有值,使用CGFloats以弧度进行所有计算...,但使用常量度数使代码更具可读性.例如:90 °°符号会神奇地对弧度进行转换.

如何设置:

°符号定义并使用后缀运算符.此运算符将执行从度到弧度的转换.此示例适用于Ints,如果您有需要,还可以为Float类型扩展它们.

postfix operator °

protocol IntegerInitializable: ExpressibleByIntegerLiteral {
  init (_: Int)
}

extension Int: IntegerInitializable {
  postfix public static func °(lhs: Int) -> CGFloat {
    return CGFloat(lhs) * .pi / 180
  }
}
Run Code Online (Sandbox Code Playgroud)

一些使用示例:

let angle = 45°

contentView.transform = CGAffineTransform(rotationAngle: 45°)

let angle = 45
contentView.transform = CGAffineTransform(rotationAngle: angle°)
Run Code Online (Sandbox Code Playgroud)

警告!

很容易使用这个转换两次(在错误的弧度值上),结果会得到一个非常小的数字,看起来结果的角度总是为零......不要在相同的情况下使用°值两次(不转换两次)!!:

// OBVIOUSLY WRONG!
let angle = 45°° // ° used twice here

// WRONG! BUT EASY TO MISS
let angle = 45° // ° used here
contentView.transform = CGAffineTransform(rotationAngle: angle°) // ° also used here
Run Code Online (Sandbox Code Playgroud)


nik*_*ans 11

此外,要将fron弧度转换为度数(如果有人在谷歌上发现这一点):

var degrees = radians * (180.0 / M_PI)
Run Code Online (Sandbox Code Playgroud)


Jam*_*ush 5

在度数和弧度之间转换 Double 的最有效和准确的方法:

import Foundation

extension Double {
    var radians: Double { return Measurement(value: self, unit: UnitAngle.degrees).converted(to: UnitAngle.radians).value }
    var degrees: Double { return Measurement(value: self, unit: UnitAngle.radians).converted(to: UnitAngle.degrees).value }
}
Run Code Online (Sandbox Code Playgroud)

Apple 的基金会团队很早就解决了这个问题,开发了一种超越所有其他解决方案的解决方案:

测量和单位 - WWDC 2016,第 238 场会议