Parfois, il est vraiment difficile de convertir les coordonnées cartésiennes en coordonnées (x,y)
polaires (r,phi)
. Alors que vous pouvez calculer r = sqrt(x^2+y^2)
assez facilement, il faut souvent une distinction des cas lors du calcul de l'angle phi
parce que arcsin
, arccos
et arctan
et toutes les autres fonctions trigonométriques un co-domaine que chaque seulement travées moitié du cercle.
Dans de nombreuses langues, il existe des fonctions intégrées pour convertir des coordonnées rectangulaires en coordonnées polaires, ou au moins ont une atan2
fonction qui - compte tenu (x,y)
- calcule l'angle phi
.
Tâche
Votre tâche consiste à écrire un programme / une fonction qui prend deux coordonnées cartésiennes (virgule flottante, pas les deux nulles) (x,y)
et génère l'angle polaire correspondant phi
, où phi
doit être exprimé en degrés, radians ou grades (avec des grades, je veux dire des gradiens qui sont 1 / 400 du cercle complet), selon ce qui vous convient le mieux.
L'angle est mesuré en orientation positive, et nous avons l'angle zéro pour (1,0)
.
Détails
Vous ne pouvez pas utiliser Encastrements qui calculent l'angle phi
donné deux coordonnées, y compris atan2
, rect2polar
, argOfComplexNumber
et des fonctions similaires. Cependant, vous pouvez utiliser les fonctions trigonométriques habituelles et leurs inverses, qui ne prennent qu'un seul argument. Tous les symboles d'unité sont facultatifs.
Le rayon r
doit être non négatif et phi
doit être compris dans la plage [-360°, 360°]
(peu importe que vous produisiez 270°
ou non -90°
).
Exemples
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°
la source
Réponses:
MATL , 12 octets
Le résultat est en radians.
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
MATL n'a pas de
atan
fonction (elle en aatan2
, mais elle ne peut pas être utilisée pour ce défi). J'ai donc eu recours àacos
.la source
0<?_
, en rasant quelques octets|
). Mais ici je change signe du résultat en fonction du signe de la seconde entrée ,y
. En plus,y
peut l'être0
, donc je ne peux pas multiplier pary/abs(y))
JavaScript (ES6),
5040 octetsLe résultat est en radians. Edit: J'ai sauvé 10 octets quand j'ai remarqué qu'il était permis que le résultat soit entre -90 ° et 270 °. Version précédente avec
-Math.PI<=result<Math.PI
:la source
||0
sert?x=y=0
cas.MATLAB / Octave, 24 octets
Ceci définit une fonction anonyme qui produit le résultat en radians.
Essayez-le sur ideone .
la source
Javascript ES6, 54 octets
Utilise des radians.
la source
Gelée , 11 octets (non concurrent)
La sortie est en radians. Malheureusement, Jelly avait un bogue de signe dans ses atomes de division, rendant cette réponse non compétitive en raison de la correction de bogue requise.
Essayez-le en ligne! ou vérifiez tous les cas de test (convertis en degrés).
Comment ça fonctionne
la source
-1÷0
donnéinf
au lieu de-inf
), il est donc peu probable qu'il affecte la plupart des défis.Python 3,
7567 octets8 octets grâce à Dennis.
Ideone it!
la source
and
etor
?and
etor
.pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2
enregistre quelques octets.&
est un opérateur au niveau du bit.APL (Dyalog Unicode) ,
1210 octets SBCS-2 grâce à ngn.
Fonction infixe tacite anonyme. Utilise la formule d'alephalpha . Prend
x
comme argument de droite ety
comme argument de gauche. Le résultat est en radians.Essayez-le en ligne!
,
concaténer ley
etx
0J1⊥
Évaluer en tant que chiffres de base i (c'est-à-dire y i ¹ + x i ⁰)⍟
logarithme naturel de cette∘
ensuite11○
une partie imaginaire de celala source
11○∘⍟
->12○
argOfComplexNumber
Mathematica, 16 octets
Je ne sais pas si
Log
est considéré comme un intégré qui calcule l'angle à partir de deux coordonnées.Exemple:
la source
Langage machine x86 (Linux 32 bits),
2513 octets (sans concurrence)Pour l' essayer en ligne , compilez le programme C suivant (n'oubliez pas l'
-m32
indicateur sur x86_64)la source
J , 10 octets
Fonction infixe tacite anonyme. Les usages la formule d'alephalpha . Prend
x
comme argument de gauche ety
comme argument de droite. Le résultat est en radians.Essayez-le en ligne!
j.
calculerx
+y
× i@
ensuite^.
logarithme naturel de cette11 o.
une partie imaginaire de celala source
Pyth, 26 octets
theta
en radians.Suite de tests.
la source
𝔼𝕊𝕄𝕚𝕟, 13 caractères / 17 octets
Try it here (ES6 browsers only).
Utilise
(x<0)*pi+tan(y/x)
.la source
Python 3, 65 octets
Cela produit des radians dans la plage
[-π/2, 3π/2)
, équivalant à des[-90, 270)
degrés.la source
Axiome, 58 octets
test (j'utilise uniquement acos () il renvoie des radiants)
la source
Python 2 , 59 octets
Essayez-le en ligne!
Sorties en radians à portée
[-pi,pi)
la source