Steiner-Ketten sind eine Reihe von N Kreisen, wobei jeder Kreis zwei andere nicht schneidende Kreise sowie den vorherigen und den nächsten Kreis der Kette tangiert, wie in den folgenden Bildern dargestellt:
In dieser Herausforderung schreiben Sie ein Programm / eine Funktion, die Steiner-Ketten rekursiv zeichnet, dh Kreise einer bestimmten Kette sind die Basiskreise einer anderen Ketteniteration:
Herausforderung
Schreiben Sie ein Programm / eine Funktion, die Bilddimensionen und eine Liste von Ganzzahlen akzeptiert, die die Kreisebene in jeder aufeinanderfolgenden Iteration von Ketten angeben, und geben Sie ein Bild mit den darauf gezeichneten rekursiven Steiner-Ketten aus.
Eingang
Ihr Programm / Ihre Funktion akzeptiert 2 Argumente:
s
- Breite und Höhe des Bildesls
- Liste der positiven ganzen Zahlen, die die Anzahl der Kreise angibt, die in jeder aufeinanderfolgenden Iteration von Ketten vorhanden sind, geordnet von der obersten bis zur untersten Kette
Ausgabe
Ihr Programm / Ihre Funktion gibt ein Bild der Dimension s
x aus s
, das die wiederkehrende Steiner-Kette anzeigt.
- Der Basiskreis der obersten Ebene ist so groß wie das Bild mit einem Durchmesser von
s
zentriert im Bild - Zur Vereinfachung sind die beiden Grundkreise einer Steiner-Kette konzentrisch, dh die Mittelpunkte der beiden Grundlinienkreise sind gleich
- Bei einem äußeren Radius
R
und der Anzahl der Kreise in einer Kette lautetN
die Formel für den inneren RadiusR'
R' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- Kreise der Kette sowie der innere Basiskreis sind die äußeren Basiskreise der nächsten Ketteniteration
- Beim Durchlaufen der Kettenkreise sollte die Reihenfolge der nächsten Kette dem nächsten Wert in entsprechen
ls
- Beim Durchlaufen des inneren Kreises einer Kette sollte die Reihenfolge mit der Reihenfolge der Eltern übereinstimmen (Beispiel [5,2]):
- Alle Ketten sollten die Rekursion in einer Tiefe von der Länge von beenden
ls
- Die Rotation der Ketten spielt keine Rolle:
- Die Rotationen rekursiver Ketten relativ zum Mittelpunkt ihrer Eltern sollten jedoch gleich sein:
- Alle Kreise sollten mit einem Umriss oder einer festen Füllung gezeichnet werden
- Die Farbauswahl bleibt der Implementierung überlassen, abgesehen von Lücken (z. B. Füllen aller Elemente mit derselben Farbe).
Beispielläufe
In den folgenden Beispielen wird die Farbe durch bestimmt (depth of the recursion)^4
.
Die Quelle finden Sie hier .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])