viceversa segundos revoluciones radianes minutos grados ejercicios convertir conversion como ios objective-c macos swift macros

ios - segundos - convertir grados a radianes



¿Cómo puedo convertir de grados a radianes? (9)

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

var degrees = radians * (180.0 / M_PI)

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é this

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


Apple proporciona estas funciones GLKit para la conversión:

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


Esto no es idéntico a 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


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

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

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

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

O para usar el inicializador:

let convertedDegrees = CGFloat(degrees: 45.3)


Ya no estás limitado a los caracteres ASCII cuando creas nombres de variables, entonces, ¿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


rápido 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 }


Swift 4.2

Puede escribir funciones genéricas globales:

public func radians<T: FloatingPoint>(degrees: T) -> T { return .pi * degrees / 180 } public func degrees<T: FloatingPoint>(radians: T) -> T { return radians * 180 / .pi }

Ejemplo:

let cgFloat: CGFloat = 23.0 let double: Double = 23.0 let float: Float = 23.0 let int: Int = 23 let cgf = radians(degrees: cgFloat) // 0.4014 CGFloat let d = radians(degrees: double) // 0.4014 Double let f = radians(degrees: float) // 0.4014 Float let i = radians(degrees: int) // compile error

En caso de que no desee ampliar todos sus tipos flotantes como este

extension FloatingPoint { ... }


Xcode 10 • Swift 4.2 o posterior

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

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


let angle = 45° // angle will be in radians, 45 is in degrees

Compila bajo Swift 3 . Todavía mantenga todos los valores, haga 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 postfix para el signo ° . Este operador realizará la conversión de grados a radianes. Este ejemplo es para Ints, extiéndelos también para los tipos Float si es necesario.

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 que ya está en radianes por error), obtendrá un número muy pequeño como resultado, y aparentemente el ángulo resultante siempre será cero ... NO use ° en el mismo valor dos veces (no convertir 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