A veces es realmente difícil convertir las coordenadas cartesianas en coordenadas (x,y)polares (r,phi). Si bien se puede calcular r = sqrt(x^2+y^2)con bastante facilidad, a menudo es necesario algún tipo de distinción de los casos cuando se calcula el ángulo phidebido arcsin, arccosy arctany todas las demás funciones trigonométricas tener un co-dominio que cada uno sólo vanos medio del círculo.
En muchos idiomas hay incorporados para convertir coordenadas rectangulares a polares, o al menos tienen una atan2función que, dada (x,y), calcula el ángulo phi.
Tarea
Su tarea es escribir un programa / función que tome dos coordenadas cartesianas (de coma flotante, no ambas cero) (x,y)y genere el ángulo polar correspondiente phi, donde phidebe estar en grados, radianes o grados (con grados me refiero a gradientes que son 1 / 400 del círculo completo), lo que sea más conveniente para usted.
El ángulo se mide en orientación positiva, y tenemos el ángulo cero para (1,0).
Detalles
Está prohibido utilizar muebles empotrados que permiten calcular el ángulo phidado dos coordenadas, incluyendo atan2, rect2polar, argOfComplexNumbery funciones similares. Sin embargo, puede usar las funciones trigonométricas habituales y sus reversos, que solo requieren un argumento. Cualquier símbolo de unidad es opcional.
El radio rdebe ser no negativo y phidebe estar en el rango [-360°, 360°](no importa si se emite 270°o no -90°).
Ejemplos
Input Output
(1,1) 45°
(0,3) 90°
(-1,1) 135°
(-5,0) 180°
(-2,-2) 225°
(0,-1.5) 270°
(4,-5) 308.66°
fuente

Respuestas:
MATL , 12 bytes
El resultado está en radianes.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
MATL no tiene una
atanfunción (síatan2, pero no se puede usar para este desafío). Entonces recurrí aacos.fuente
0<?_, reduciendo unos pocos bytes|). Pero aquí estoy cambiando signo del resultado basado en el signo de la segunda entrada ,y. Además,ypuede ser0, así que no puedo multiplicar pory/abs(y))JavaScript (ES6),
5040 bytesEl resultado está en radianes. Editar: guarde 10 bytes cuando noté que está permitido que el resultado esté entre -90 ° y 270 °. Versión anterior con
-Math.PI<=result<Math.PI:fuente
||0de?x=y=0caso.MATLAB / Octave, 24 bytes
Esto define una función anónima que produce el resultado en radianes.
Pruébalo con ideone .
fuente
Javascript ES6, 54 bytes
Utiliza radianes.
fuente
Gelatina , 11 bytes (no competitiva)
La salida está en radianes. Desafortunadamente, Jelly tenía un error de signo en sus átomos de división, lo que hace que esta respuesta no compita debido a la corrección de errores requerida.
Pruébalo en línea! o verificar todos los casos de prueba (convertidos a grados).
Cómo funciona
fuente
-1÷0dado eninflugar de-inf), por lo que es poco probable que afecte a la mayoría de los desafíos.Python 3,
7567 bytes8 bytes gracias a Dennis.
Ideone it!
fuente
andyor?andyor.pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2Guarda algunos bytes.&es un operador bit a bit.APL (Dyalog Unicode) ,
1210 bytes SBCS-2 gracias a ngn.
Función de infijo tácito anónimo. Utiliza la fórmula de alephalpha . Toma
xcomo argumento correcto yycomo argumento izquierdo. El resultado está en radianes.Pruébalo en línea!
,concatenar elyyx0J1⊥Evaluar como base i dígitos (es decir, y i ¹ + x i ⁰)⍟logaritmo natural de eso∘luego11○parte imaginaria de esofuente
11○∘⍟->12○argOfComplexNumberMathematica, 16 bytes
No estoy seguro de si
Logse considera como una función integrada que calcula el ángulo dado dos coordenadas.Ejemplo:
fuente
lenguaje de máquina x86 (Linux de 32 bits),
2513 bytes (sin competencia)Para probarlo en línea , compile el siguiente programa C (no olvide
-m32marcar en x86_64)fuente
J , 10 bytes
Función de infijo tácito anónimo. Utiliza la fórmula de alephalpha . Toma
xcomo argumento izquierdo yycomo argumento derecho. El resultado está en radianes.Pruébalo en línea!
j.calcularx+y× i@luego^.logaritmo natural de eso11 o.parte imaginaria de esofuente
Pyth, 26 bytes
thetaen radianesBanco de pruebas.
fuente
𝔼𝕊𝕄𝕚𝕟, 13 caracteres / 17 bytes
Try it here (ES6 browsers only).
Usos
(x<0)*pi+tan(y/x).fuente
Python 3, 65 bytes
Esto produce radianes en el rango
[-π/2, 3π/2), equivalente a[-90, 270)grados.fuente
Axioma, 58 bytes
prueba (solo uso acos () devuelve radiantes)
fuente
Python 2 , 59 bytes
Pruébalo en línea!
Salidas en radianes en rango
[-pi,pi)fuente