A Wikipedia diz sobre as coordenadas polares :
Em matemática, o sistema de coordenadas polares é um sistema de coordenadas bidimensional no qual cada ponto de um plano é determinado por uma distância de um ponto de referência e um ângulo de uma direção de referência.
Isso parece perfeito para descrever grades hexagonais. Veja a seguinte grade hexagonal, por exemplo:
A B C
D E F G
H I J K L
M N O P
Q R S
Nosso ponto de referência será o centro do hexágono ('J'), e nosso ângulo de referência será o canto superior esquerdo do hexágono ('A'). No entanto, descreveremos o ângulo em termos do número de etapas no sentido horário ao redor da parte externa do hexágono a partir deste ponto, não em ângulos. Então, chamaremos de "número da etapa" em vez de ângulo.
Por exemplo, 'C' está em (2, 2) porque possui um raio de 2 (uma vez que está a dois anéis do centro, 'J') e um número de passo 2 (2 passos no sentido horário a partir de 'A '). Da mesma forma, 'O' está em (1, 3), porque fica a um anel do centro e a três passos no sentido horário a partir de 'E' (que está no ângulo de referência).
Para completar, 'J' está em (0, 0), pois você precisa de 0 passos e 0 passos no sentido horário para alcançá-lo.
Agora, você também pode descrever um hexagonal com coordenadas cartesianas , mas devido ao deslocamento, isso é um pouco estranho. Assim como com nossas coordenadas polares, colocaremos o centro em (0, 0). Cada espaço também ocupa uma coordenada, então 'K' está em (2, 0), não (1, 0). Isso colocaria 'A' em (-2, 2) e 'O' em (1, -1).
O desafio
Dadas coordenadas hexagonais polares, produza as mesmas coordenadas em coordenadas cartesianas. Você pode pegar essas cordas e enviar a resposta em qualquer formato razoável. Isso significa que você pode reverter a ordem das entradas, se quiser. Isso também significa que você pode emitir as cordas como (Y, X), mas, se o fizer, mencione isso na sua resposta para evitar confusão.
Você não precisa lidar com raios negativos, mas poderá obter ângulos negativos ou ângulos que vão mais do que uma revolução completa ao redor do hexágono. Por exemplo, você pode receber (1, 10) ou (1, -2) como entrada. Ambos corresponderiam a 'N' em nosso hexágono anterior. Você não precisa manipular não-inteiros para entrada.
IO de amostra
#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)