Algorithmus zur Lösung der Punkte einer gleichmäßig verteilten / geraden Lückenspirale?

7

Erstens, um eine visuelle Vorstellung davon zu geben, wonach ich suche, hier ist das nächste Ergebnis, das ich gefunden habe (aber nicht genau das, wonach ich gesucht habe):

Hier ist die gesamte Site-Referenz: Ссылка

ABER, es löst nicht genau das Problem, nach dem ich suche. Ich möchte ein Array von Punkten eines ganz bestimmten Spiralalgorithmus speichern.

  • Die Punkte sind gleichmäßig verteilt
  • Die 360-Grad-Zyklen haben eine gleichmäßige Lücke

Wenn ich mich nicht irre, wären die ersten zwei Punkte:

  • Punkt [0] = neuer Punkt (0,0);
  • Punkt [1] = neuer Punkt (1,0);

Aber wohin von hier gehen?

Die einzigen Argumente, die ich bereitstellen möchte, sind:

  • die Anzahl der Punkte, die ich auflösen möchte (Länge des Arrays).
  • die Entfernung zwischen den einzelnen Punkten (Pixellücke).
  • die Entfernung zwischen den Zyklen.

Es klingt für mich fast so, dass ich den " Spiralumfang " berechnen muss (wenn es einen solchen Begriff gibt), um die gleichmäßig verteilten Punkte entlang der Spirale zu zeichnen.

>

Kann 2 * PI * radius zuverlässig für diese Berechnung verwendet werden, die Sie denken?

Wenn es schon einmal gemacht wurde, zeigen Sie bitte ein Codebeispiel!

    
bigp 03.12.2010, 19:58
quelle

2 Antworten

18

Spaß kleines Problem:)

Wenn Sie das Diagramm näher betrachten, ist die Reihenfolge klar angegeben:

Es gibt wahrscheinlich viele Lösungen, um diese zu zeichnen, vielleicht eleganter, aber hier ist meins:

Sie wissen, dass die Hypotenuse Quadratwurzel der aktuellen Segmentanzahl + 1 ist und die gegenüberliegende Seite des Dreiecks ist immer 1.

Sie wissen auch, dass Sinus (Math.sin) des Winkels gleich der gegenüberliegenden Seite ist, geteilt durch die Hypotenuse. aus dem alten mnenonischen SOH (Sinus, gegenüber, Hypotenuse), - CAH-TOA.

%Vor%

Sie kennen den Wert des Sinus für den Winkel, Sie kennen die zwei Seiten, aber Sie kennen den Winkel noch nicht, aber Sie können dafür die Arkussinus-Funktion (Math.asin) verwenden

%Vor%

Jetzt kennen Sie den Winkel für jedes Segment und bemerken, dass es mit jeder Linie zunimmt.

Nun, da Sie einen Winkel und einen Radius (die Hypotenuse) haben, können Sie für die polare bis kartesische Formel diesen Winkel, Radius Paaren Sie ein x, y Paar.

%Vor%

Da Sie nach einer ActionScript-Lösung gefragt haben, bietet die Point-Klasse diese Funktion bereits für Sie über polar () Methode. Sie übergeben ihm einen Radius und Winkel und es gibt Ihr x und y in einem Point-Objekt zurück.

Hier ist ein kleiner Ausschnitt, der die Spirale darstellt. Sie können die Anzahl der Segmente steuern, indem Sie die Maus auf der Y-Achse bewegen.

%Vor%

Das hätte in weniger Zeilen geschrieben werden können, aber ich wollte das in zwei Funktionen aufteilen: eine, die sich nur mit der Berechnung der Zahlen beschäftigt, und die andere, die sich mit dem Zeichnen der Linien befasst.

Hier sind einige Screenshots:

Aus Spaß habe ich hier eine Version von ProcessingJS hinzugefügt . Läuft ein bisschen langsam, also würde ich Chromium / Chrome dafür empfehlen.

Jetzt können Sie diesen Code tatsächlich hier ausführen (bewegen Sie die Maus nach oben und unten):

%Vor% %Vor%
    
George Profenza 03.12.2010, 23:31
quelle
3

Georges Antwort war ausgezeichnet! Ich habe lange nach der Lösung gesucht.

Hier ist der gleiche Code für PHP angepasst, falls es jemandem hilft. Ich benutze das Skript um Punkte (= Städte) für eine Karte mit X, Y Koordinaten zu zeichnen. X beginnt von links, Y beginnt von links unten.

%Vor%     
Mika Vatanen 12.06.2011 10:03
quelle