Wikipedia sagt über Polarkoordinaten :
In der Mathematik ist das Polarkoordinatensystem ein zweidimensionales Koordinatensystem, bei dem jeder Punkt auf einer Ebene durch einen Abstand von einem Referenzpunkt und einen Winkel von einer Referenzrichtung bestimmt wird.
Dies scheint perfekt für die Beschreibung von sechseckigen Gittern zu sein. Nehmen Sie zum Beispiel das folgende sechseckige Gitter:
A B C
D E F G
H I J K L
M N O P
Q R S
Unser Referenzpunkt ist die Mitte des Sechsecks ('J'), und unser Referenzwinkel ist die obere linke Ecke des Sechsecks ('A'). Wir werden den Winkel jedoch anhand der Anzahl der Schritte im Uhrzeigersinn um die Außenseite des Sechsecks von diesem Punkt aus beschreiben, nicht in Winkeln. Also nennen wir es "Schrittnummer" anstelle von Winkel.
Zum Beispiel ist 'C' bei (2, 2), weil es einen Radius von 2 (da es zwei Ringe von der Mitte entfernt ist, 'J') und eine Schrittnummer von 2 (2 Schritte im Uhrzeigersinn vorwärts von 'A) hat '). In ähnlicher Weise befindet sich 'O' bei (1, 3), da es einen Ring von der Mitte entfernt ist und drei Schritte im Uhrzeigersinn von 'E' (das sich auf dem Referenzwinkel befindet) vorwärts geht.
Der Vollständigkeit halber steht 'J' bei (0, 0), da Sie 0 Schritte aus und 0 Schritte im Uhrzeigersinn benötigen, um es zu erreichen.
Jetzt können Sie auch ein Sechseck mit kartesischen Koordinaten beschreiben , aber aufgrund des Versatzes ist dies etwas seltsam. Genau wie bei unseren Polarkoordinaten setzen wir das Zentrum auf (0, 0). Jeder Raum nimmt auch eine Koordinate ein, also ist 'K' bei (2, 0) und nicht bei (1, 0). Dies würde 'A' bei (-2, 2) und 'O' bei (1, -1) setzen.
Die Herausforderung
Geben Sie bei gegebenen hexagonalen Polarkoordinaten dieselben Koordinaten in kartesischen Koordinaten aus. Sie können diese Koordinaten nehmen und die Antwort in einem beliebigen vernünftigen Format ausgeben. Dies bedeutet, dass Sie die Reihenfolge der Eingaben umkehren können, wenn Sie möchten. Dies bedeutet auch, dass Sie die Koordinaten als (Y, X) ausgeben können. Wenn Sie dies jedoch tun, erwähnen Sie dies bitte in Ihrer Antwort, um Verwirrung zu vermeiden.
Sie müssen nicht mit negativen Radien umgehen, aber Sie erhalten möglicherweise negative Winkel oder Winkel, die mehr als eine volle Umdrehung um das Sechseck gehen. Beispielsweise können Sie (1, 10) oder (1, -2) als Eingabe erhalten. Diese würden beide 'N' in unserem vorherigen Sechseck entsprechen. Sie müssen keine Ganzzahlen für die Eingabe verarbeiten.
Beispiel IO
#Polar #Cartesian
(0, 0) (0, 0)
(1, 2) (2, 0)
(6, 0) (-6, 6)
(2, -3) (-3, -1)
(4, 23), (-5, 3)
(5, -3), (-8, 2)
(10, 50), (-20, 0)
(6, 10), (10, 2)
(8, 28), (0, -8)
(8, -20), (0, -8)
Antworten:
JavaScript (ES6), 93 Byte
Testschnipsel:
Code-Snippet anzeigen
quelle
(1, -7)
.JavaScript (ES6), 95 Byte
Erklärung: Die Lösung für einen Nullwinkel ist einfach
-r,r
, also beginnen wir an diesem Punkt. Wenn der Winkel negativ ist, addieren wir ein ganzes Sechseck und nennen uns rekursiv, andernfalls gehen wir mit einemd,e=2,0
Schritt um das Sechseck herum . Wenn möglich, überspringen wirr
solche Schritte und drehen den Schritt dann mithilfe der Formeld+e*3>>1,e-d>>1
, um zur nächsten Seite zu gelangen. Schließlich unternehmen wir alle verbleibenden Schritte, um unser Ziel zu erreichen.quelle