Wenn eine ganze Zahl N> = 2 gegeben ist, erzeugen Sie ein Bild, das einen Sierpiński-Knoten vom Grad N zeigt.
Hier sind zum Beispiel Knoten der Grade 2, 3, 4 und 5:
Klicken Sie auf die Bilder, um sie in voller Größe anzuzeigen (je höher der Grad, desto größer das Bild).
Spezifikation
- Ein Sierpiński-Knoten vom Grad N wird unter Verwendung der Eckpunkte eines Sierpiński-Dreiecks vom Grad N als Orientierungspunkte gezeichnet. Ein Sierpiński-Dreieck vom Grad N besteht aus drei Sierpiński-Dreiecken vom Grad N-1, die zu einem größeren Dreieck angeordnet sind. Ein Sierpiński-Dreieck vom Grad 0 ist ein gleichseitiges Dreieck.
- Die kleinsten Komponentendreiecke haben eine Seitenlänge von 64, was dem Sierpiński-Dreieck, auf dem der Knoten basiert, eine Gesamtseitenlänge von 0 ergibt
- Die Mitte des äußeren Dreiecks befindet sich in der Bildmitte. Dies ergibt oben und unten nicht den gleichen Leerraum.
- Der Ausgang ist ein quadratisches Bild der Seitenlänge in dem ist
ceiling(x)
die kleinste ganze Zahl größer oder gleich x ist . Dies ist gerade groß genug, damit der obere Scheitelpunkt des darunter liegenden Sierpiński-Dreiecks im Bild enthalten ist, wenn sich die Mitte des Dreiecks in der Bildmitte befindet. - Die einzelne Kurve muss streng abwechselnd über und unter sich verlaufen. Lösungen können zwischen unter dann über oder über dann unter wählen.
- Die Beispielbilder zeigen einen schwarzen Vordergrund und einen weißen Hintergrund. Sie können zwei verschiedene Farben auswählen. Anti-Aliasing ist zulässig, aber nicht erforderlich.
- Es darf keine Lücken geben, in denen sich zwei Bögen treffen oder die Kurve über oder unter sich verläuft.
- Die Ausgabe kann in eine beliebige Bilddatei im Rasterformat oder in eine beliebige Bilddatei im Vektorformat erfolgen, die eine korrekte Standardanzeigegröße enthält. Wenn Sie direkt auf dem Bildschirm anzeigen, muss dies in einer Form erfolgen, mit der durch Scrollen das gesamte Bild angezeigt werden kann, wenn es größer als der Bildschirm ist.
Bestimmung von Bogenmitte, Radius und Dicke
- Der Knoten ist als eine Reihe von Kreisbögen konstruiert, die sich an Punkten treffen, an denen ihre Tangenten parallel sind, um eine nahtlose Verbindung zu erzielen. Diese Bögen werden als ringförmige Sektoren (Bögen mit Dicke) angezeigt.
- Die Zentren dieser Bögen sind die Eckpunkte der kleinsten auf dem Kopf stehenden Dreiecke. Jeder solche Scheitelpunkt ist der Mittelpunkt genau eines Bogens.
- Jeder Bogen hat einen Radius von
- Die Ausnahme besteht darin, dass die Bögen in den drei äußersten Dreiecken (an den Ecken des großen Dreiecks) einen Mittelpunkt haben, der der Mittelpunkt der beiden benachbarten inneren Scheitelpunkte ist, und somit einen Radius von
- Jeder Bogen wird mit einer Gesamtdicke (Differenz zwischen Innenradius und Außenradius) von und den schwarzen Rändern von jeweils einer Dicke von dargestellt. Die Kurve muss diese Ränder haben und darf nicht nur ein fester Streifen sein.
Maßeinheiten
- Alle Abstände sind in Pixel angegeben (1 ist der horizontale oder vertikale Abstand zwischen 2 benachbarten Pixeln).
- Die Quadratwurzel von 3 muss auf 7 signifikante Stellen genau sein. Das heißt, Ihre Berechnungen müssen der Verwendung eines ROOT3 entsprechen, so dass
1.7320505 <= ROOT3 < 1.7320515
Wertung
Der kürzeste Code in Bytes gewinnt.
Für diejenigen, die sich fragen, sind N = 0 und N = 1 nicht enthalten, da sie einem Kreis und einem Kleeblatt entsprechen, die nicht ganz mit dem Muster übereinstimmen, das für N> = 2 gilt. Ich würde erwarten, dass die meisten Ansätze für diese Herausforderung Sonderfallcode für 0 und 1 hinzufügen müssten, daher habe ich beschlossen, sie wegzulassen.
stroke-width:3.464102
und ähnlich ist ein bisschen übertrieben, wenn die Idee war, 1 Pixel Genauigkeit zu bekommen. Ich werde es jedoch so aufnehmen, wenn das die Regel ist.