Manchmal ist es wirklich schwierig, kartesische Koordinaten (x,y)
in Polarkoordinaten umzuwandeln (r,phi)
. Während Sie berechnen können , r = sqrt(x^2+y^2)
ganz einfach, Sie müssen oft einige Unterscheidung von Fällen , in denen die Winkelberechnungs phi
da arcsin
, arccos
und arctan
alle anderen trigonometrischen Funktionen haben eine Co-Domäne , die jeweils nur Spannweiten Hälfte der Kreis.
In vielen Sprachen gibt es eingebaute Funktionen zur Umrechnung von Rechteckkoordinaten in Polarkoordinaten oder zumindest eine atan2
Funktion, die - vorausgesetzt (x,y)
- den Winkel berechnetphi
.
Aufgabe
Ihre Aufgabe ist es, ein Programm / Funktion zu schreiben , die zwei (Gleitkomma-, nicht beid Nullen) hat kartesisch (x,y)
und gibt den entsprechenden Polarwinkel phi
, wobei phi
in Grad Bogenmaß oder Noten werden (mit Qualitäten I mittlere Gon , die 1 sind / Je nachdem, was für Sie am bequemsten ist.
Der Winkel wird in positiver Orientierung gemessen und wir haben den Nullwinkel für (1,0)
.
Einzelheiten
Sie können nicht Einbauten verwenden, um den Winkel zu berechnen phi
gegebenen zwei Koordinaten, einschließlich atan2
, rect2polar
, argOfComplexNumber
und ähnliche Funktionen. Sie können jedoch die üblichen trigonometrischen Funktionen und ihre Umkehrungen verwenden, die nur ein Argument enthalten. Beliebige Einheitensymbole sind optional.
Der Radius r
darf nicht negativ sein und phi
muss im Bereich liegen [-360°, 360°]
(es spielt keine Rolle, ob Sie ausgeben 270°
oder-90°
).
Beispiele
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°
quelle
Antworten:
MATL , 12 Bytes
Das Ergebnis ist im Bogenmaß.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
MATL hat keine
atan
Funktion (es hatatan2
, aber es kann nicht für diese Herausforderung verwendet werden). Also habe ich mich bedientacos
.quelle
0<?_
und ein paar Bytes sparen|
). Aber hier bin ich zu ändern Vorzeichen des Ergebnisses basierend auf dem Vorzeichen des dem zweiten Eingang ,y
. Außerdemy
kann0
ich nicht multiplizieren mity/abs(y))
JavaScript (ES6),
50 bis40 ByteDas Ergebnis ist im Bogenmaß. Bearbeiten: 10 Bytes gespeichert, als ich bemerkte, dass das Ergebnis zwischen -90 ° und 270 ° liegen darf. Vorherige Version mit
-Math.PI<=result<Math.PI
:quelle
||0
?x=y=0
Fall.MATLAB / Octave, 24 Bytes
Dies definiert eine anonyme Funktion, die das Ergebnis im Bogenmaß liefert.
Probiere es auf ideone aus .
quelle
Javascript ES6, 54 Bytes
Verwendet Bogenmaß.
quelle
Jelly , 11 Bytes (nicht konkurrierend)
Die Ausgabe erfolgt im Bogenmaß. Leider hatte Jelly einen Zeichenfehler in der Atomdivision, weshalb diese Antwort aufgrund der erforderlichen Fehlerbehebung nicht konkurrierend war.
Probieren Sie es online! oder überprüfen Sie alle Testfälle (umgerechnet in Grad).
Wie es funktioniert
quelle
-1÷0
gabinf
statt-inf
), so ist es unwahrscheinlich , die meisten Herausforderungen beeinflussen.Python 3,
7567 Bytes8 Bytes dank Dennis.
Ideone es!
quelle
and
undor
?and
undor
.pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2
spart ein paar Bytes.&
ist ein bitweiser Operator.APL (Dyalog Unicode) ,
1210 Byte SBCS-2 danke an ngn.
Anonyme stillschweigende Infix-Funktion. Verwendet die Formel von Alephalpha . Nimmt
x
als rechtes Argument undy
als linkes Argument. Ergebnis ist im Bogenmaß.Probieren Sie es online!
,
verketten diey
undx
0J1⊥
Werten Sie als Basis i Ziffern aus (dh y i ¹ + x i ⁰)⍟
natürlicher Logarithmus davon∘
dann11○
Imaginärteil davonquelle
11○∘⍟
->12○
argOfComplexNumber
Mathematica, 16 Bytes
Ich bin mir nicht sicher, ob
Log
es sich um ein eingebautes Gerät handelt, das den Winkel bei zwei Koordinaten berechnet.Beispiel:
quelle
x86-Maschinensprache (32-Bit-Linux),
25 bis13 Byte (nicht konkurrierend)Um zu versuchen , es online , kompilieren Sie das folgende C - Programm (nicht vergessen
-m32
Flagge auf x86_64)quelle
J , 10 Bytes
Anonyme stillschweigende Infix-Funktion. Verwendet die Formel von Alephalpha . Nimmt
x
als linkes Argument undy
als rechtes Argument. Ergebnis ist im Bogenmaß.Probieren Sie es online!
j.
berechnex
+y
× i@
dann^.
natürlicher Logarithmus davon11 o.
Imaginärteil davonquelle
Pyth, 26 Bytes
theta
im Bogenmaß.Testsuite.
quelle
13 Zeichen / 17 Bytes
Try it here (ES6 browsers only).
Verwendet
(x<0)*pi+tan(y/x)
.quelle
Python 3, 65 Bytes
Dies gibt Bogenmaß in dem Bereich aus
[-π/2, 3π/2)
, der[-90, 270)
Grad entspricht.quelle
Axiom, 58 Bytes
test (ich benutze nur acos () es gibt strahlen zurück)
quelle
Python 2 , 59 Bytes
Probieren Sie es online!
Ausgabe im Bogenmaß im Bereich
[-pi,pi)
quelle