Łańcuchy Steinera to zestaw N kół, w których każde koło jest styczne do 2 innych nie przecinających się kół, a także do poprzedniego i następnego koła łańcucha, jak pokazano na poniższych zdjęciach:
W tym wyzwaniu napiszesz program / funkcję, która rysuje rekurencyjnie łańcuchy Steinera, to znaczy koła danego łańcucha będą podstawowymi okręgami innej iteracji łańcuchów:
Wyzwanie
Napisz program / funkcję, która akceptuje wymiary obrazu i listę liczb całkowitych oznaczających poziom okręgów w każdej kolejnej iteracji łańcuchów, i wyślij obraz z narysowanymi do niego rekurencyjnymi łańcuchami Steiner.
Wejście
Twój program / funkcja zaakceptuje 2 argumenty:
s- szerokość i wysokość obrazuls- lista liczb całkowitych dodatnich oznaczających liczbę okręgów obecnych w każdej kolejnej iteracji łańcuchów, uporządkowana od łańcucha od najwyższego do najniższego łańcucha
Wynik
Twój program / funkcja wyświetli obraz wymiaru s x sprzedstawiający łańcuch odzysku Steiner.
- Koło podstawowe najwyższego poziomu będzie tak duże, jak obraz o średnicy
s, wyśrodkowany w środku obrazu - Dla uproszczenia, 2 podstawowe koła łańcucha Steiner będą koncentryczne, to znaczy, że punkty środkowe 2 podstawowych kół będą takie same
- Biorąc pod uwagę promień zewnętrzny
Ri liczbę kół w łańcuchu,Nwzór na promień wewnętrznyR'jest następującyR' = (R-R*sin(pi/N))/(sin(pi/N)+1) - Okręgi łańcucha, jak i wewnętrzny okrąg podstawy, będą zewnętrznymi okręgami podstawy następnej iteracji łańcuchów
- Podczas rekurencji przez koła łańcucha kolejność następnego łańcucha powinna odpowiadać następnej wartości w
ls - Podczas powtarzania się przez wewnętrzny krąg łańcucha, kolejność powinna być taka sama jak kolejność jego rodziców (przykład [5,2]):

- Wszystkie łańcuchy powinny kończyć rekurencję na głębokości
ls - Rotacja łańcuchów nie ma znaczenia:

- Jednak obroty łańcuchów rekurencyjnych względem punktu środkowego ich rodziców powinny być takie same:

- Wszystkie koła powinny być narysowane konturem lub wypełnieniem pełnym
- Wybór koloru pozostawia się do wdrożenia, z wyjątkiem luk (na przykład wypełnianie wszystkiego tym samym kolorem)
Przykład działa
W poniższych przykładach kolor określa (depth of the recursion)^4.
Możesz znaleźć źródło tutaj .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])







