Was ist ein Algorithmus, um das n-te Element einer rechteckigen gekachelten Spirale zu erhalten?
Hier ist n
:
und hier sind die entsprechenden Koordinaten für n
:
Wenn n
angegeben wird, wie berechnet man die Koordinaten?
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% 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:
Hier ist eine Geige , um es in Aktion zu sehen.
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.
Ä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 .
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.