Biorąc pod uwagę liczbę całkowitą N> = 2, wykonaj zdjęcie pokazujące węzeł Sierpińskiego stopnia N.
Na przykład tutaj są węzły stopnia 2, 3, 4 i 5:
Kliknij obrazy, aby wyświetlić pełny rozmiar (im wyższy stopień, tym większy obraz).
Specyfikacja
- Węzeł Sierpińskiego stopnia N jest rysowany z wykorzystaniem wierzchołków trójkąta Sierpińskiego stopnia N jako punktów prowadzących. Trójkąt Sierpińskiego stopnia N to trzy trójkąty Sierpińskiego stopnia N-1 ułożone w większy trójkąt. Trójkąt Sierpińskiego stopnia 0 jest trójkątem równobocznym.
- Najmniejsze trójkąty składowe mają długość boku 64, co daje trójkątowi Sierpińskiego, na którym opiera się węzeł, całkowitą długość boku
- Środek zewnętrznego trójkąta znajduje się na środku obrazu. Ten sposób nie dać równe białe na górze i na dole.
- Dane wyjściowe to kwadratowy obraz o długości boku, gdzie jest
ceiling(x)
najmniejszą liczbą całkowitą większą lub równą x. Jest to wystarczająco duża wielkość, aby górny wierzchołek leżącego poniżej trójkąta Sierpińskiego mógł być zawarty w obrazie, gdy środek trójkąta znajduje się w środku obrazu. - Pojedyncza krzywa musi przechodzić nad i pod sobą, ściśle naprzemiennie. Rozwiązania mogą wybierać pomiędzy poniżej, a potem lub poniżej.
- Przykładowe obrazy pokazują czarny pierwszy plan i białe tło. Możesz wybrać dowolne dwa łatwe do odróżnienia kolory. Wygładzanie jest dozwolone, ale nie konieczne.
- Nie mogą istnieć przerwy w miejscu, w którym spotykają się dwa łuki lub w którym krzywa przechodzi nad lub pod sobą.
- Dane wyjściowe mogą pochodzić z dowolnego pliku obrazu w formacie rastrowym lub dowolnego pliku obrazu w formacie wektorowym, który zawiera prawidłowy domyślny rozmiar wyświetlania. Jeśli wyświetlasz bezpośrednio na ekranie, musi być w formie umożliwiającej przewijanie, aby zobaczyć pełny obraz, gdy jest większy niż ekran.
Określanie środka łuku, promienia i grubości
- Węzeł jest zbudowany jako seria okrągłych łuków, które spotykają się w punktach, w których ich styczne są równoległe, aby zapewnić płynne połączenie. Łuki te są wyświetlane jako sektory pierścieniowe (łuki o grubości).
- Środkami tych łuków są wierzchołki najmniejszych trójkątów odwróconych do góry nogami. Każdy taki wierzchołek jest środkiem dokładnie jednego łuku.
- Każdy łuk ma promień
- Wyjątkiem jest to, że łuki w trzech najbardziej zewnętrznych trójkątach (w rogach dużego trójkąta) mają środek, który jest punktem środkowym dwóch sąsiadujących wewnętrznych wierzchołków, a zatem mają promień
- Każdy łuk jest reprezentowany przez całkowitą grubość (różnicę między promieniem wewnętrznym i promieniem zewnętrznym), a czarne granice każdego z nich mają grubość Krzywa musi mieć te granice, a nie być tylko jednolitym paskiem.
Jednostki miary
- Wszystkie odległości podano w pikselach (1 to pozioma lub pionowa odległość między 2 sąsiadującymi pikselami).
- Pierwiastek kwadratowy z 3 musi być dokładny do 7 znaczących cyfr. Oznacza to, że twoje obliczenia muszą być równoważne z użyciem ROOT3 takiego, że
1.7320505 <= ROOT3 < 1.7320515
Punktacja
Najkrótszy kod w bajtach wygrywa.
Dla tych, którzy zastanawiają się, N = 0 i N = 1 nie są uwzględnione, ponieważ odpowiadają okręgowi i koniczynie, które nie do końca pasują do wzoru, który dotyczy N> = 2. Spodziewałbym się, że większość podejść do tego wyzwania będzie musiała dodać specjalny kod sprawy dla 0 i 1, więc postanowiłem je pominąć.
stroke-width:3.464102
podobnie jest nieco przesadnie, jeśli chodziło o uzyskanie dokładności 1 piksela. Jeśli tak, to postanowię.