Suchen Sie die Position n. Element einer rechteckigen gekachelten Spirale?

8

Was ist ein Algorithmus, um das n-te Element einer rechteckigen gekachelten Spirale zu erhalten?

Hier ist n :

%Vor%

und hier sind die entsprechenden Koordinaten für n :

%Vor%

Wenn n angegeben wird, wie berechnet man die Koordinaten?

    
MaiaVictor 10.04.2012, 18:57
quelle

6 Antworten

3

Hier ist ein Code in JavaScript. Er berechnet die Position für die 2D-Matrix beginnend mit der Nummer 1 in der Mitte (0, 0)

%Vor%     
Vlad Bezden 27.12.2016, 18:59
quelle
12

Hier ist eine kurze und süße Antwort, die nur einfache Mathematik in Pseudocode verwendet. Keine Bedingungen und keine Iteration. Gegeben tileNum für die Kachelnummer:

%Vor%

Hier ist eine Geige , um es in Aktion zu sehen.

    
Jonathan M 15.12.2013 06:21
quelle
2

Finde zuerst heraus, in welchem ​​Ring dein gewünschtes Element ist (Hinweis: bis du zum äußeren Ring kommst, deine Spirale besteht aus verschachtelten Quadraten), dann auf welcher Seite (von der 4) ist es dann Er ist nur mit seiner Position auf dieser Seite verlassen.

    
Scott Hunter 10.04.2012 19:00
quelle
1

Ähnliche Fragen existieren bereits ... Siehe meine nicht-looping Version . Möglicherweise müssen Sie die X / Y-Koordinaten vertauschen und / oder negieren und die 100 's in 0 ändern, je nachdem, welche Ausrichtung und welchen Ursprung Sie haben möchten.

Es gibt auch mehr kanonische Loop-Versionen .

    
Kaganar 10.04.2012 19:06
quelle
1

Da niemand geantwortet hat, gibt es eine Lösung:

%Vor%

Dies simuliert einen Spaziergang durch den gewünschten Pfad. Sie beginnen an der Position (0,0), gehen einen Schritt nach rechts, einen Schritt nach unten, drei Schritte nach links, drei Schritte nach oben und so weiter und folgen der Spirale. Um dies zu programmieren, beachten Sie, dass wir unsere Richtung in den Schritten 1, 2, 4, 6, 9, 12, 16, 20 und so weiter ändern. Ссылка zeigt, dass dies die Viertel-Quadrat-Ganzzahl-Sequenz ist. Alles, was wir brauchen, ist eine Schleife, bei der jede Iteration einen Schritt simuliert, die Richtung der Position hinzufügt und sie um 90º dreht, wenn die Schrittzahl Teil der Sequenz ist.

    
MaiaVictor 10.04.2012 22:50
quelle
1

Hier ist meine Lösung in Javascript mit inverser Summe von 8 und Randnummerierung

Komplexität: O (1) keine Iterationsschleife

%Vor%

Demo: Geige

    
davidonet 10.10.2013 05:08
quelle

Tags und Links