Wikipedia dice di Polar Coordinates :
In matematica, il sistema di coordinate polari è un sistema di coordinate bidimensionale in cui ciascun punto su un piano è determinato da una distanza da un punto di riferimento e un angolo da una direzione di riferimento.
Questo sembra perfetto per descrivere le griglie esagonali. Prendi ad esempio la seguente griglia esagonale:
A B C
D E F G
H I J K L
M N O P
Q R S
Il nostro punto di riferimento sarà il centro dell'esagono ('J') e il nostro angolo di riferimento sarà nell'angolo in alto a sinistra dell'esagono ('A'). Tuttavia, descriveremo l'angolo in termini di numero di passi in senso orario attorno all'esterno dell'esagono da questo punto, non in angoli. Quindi lo chiameremo "Numero di passaggio" anziché angolo.
Ad esempio, 'C' è su (2, 2) perché ha un raggio di 2 (poiché è a due anelli di distanza dal centro, 'J') e un numero di passo di 2 (2 passi in senso orario in avanti da 'A '). Allo stesso modo, 'O' è su (1, 3), perché è a un anello di distanza dal centro e tre passi in senso orario in avanti da 'E' (che si trova sull'angolo di riferimento).
Per completezza, 'J' è su (0, 0), poiché per raggiungerlo sono necessari 0 passi e 0 passi in senso orario.
Ora, puoi anche descrivere un esagonale con coordinate cartesiane , ma a causa dell'offset questo è un po 'strano. Proprio come con le nostre coordinate polari, posizioneremo il centro su (0, 0). Ogni spazio occupa anche una coordinata, quindi 'K' è su (2, 0), non (1, 0). Ciò porterebbe 'A' a (-2, 2) e 'O' a (1, -1).
La sfida
Date le coordinate esagonali polari, emettere le stesse coordinate in coordinate cartesiane. Puoi prendere questi coord e ottenere la risposta in qualsiasi formato ragionevole. Ciò significa che è possibile invertire l'ordine degli input, se lo si desidera. Questo significa anche che potresti generare i coord come (Y, X), ma se lo fai, per favore menzionalo nella tua risposta per evitare confusione.
Non è necessario gestire raggi negativi, ma è possibile ottenere angoli negativi o angoli che vanno oltre un giro completo attorno all'esagono. Ad esempio, potresti ricevere (1, 10) o (1, -2) come input. Entrambi corrisponderebbero a "N" nel nostro esagono precedente. Non è necessario gestire numeri non interi per l'input.
IO di esempio
#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)