¿Cómo puedo convertir de grados a radianes?

Estoy tratando de convertir este código Obj-C código Swift , pero no sé cuál debería ser el equivalente de este código.

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

Busqué en Google y encontré esto

Pero no entiendo cómo convertir eso en Swift en mi caso?

Xcode 9 • Swift 4

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

Patio de recreo

 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 

Apple proporciona estas funciones GLKit para la conversión:

 func GLKMathDegreesToRadians(_ degrees: Float) -> Float func GLKMathRadiansToDegrees(_ radians: Float) -> Float 

Esto no es exactamente lo que pediste, pero en Swift 3 / iOS 10, puedes usar el tipo de Medición y hacer la conversión sin conocer la fórmula.

 let result = Measurement(value: 45, unit: UnitAngle.degrees) .converted(to: .radians).value 
 let angle = 45° // angle will be in radians, 45 is in degrees 

Comstack bajo Swift 3 . Mantenga todos los valores, realice todos los cálculos en radianes con CGFloats …, pero haga que el código sea más legible con las constantes en grados. Por ejemplo: 90 ° El signo ° hará mágicamente la conversión de grados a radianes.

Cómo configurar esto:

Defina y use un operador de postfijo para el signo ° . Este operador hará la conversión de grados a radianes. Este ejemplo es para Ints, amplíe estos también para los tipos de Float si lo necesita.

 postfix operator ° protocol IntegerInitializable: ExpressibleByIntegerLiteral { init (_: Int) } extension Int: IntegerInitializable { postfix public static func °(lhs: Int) -> CGFloat { return CGFloat(lhs) * .pi / 180 } } 

Algunos ejemplos de uso:

 let angle = 45° contentView.transform = CGAffineTransform(rotationAngle: 45°) let angle = 45 contentView.transform = CGAffineTransform(rotationAngle: angle°) 

¡Advertencia!

Es muy fácil usar esta conversión dos veces (en un valor ya en radianes por error), obtendrá un número muy pequeño como resultado, y aparentemente el ángulo resultante será siempre cero … NO use ° en el mismo valor dos veces (no convierta dos veces) !!:

 // 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 

Además, para convertir fron radianes a grados (si alguien se tropieza con esto en google):

 var degrees = radians * (180.0 / M_PI) 

Ya no estás limitado a caracteres ASCII cuando creas nombres de variables, así que ¿qué tal esto usando π (alt-p):

 typealias RadianAngle = CGFloat let π = RadianAngle(M_PI) let π_x_2 = RadianAngle(M_PI * 2) let π_2 = RadianAngle(M_PI_2) let π_4 = RadianAngle(M_PI_4) extension RadianAngle { var degrees: CGFloat { return self * 180 / π } init(degrees: Int) { self = CGFloat(degrees) * π / 180 } } 

Ejemplo de uso:

 let quarterCircle = RadianAngle(degrees: 90) print("quarter circle = \(quarterCircle) radians") // quarter circle = 1.5707963267949 radians let halfCircle = π print("half circle = \(halfCircle.degrees) degrees") // half circle = 180.0 degrees 

Usaría el mismo principio @ t1ser mencionado anteriormente, pero crea una extensión de CGFloat para que sea más fácil usar decimales para el grado también (para que puedas tener un 23.4 grados, por ejemplo):

 extension CGFloat { func degrees() -> CGFloat { return self * .pi / 180 } init(degrees: CGFloat) { self = degrees.degrees() } } 

Usarlo sería bastante fácil también (principalmente porque personalmente no sabía cómo escribir ° 😜 – en caso de que tampoco lo hiciera, es la option+shift+8 cierto):

 let degreesToConvert: CGFloat = 45.7 . . . let convertedDegrees = degreesToConvert.degrees() 

O para usar el inicializador:

 let convertedDegrees = CGFloat(degrees: 45.3) 

veloz 2.3

 func kilometersBetween(Place1:CLLocationCoordinate2D , Place2:CLLocationCoordinate2D) -> Double{ var start = MKMapPointForCoordinate(Place1) var finish = MKMapPointForCoordinate(Place2) print(MKMetersBetweenMapPoints(start, finish) / 1000) return MKMetersBetweenMapPoints(start, finish) / 1000 }