Steiner Chains es un conjunto de N círculos donde cada círculo es tangente a otros 2 círculos que no se cruzan, así como a los círculos anteriores y siguientes de la cadena, como se ve en las imágenes a continuación:
En este desafío, escribirá un programa / función que dibuja cadenas Steiner de forma recursiva, es decir, los círculos de una cadena dada serán los círculos base de otra iteración de cadenas:
Desafío
Escriba un programa / función que acepte dimensiones de imagen y una lista de enteros que denotan el nivel de los círculos en cada iteración sucesiva de cadenas, y genere una imagen con las cadenas recursivas de Steiner dibujadas a ella.
Entrada
Su programa / función aceptará 2 argumentos:
s- ancho y alto de la imagenls- lista de enteros positivos que denotan el número de círculos presentes en cada iteración sucesiva de cadenas, ordenadas desde la cadena superior hasta la cadena inferior
Salida
Su programa / función generará una imagen de dimensión sx que smuestra la cadena de Steiner recusiva.
- El círculo base del nivel superior será tan grande como la imagen con un diámetro
scentrado dentro de la imagen - Para facilitar las cosas, los 2 círculos de base de una cadena Steiner serán concéntricos, es decir, los puntos centrales de los 2 círculos de referencia serán los mismos
- Dado un radio externo
R, y el número de círculos en una cadenaN, la fórmula para el radio internoR'esR' = (R-R*sin(pi/N))/(sin(pi/N)+1) - Los círculos de la cadena, así como el círculo base interno, serán los círculos base externos de la próxima iteración de cadenas.
- Mientras se repite a través de los círculos de la cadena, el orden de la siguiente cadena debe corresponder al siguiente valor en
ls - Mientras se repite a través del círculo interno de una cadena, el orden debe ser el mismo que el orden de sus padres (ejemplo [5,2]):

- Todas las cadenas deben terminar la recursión a una profundidad de la longitud de
ls - La rotación de las cadenas no importa:

- Sin embargo, las rotaciones de las cadenas recursivas en relación con el punto central de sus padres deberían ser las mismas:

- Todos los círculos deben dibujarse con un contorno o relleno sólido.
- La elección del color se deja a la implementación, salvo las lagunas (por ejemplo, llenar todo con el mismo color)
Ejecuciones de ejemplo
En los siguientes ejemplos, el color está determinado por (depth of the recursion)^4.
Puedes encontrar la fuente aquí .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])
fuente








Respuestas:
Javascript ES6, 379 bytes
Esta solución se utilizó para generar el ejemplo que se ejecuta en la pregunta.
Sin golf:
Nota:
fdevuelve un lienzo.Ejemplo de ejecución (se supone que hay
<body>que agregar):Debería volcar la siguiente imagen a la página:
fuente