Ein Spirograph ist ein Spielzeug, das Hypotrochoide und Epitrochoide zeichnet. Bei dieser Herausforderung konzentrieren wir uns nur auf die Hypotrochoide.
Aus Wikipedia :
Ein Hypotrochoid ist ein Roulette-Spiel, das von einem Punkt gezeichnet wird, der an einem Kreis mit dem Radius r befestigt ist, der sich um die Innenseite eines festen Kreises mit dem Radius R dreht , wobei der Punkt einen Abstand d vom Mittelpunkt des inneren Kreises entfernt ist.
Die parametrischen Gleichungen für sie können wie folgt definiert werden:
Wobei θ der Winkel ist, der durch die Horizontale und den Mittelpunkt des Rollkreises gebildet wird.
Ihre Aufgabe ist es, ein Programm zu schreiben, das den Pfad zeichnet, der durch den oben definierten Punkt verfolgt wird. Als Eingabe erhalten Sie R , r und d , alle ganzen Zahlen zwischen 1 und 200 einschließlich.
Sie können diese Eingabe von stdin, Argumenten oder Benutzereingaben erhalten, sie kann jedoch nicht fest in das Programm codiert werden. Sie können es in der für Sie am besten geeigneten Form akzeptieren. als Zeichenketten, Ganzzahlen usw.
Annehmen:
- Eingabeeinheiten werden in Pixel angegeben.
- R > = r
Die Ausgabe sollte eine grafische Darstellung des durch die Eingabe definierten Hypotrochoids sein. Es ist keine ASCII- oder andere textbasierte Ausgabe zulässig. Dieses Bild kann in einer Datei gespeichert oder auf dem Bildschirm angezeigt werden. Fügen Sie einen Screenshot oder ein Bild der Ausgabe für eine Eingabe Ihrer Wahl hinzu.
Sie können beliebige Farben für den Pfad / Hintergrund auswählen, vorbehaltlich einer Kontrasteinschränkung. Die beiden Farben müssen mindestens die Hälfte der HSV-Wertkomponente voneinander entfernt haben. Wenn Sie beispielsweise das HSV messen [0...1]
, sollte es zumindest einen 0.5
Unterschied geben. Dazwischen [0...255]
sollte ein Mindestunterschied bestehen 128
.
Dies ist ein Code Golf, Mindestgröße des Quellcodes in Bytes gewinnt.
quelle
R > r
oderR ≥ r
? (Dasselbe fürr
undd
.)R>=r
, ist aberd
nicht darauf beschränktr
und kann irgendwo im Bereich von 1-200 liegen.R=200, r=1, d=200
. Sie können das Bild an die Eingabe anpassen, wenn Sie möchten, oder es auf einer konstanten Größe halten, solange alles sichtbar ist.Antworten:
Mathematica, 120 Bytes
Ungolfed Code und Beispielausgabe:
Wenn ich die Achsen in den Plot aufnehmen darf, kann ich weitere 9 Zeichen speichern.
quelle
JavaScript (ECMAScript 6) -
312314 ZeichenJSFIDDLE
Beispielausgabe
r = 1, R = 200, d = 30
quelle
Python: 579
Zusammenfassung
Dies ist in Anbetracht der Mathematica-Antwort überhaupt nicht konkurrenzfähig, aber ich habe beschlossen, es trotzdem zu posten, da die Bilder hübsch sind und jemanden inspirieren oder jemandem nützlich sein können. Weil es so viel größer ist, habe ich es im Grunde ungolfed gelassen. Das Programm erwartet eine Kommandozeilen-Eingabe von R, r, d.
Bildschirmfoto
Hier sind zwei Beispiele, eines für (5,3,5) und eines für (10,1,7).
Code
quelle
Perl / Tk -
239227R = 120, r = 20, d = 40:
R = 128, r = 90, d = 128:
R = 179, r = 86, d = 98:
quelle
Verarbeitung, 270
Die Eingabe erfolgt über die Konsole, eine Nummer pro Zeile.
Screenshot für R = 65, r = 15, d = 24:
quelle
GeoGebra, 87
Das heißt, wenn Sie GeoGebra als gültige Sprache betrachten.
Akzeptiert Eingaben von der GeoGebra-Eingabeleiste im Format
<variable>=<value>
, zR=1000
.Beachten Sie, dass Sie möglicherweise die Zoomgröße manuell ändern müssen, um das gesamte Bild anzuzeigen.
(Das Ding am unteren Rand des Fensters ist die Eingabeleiste, über die ich gesprochen habe)
Probieren Sie es hier online aus .
quelle
HTML + Javascript 256
286 303Bearbeiten 1. Aufruf von moveTo entfernt, funktioniert trotzdem. Könnte sparen mehr Schneiden beginPath, aber dann funktioniert es nur beim ersten Mal
Edit2 30 Bytes gespeichert dank @ ӍѲꝆΛҐӍΛПӍѲꝆΛҐӍΛ
Prüfung
Geben Sie etwas in das Textfeld ein (durch Kommas getrennt) und drücken Sie die Tabulatortaste
quelle
R, 80 Bytes
Will man jedoch "saubere" Zahlen (keine Achsen, keine Beschriftungen usw.), muss der Code etwas länger sein (88 Zeichen):
Ein Codebeispiel mit der längeren Version von f:
Einige Beispielausgaben:
quelle
,
?C # 813 war 999
Benötigt etwas Arbeit, um die Anzahl der Bytes zu reduzieren. Ich habe es geschafft, es ein wenig zu reduzieren. Es akzeptiert drei durch Leerzeichen getrennte Ganzzahlen von der Konsole.
Ausgabebeispiel:
quelle
Shell-Skript + Gnuplot (153)
Der größte Aufwand besteht darin, die Achsen und Tics zu entfernen, die Größe und den Bereich festzulegen und die Präzision zu erhöhen. Zum Glück ist Gnuplot für das Golfen natürlich, so dass die meisten Befehle abgekürzt werden können. Um Zeichen zu speichern, muss die Ausgabe manuell in eine Bilddatei umgeleitet werden.
Aufruf des Skripts mit
spiro.sh 175 35 25>i.png
givesquelle
R, 169 Zeichen
Eingerückt:
Beispiele:
quelle
SmileBASIC, 96 Bytes
Eingabe: 50,30,50:
quelle
Befunge-98, 113 Bytes
Dieser Code basiert für einige trigonometrische Berechnungen auf dem Fingerabdruck von Fixed Point Maths (FIXP) und der Turtle Graphics (TURT). um den Pfad des Spirographen zu zeichnen.
Die Turtle-Grafiken in Befunge verhalten sich sehr ähnlich wie die Grafiken in der Programmiersprache Logo . Sie zeichnen mit einer 'Schildkröte' (die als Stift dient), die Sie um die Ausgabeoberfläche steuern. Dazu muss die Schildkröte in eine bestimmte Richtung ausgerichtet und dann angewiesen werden, sich eine bestimmte Strecke vorwärts zu bewegen.
Um mit diesem System arbeiten zu können, musste ich die ursprünglichen Spirographengleichungen etwas schildkrötenfreundlicher anpassen. Ich bin mir nicht sicher, ob dies der beste Ansatz ist, aber der Algorithmus, den ich mir ausgedacht habe, funktioniert in etwa so:
Beachten Sie, dass hierdurch der Pfad tatsächlich mit einer Art Zick-Zack-Muster gezeichnet wird. Sie bemerken dies jedoch nicht wirklich, es sei denn, Sie zoomen eng auf das Bild.
Hier ist ein Beispiel mit den Parametern R = 73, r = 51, d = 45.
Ich habe den Code mit CCBI getestet und cfunge getestet , die beide eine Ausgabe in Form eines SVG-Bildes erzeugen. Da es sich um ein skalierbares Vektorformat handelt, hat das resultierende Bild keine Pixelgröße als solches - es passt sich lediglich der Bildschirmgröße an (zumindest bei Anzeige in einem Browser). Das obige Beispiel ist eine Bildschirmaufnahme, die manuell zugeschnitten und skaliert wurde.
Theoretisch könnte der Code auch auf Rc / Funge funktionieren , aber in diesem Fall müssten Sie auf einem System mit XWindows laufen, da es versuchen würde, die Ausgabe in einem Fenster zu rendern.
quelle
wxMaxima : 110
Dies wird in der interaktiven Sitzung über aufgerufen
f(#,#,#)
. Betrachten Sie als Beispielf(3,2,1)
:quelle
Schläger
Ausgabe:
quelle