Wikipedia mówi o współrzędnych biegunowych :
W matematyce biegunowy układ współrzędnych jest dwuwymiarowym układem współrzędnych, w którym każdy punkt na płaszczyźnie jest określony przez odległość od punktu odniesienia i kąt od kierunku odniesienia.
Wydaje się to idealne do opisu siatek heksagonalnych. Weźmy na przykład następującą siatkę sześciokątną:
A B C
D E F G
H I J K L
M N O P
Q R S
Naszym punktem odniesienia będzie środek sześciokąta („J”), a naszym kątem odniesienia będzie lewy górny róg sześciokąta („A”). Opiszemy jednak kąt w kategoriach liczby kroków zgodnie z ruchem wskazówek zegara wokół zewnętrznej strony sześciokąta od tego punktu, a nie w kątach. Nazywamy to „numerem kroku” zamiast kąta.
Na przykład „C” ma wartość (2, 2), ponieważ ma promień 2 (ponieważ jest dwa pierścienie od środka, „J”) i liczbę kroków 2 (2 kroki zgodnie z ruchem wskazówek zegara od „A” ”). Podobnie „O” znajduje się w (1, 3), ponieważ jest o jeden pierścień od środka i trzy kroki zgodnie z ruchem wskazówek zegara do przodu od „E” (który jest pod kątem odniesienia).
Dla kompletności, „J” ma wartość (0, 0), ponieważ do osiągnięcia tego potrzeba 0 kroków i 0 kroków zgodnie z ruchem wskazówek zegara.
Teraz możesz również opisać sześciokąt z współrzędnymi kartezjańskimi , ale z powodu przesunięcia jest to trochę dziwne. Podobnie jak w przypadku naszych współrzędnych biegunowych, ustawimy środek na (0, 0). Każda przestrzeń zajmuje również współrzędną, więc „K” ma wartość (2, 0), a nie (1, 0). Ustawiłoby to „A” na (-2, 2), a „O” na (1, -1).
Wyzwanie
Biorąc pod uwagę biegunowe współrzędne sześciokątne, wyślij te same współrzędne we współrzędnych kartezjańskich. Możesz wziąć te współrzędne i otrzymać odpowiedź w dowolnym rozsądnym formacie. Oznacza to, że możesz odwrócić kolejność wejść, jeśli chcesz. Oznacza to również, że możesz wyprowadzać współrzędne jako (Y, X), ale jeśli tak, proszę wspomnij o tym w swojej odpowiedzi, aby uniknąć zamieszania.
Nie musisz obsługiwać promieni ujemnych, ale możesz uzyskać kąty ujemne lub kąty, które przekraczają pełny obrót wokół sześciokąta. Na przykład możesz otrzymać (1, 10) lub (1, -2) jako dane wejściowe. Oba odpowiadałyby „N” w naszym poprzednim sześciokącie. Zdajesz nie muszą obsługiwać nie-całkowitymi dla wejścia.
Próbka 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)
Odpowiedzi:
JavaScript (ES6), 93 bajty
Fragment testowy:
Pokaż fragment kodu
źródło
(1, -7)
.JavaScript (ES6), 95 bajtów
Objaśnienie: Rozwiązanie dla kąta zerowego jest proste
-r,r
, więc zaczynamy od tego punktu. Jeśli kąt jest ujemny, dodajemy cały sześciokąt i nazywamy się rekurencyjnie, w przeciwnym razie zaczniemy chodzić po sześciokącied,e=2,0
krokiem. Tam, gdzie to możliwe, przeskakujemyr
takie kroki, a następnie obracamy krok za pomocą formuły,d+e*3>>1,e-d>>1
aby przejść do następnej strony. Wreszcie podejmujemy wszelkie pozostałe kroki, aby dotrzeć do celu.źródło