Schauen Sie sich diese Kamillenblüte an:
Schön, nicht wahr? Was ist, wenn ich dir sage, dass dies nicht wirklich eine Blume ist?
Viele Blumen (einschließlich Sonnenblumen, Kamille, Gänseblümchen und andere) bestehen tatsächlich aus vielen sehr kleinen Blüten (die schwarzen Punkte auf Sonnenblumen) auf einem Blütenkopf. Diese Miniatur - Blumen genannt Röschen , und sie sind in einer ganz besonderen Art und Weise angeordnet sind .
Grundsätzlich ist die Position des n-ten Blütchens auf einem Blütenkopf (in Polarkoordinaten):
Dabei ist c = 1 (Beachten Sie, dass 137,508 Grad = goldener Winkel. Sie müssen nicht genau diese Genauigkeit verwenden.)
Dies führt dazu, dass die Blütchen in einer Spirale namens Fermat-Spirale geformt werden. Die Positionierung der Blütchen hängt auch mit Fibonnaci-Zahlen zusammen, aber das ist eine Geschichte für ein anderes Mal.
Also, hier ist die Herausforderung. Berechnen Sie mit einer Ganzzahl n als Eingabe die Positionen der ersten n Florets und zeichnen Sie sie auf . Dies ist eine grafische Ausgabe , daher möchte ich, dass Sie die Punkte entweder in einem Fenster anzeigen oder als Daten in einem gängigen Bildformat an STDOUT oder in einer Datei ausgeben. Davon abgesehen sollte diese Herausforderung ziemlich einfach sein. Es ist Code-Golf , also gewinnt der kürzeste Code. VIEL GLÜCK UND VIEL SPASS!
Hier ist ein Beispielbild, wie eine Ausgabe aussehen könnte:
quelle
Antworten:
TI-BASIC, 34 Bytes
Für die Taschenrechner der Serie TI-83 + / 84 +.
Dies betrachtet den Punkt am Ursprung als den 0. Punkt.
Dank des Ein-Byte-
sinh⁻¹(
Tokens2πe^(-2sinh⁻¹(.5
ist dies ein kurzer Weg, um den goldenen Winkel im Bogenmaß zu erhalten. Dies ergibt sich aus der Tatsache, dasse^(sinh⁻¹(.5
es sich um den goldenen Schnitt handelt.Hier sind Screenshots für N = 50.
(Ja, das ist ein 96x64-Monochrom-Display auf einem TI-84 +. Die neueren Farbrechner haben ein Auflösungs-Upgrade, aber immer noch nur 3,7% der Pixel eines iPhones.)
Drücken Sie TRACE, um die einzelnen Punkte zu durchlaufen.
quelle
sinh⁻¹
scheint (wenn ich Ihre Erklärung verstehe), würde als mehr als ein Byte zählen.Python 2,
858281 BytesVerkürzt um ein Byte durch Marinus.
Verwenden Sie den goldenen Winkel im Bogenmaß. Die Bytelänge ist die gleiche, wenn ich stattdessen 137.508 verwendet habe, sieht aber irgendwie nicht so gut aus. Erzeugt eine Polarkurve mit pylab. Unten ist angegeben, wann 300 (für die ältere Version) die Eingabe ist und 7000 (für die neuere Version) die Eingabe ist. Kann den Winkel auf 2,4 runden, um die Anzahl der Bytes auf 77 zu verringern.
Hier ist eine längere Version, die durch Entfernen des Gitters und der Achse ein klareres Erscheinungsbild ergibt:
Der Grund für die unterschiedlichen Farben liegt darin, dass jeder Punkt separat gezeichnet und als eigener Datensatz behandelt wird. Wenn die Winkel und Radien als Listen übergeben würden, würden sie als eine Menge behandelt und von einer Farbe sein.
quelle
for
Schleife anstelle eines Listenverständnisses verwenden. Es müsste auf einer eigenen Linie sein, aber;
und\n
sind gleich lang, also ist das egal. Dh:from pylab import*
-for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')
-show()
Blitz 2D / 3D , 102 Bytes
(Die allererste Blitz 2D / 3D Antwort auf dieser Seite!)
Eine Eingabe von
50
füllt das Fenster. (Ja, ich könnte zwei Bytes abschneidenGraphics 99,99
, aber das ist optisch nicht so interessant oder nützlich.)Schönere Version (und schöner beendet):
quelle
Mathematica,
4342 BytesDies ist eine unbenannte Funktion, die ein ganzzahliges Argument verwendet, z
Der Screenshot verwendet eine ältere Version, aber die Ausgabe sieht gleich aus.
Mathematica verfügt über eine integrierte Funktion
GoldenAngle
für noch genauere Ergebnisse, die jedoch länger dauert als2.39996
.quelle
GoldenAngle
! Ist es eine neue Funktion in Mathematica 10.2?MATLAB, 42 Bytes
Ruft die eingegebene Nummer ab und erstellt einen Bereich von 1 bis zu dieser Nummer.
Multipliziert den Bereich mit dem goldenen Winkel im Bogenmaß (der verwendete Wert liegt näher am wahren Wert als 137,508 Grad bis 6 sf).
Zeichnen Sie dann einfach Theta vs. R in einem Polarkoordinatendiagramm mit Punkten. Hier gezeigt mit 2000 Punkten
Ein etwas hübscher aussehendes Diagramm (keine Gitterlinien) wäre dieser Code:
Dies geht jedoch zu Lasten von 31 Bytes. Auch hier ist es mit 2000 Punkten gezeigt
quelle
polar
Lösung, ich habe sie noch nie benutzt. Ich denke, Sie können zwei Bytes sparen, indemt.^.5
Sie stattsqrt(t)
!R,
585554 BytesDazu muss das
plotrix
Paket installiert werden, es muss jedoch nicht importiert werden, da wir explizit auf den Namespace verweisen.Ungolfed:
Beispielausgabe für n = 1500:
3 Bytes gespart dank Plannapus!
quelle
R,
5554 BytesHier ist das Ergebnis für n = 1000:
Bearbeiten: Dank @AlexA 1 Byte mit teilweiser Übereinstimmung der Argumente (
as
anstelle vonasp
) gespeichert.!quelle
R,
4847 BytesIch denke, das ist ausreichend anders als die anderen R-Lösungen bisher. Dieser verwendet komplexe Vektoren, um die Koordinaten zu konstruieren. Die Quadrate von t und t werden in die Modul- und Argumentparameter eingefügt, und die XY-Werte werden aus dem Real und dem Imaginären abgeleitet. Vielen Dank an @AlexA. für das Byte.
quelle
as
kann anstelle von verwendet werdenasp
.HTML + JavaScript 179
quelle
Jolf, 25 Bytes
(Ausgabe für n = 5000)
Probieren Sie es online aus. (Beachten Sie, dass die resultierende Spirale klein ist)
Nicht konkurrierend, da Jolf nach dieser Herausforderung geschaffen wurde. Dies sind 25 Byte, wenn es mit ISO-8859-7 codiert ist, und es enthält eines, das nicht gedruckt werden kann (hier ist ein Hexdump):
Erläuterung
quelle
Python 2, 74 Bytes
quelle
MATL , 20 Bytes (nicht konkurrierend)
Als nicht konkurrierend markiert, da die Sprache die Herausforderung nachträglich angibt
Probieren Sie es bei MATL Online!
Der goldene Winkel
137.708
deg =pi*(3-sqrt(5))
rad =2.39996...
rad wird als2.4
rad angenähert .In der folgenden Version ( 25 Byte ) wird der exakte Wert bis zur
double
Gleitkommagenauigkeit verwendet:Probieren Sie es bei MATL Online!
quelle
Tcl / Tk, 114
Anwendungsbeispiel:
und gibt das Fenster aus
quelle