Wikipedia dice acerca de las coordenadas polares :
En matemáticas, el sistema de coordenadas polares es un sistema de coordenadas bidimensionales en el que cada punto en un plano está determinado por una distancia desde un punto de referencia y un ángulo desde una dirección de referencia.
Esto parece perfecto para describir cuadrículas hexagonales. Tome la siguiente cuadrícula hexagonal, por ejemplo:
A B C
D E F G
H I J K L
M N O P
Q R S
Nuestro punto de referencia será el centro del hexágono ('J'), y nuestro ángulo de referencia será la esquina superior izquierda del hexágono ('A'). Sin embargo, describiremos el ángulo en términos del número de pasos en sentido horario alrededor del exterior del hexágono desde este punto, no en ángulos. Entonces lo llamaremos "número de paso" en lugar de ángulo.
Por ejemplo, 'C' está en (2, 2) porque tiene un radio de 2 (ya que está a dos anillos del centro, 'J') y un número de paso de 2 (2 pasos hacia la derecha desde 'A '). De manera similar, 'O' está en (1, 3), porque está a un anillo del centro y tres pasos hacia la derecha desde 'E' (que está en el ángulo de referencia).
Para completar, 'J' está en (0, 0), ya que necesita 0 pasos y 0 pasos en sentido horario para alcanzarlo.
Ahora, también puede describir un hexagonal con coordenadas cartesianas , pero debido al desplazamiento esto es un poco extraño. Al igual que con nuestras coordenadas polares, colocaremos el centro en (0, 0). Cada espacio ocupa también una coordenada, por lo que 'K' está en (2, 0), no (1, 0). Esto pondría 'A' en (-2, 2) y 'O' en (1, -1).
El reto
Dadas las coordenadas hexagonales polares, genera las mismas coordenadas en coordenadas cartesianas. Puede tomar estas coordenadas y dar salida a la respuesta en cualquier formato razonable. Esto significa que puede invertir el orden de las entradas si lo desea. Esto también significa que puede generar las coordenadas como (Y, X), pero si lo hace, mencione esto en su respuesta para evitar confusiones.
No tiene que manejar radios negativos, pero puede obtener ángulos negativos o ángulos que van más allá de una revolución completa alrededor del hexágono. Por ejemplo, puede recibir (1, 10) o (1, -2) como entrada. Ambos corresponderían a 'N' en nuestro hexágono anterior. Usted no tiene que manejar no enteros para la entrada.
Muestra 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)
Respuestas:
JavaScript (ES6), 93 bytes
Fragmento de prueba:
Mostrar fragmento de código
fuente
(1, -7)
.JavaScript (ES6), 95 bytes
Explicación: La solución para un ángulo cero es simplemente
-r,r
, así que comenzamos en ese punto. Si el ángulo es negativo, agregamos un hexágono completo y nos llamamos recursivamente, de lo contrario, comenzamos a caminar alrededor del hexágono con und,e=2,0
paso. Siempre que sea posible, saltamosr
tales pasos, luego giramos el paso usando la fórmulad+e*3>>1,e-d>>1
para avanzar al siguiente lado. Finalmente tomamos los pasos restantes para llegar a nuestro destino.fuente