Ad esempio, ecco la forma di spirale inteso (e ogni passo dell'iterazione)Algoritmo per iterazione su una spirale verso l'esterno su una griglia 2D discreta dall'origine
y
|
|
16 15 14 13 12
17 4 3 2 11
-- 18 5 0 1 10 --- x
19 6 7 8 9
20 21 22 23 24
|
|
Quando le linee sono x e y assi.
Qui sarebbero i valori effettivi l'algoritmo avrebbe "ritorno" con ogni iterazione (le coordinate dei punti):
[0,0],
[1,0], [1,1], [0,1], [-1,1], [-1,0], [-1,-1], [0,-1], [1,-1],
[2,-1], [2,0], [2,1], [2,2], [1,2], [0,2], [-1,2], [-2,2], [-2,1], [-2,0]..
ecc
Ho provato a cercare, ma sono non sono proprio sicuro di cosa cercare esattamente, e quali ricerche ho provato hanno trovato un vicolo cieco.
Non sono nemmeno sicuro da dove iniziare, a parte qualcosa di disordinato e poco elegante e ad-hoc, come creare/codificare una nuova spirale per ogni livello.
Qualcuno può aiutarmi a iniziare?
Inoltre, c'è un modo che può facilmente passare da senso orario a senso antiorario (l'orientamento) e da quale direzione "avviare" la spirale? (la rotazione)
Inoltre, c'è un modo per farlo in modo ricorsivo?
La mia applicazione
Ho una griglia sparsa pieno di punti di dati, e voglio aggiungere un nuovo punto di dati alla rete, e l'abbiano in essere "il più vicino possibile" ad un dato un altro punto.
Per fare ciò, chiamerò grid.find_closest_available_point_to(point)
, che andrà a scorrere sulla spirale sopra riportata e restituirà la prima posizione che è vuota e disponibile.
Quindi, per prima cosa, controlla point+[0,0]
(solo per completezza). Quindi controllerà point+[1,0]
. Quindi controllerà point+[1,1]
. Quindi point+[0,1]
, ecc. E restituire il primo per il quale la posizione nella griglia è vuota (o non occupata già da un punto dati).
Nessun limite superiore alla dimensione della griglia.
ho fatto, ma non riesco a capire l'esempio di output hai dato – alcuadrado
suona come una domanda codice di golf ... –
@alcuadrado In primo luogo, restituisce l'origine.Quindi restituisce il punto [1,0]. Quindi "gira intorno" in senso antiorario e restituisce il punto [1,1]. Proverò a rendere più chiaro –