Ein Epizykloid ist die Kurve, die ein Punkt auf einem Kreis macht, wenn er um einen anderen Kreis rollt. Ein Zyklogon ist die Form, die ein Punkt auf einem regulären Polygon beim Rollen über eine Ebene macht. Ein Epizyklogon ist die Kurve, die durch einen Punkt auf einem regelmäßigen Polygon beim Umlaufen eines anderen Polygons gezeichnet wird.
Schreiben Sie ein Programm , das eine epicyclogon zieht gegeben r
, r1
, r2
, n1
, n2
:
r = number of clockwise revolutions rolling polygon makes around stationary polygon (any real number as limited by float values)
r1 = distance from center of stationary polygon to each of its vertices (positive real number)
r2 = distance from center of rolling polygon to each of its vertices (positive real number)
n1 = number of sides stationary polygon has (integer greater than 2)
n2 = number of sides rolling polygon has (integer greater than 2)
Anmerkungen
- Wenn
r
negativ, sollte die Walze gegen den Uhrzeigersinn drehen . - Denn
r
eine Umdrehung tritt auf, wenn die Linie, die die Schwerpunkte der beiden Formen verbindet, um volle 360 Grad überstrichen wird. Dieser Begriff wird erweitert, um alle Werte von einzuschließenr
. (In einer viertel Umdrehung wird die Verbindungslinie zwischen den Zentroiden um 90 Grad überstrichen.) - Diese Argumente sollten von der Kommandozeile kommen oder von Ihrem Programm abgefragt werden (zB mit Python's
input()
). r1
undr2
sind relativ zueinander, nicht die Abmessungen des Bildes. Sie können also eine "Einheit" als eine beliebige Anzahl von tatsächlichen Pixeln festlegen.
Der Punkt, den Sie ausfindig machen müssen, ist einer der Eckpunkte der rollenden Form. Die Formen müssen mit diesem Scheitelpunkt beginnen, der einen stationären Scheitelpunkt und zwei benachbarte Seiten berührt:
Die genauen Startscheitelpunkte und der Winkel des stationären Polygons spielen keine Rolle.
Ausgabe
Die Ausgabe sollte auf ein Bild erfolgen, das mindestens 600 x 600 Pixel groß ist (oder eine variable Dimension, die auf 600 festgelegt werden kann). Es muss die gesamte Epizyklogon-Kurve anzeigen, die von den Parametern angegeben wird und im Bild gut eingerahmt ist.
Die rollenden und stationären Polygone müssen ebenfalls gezeichnet werden (mit der Walze im Endzustand). Die beiden Formen und das Epizyklogon sollten drei deutlich unterschiedliche Farben haben.
Es muss auch eine einfache Möglichkeit geben, die Polygone nicht zu zeichnen (eine Änderung von true
zu false
im Code reicht aus).
Bitte zeigen Sie uns mindestens 2 Ausgabebilder. Es ist in Ordnung, sie bei Bedarf zu verkleinern.
Wertung
Der kürzeste Code, der gültige Ausgabebilder erzeugt, gewinnt.
Boni
- Mindestens 50 Byte, wenn die Ausgabe ein animiertes GIF (oder ähnliches) der Kurve ist, die gezeichnet wird.
- Mindestens 150 Byte, wenn Sie den Wert 2 zulassen
n1
undn2
annehmen, damit die Formen zu Liniensegmenten mit der Länge2 * r1
(oderr2
) werden, die sich "umeinander rollen". Wie Sie mit demr
Zeitpunktn1
und dem Zeitpunktn2
2 umgehen, bleibt Ihnen überlassen, da sich die Zentroiden nicht wie in anderen Fällen umeinander drehen. (Überhaupt nicht "rollen" zählt nicht als Umgang damit.)
Da ich sehr gespannt darauf bin, dass diese neue Idee gut umgesetzt wird (und es ist nicht gerade ein Kinderspiel), werde ich dem Gewinner 150 Bounty Reps verleihen . Der Wettbewerb endet am selben Tag, an dem das Kopfgeld aufgebraucht ist.
Das Kopfgeld wird dem Gewinner nicht gutgeschrieben, wenn klar ist, dass er den größten Teil des Codes von einem anderen Beitrag umgeschrieben hat.
Bibliotheksfunktionen, die dies bereits tun (sofern vorhanden), sind nicht zulässig.
Hinweis: Dies ergab sich aus meinen verbleibenden Fragen , die jeder posten kann. Aber wenn niemand anderes sie postet, habe ich gute Chancen, dass ich es rechtzeitig tun werde. : P