Ланцюжки Штейнера - це набір з N кіл, де кожне коло є дотичним до двох інших непересічних кіл, а також до попереднього та наступного кіл ланцюга, як видно із зображень нижче:
У цьому виклику ви напишете програму / функцію, яка малює ланцюги Штейнера рекурсивно, тобто кола даного ланцюга будуть базовими колами іншої ітерації ланцюгів:
Виклик
Напишіть програму / функцію, яка приймає розміри зображень та список цілих чисел, що позначають рівень кіл у кожній послідовній ітерації ланцюгів, і виведіть зображення із зверненими до нього рекурсивними ланцюгами Штайнера.
Вхідні дані
Ваша програма / функція прийме 2 аргументи:
s
- ширина та висота зображенняls
- список натуральних чисел, що позначають кількість кіл, присутніх у кожній послідовній ітерації ланцюгів, упорядковані від верхньої ланцюга до нижнього самого ланцюга
Вихідні дані
Ваша програма / функція виведе зображення розмірності s
x із s
відображенням повторюваного ланцюга Штайнера.
- Основне коло верхнього рівня буде таким же великим, як зображення діаметром, із
s
центром всередині зображення - Щоб полегшити ситуацію, 2 базових кола ланцюга Штайнера будуть концентричними, тобто центральні точки двох кіл базової лінії будуть однаковими
- Враховуючи зовнішній радіус
R
та кількість кіл у ланцюзі,N
формула внутрішнього радіусаR'
єR' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- Кола ланцюга, а також внутрішній базовий круг будуть зовнішніми базовими колами наступної ітерації ланцюгів
- Під час повторної роботи по ланцюгових колах порядок наступного ланцюга повинен відповідати наступному значенню в
ls
- Поки повторюється через внутрішнє коло ланцюга, порядок повинен бути таким самим, як його замовлення батьків (приклад [5,2]):
- Усі ланцюги повинні закінчуватися рекурсією на глибині довжини до
ls
- Обертання ланцюгів не має значення:
- Однак обертання рекурсивних ланцюгів щодо центральної точки їх батьків має бути однаковим:
- Усі кружечки слід намалювати контуром або суцільною заливкою
- Вибір кольору залишається на реалізації, окрім лазівки (наприклад, заповнення все тим самим кольором)
Приклад працює
У наступних прикладах колір визначається за (depth of the recursion)^4
.
Ви можете знайти джерело тут .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])