Dado un número entero N> = 2, produce una imagen que muestra un nudo Sierpiński de grado N.
Por ejemplo, aquí hay nudos de grado 2, 3, 4 y 5:
Haga clic en las imágenes para verlas a tamaño completo (cuanto mayor sea el grado, mayor será la imagen).
Especificación
- Se dibuja un nudo Sierpiński de grado N utilizando los vértices de un triángulo Sierpiński de grado N como puntos de guía. Un triángulo de Sierpiński de grado N son tres triángulos de Sierpiński de grado N-1 dispuestos en un triángulo más grande. Un triángulo de Sierpiński de grado 0 es un triángulo equilátero.
- Los triángulos componentes más pequeños tienen una longitud lateral de 64, dando al triángulo de Sierpiński en el que se basa el nudo una longitud lateral total de
- El centro del triángulo exterior se coloca en el centro de la imagen. Esto no da el mismo espacio en blanco en la parte superior e inferior.
- La salida es una imagen cuadrada de longitud lateral donde es
ceiling(x)
, el entero más pequeño mayor o igual a x. Esto es lo suficientemente grande como para que el vértice superior del triángulo de Sierpiński subyacente esté contenido dentro de la imagen cuando el centro del triángulo está en el centro de la imagen. - La curva única debe pasar sobre y debajo de sí misma, estrictamente alternando. Las soluciones pueden elegir entre debajo, luego encima o más de debajo.
- Las imágenes de ejemplo muestran primer plano negro y fondo blanco. Puede elegir cualquiera de los dos colores fácilmente distinguibles. El suavizado está permitido pero no es necesario.
- No debe haber huecos donde dos arcos se encuentran o donde la curva pasa sobre o debajo de sí misma.
- La salida puede ser a cualquier archivo de imagen de formato ráster o a cualquier archivo de imagen de formato vectorial que incluya un tamaño de visualización predeterminado correcto. Si visualiza directamente en la pantalla, esto debe estar en una forma que permita el desplazamiento para ver la imagen completa cuando sea más grande que la pantalla.
Determinación del centro del arco, radio y grosor
- El nudo se construye como una serie de arcos circulares que se encuentran en puntos donde sus tangentes son paralelas, para dar una unión perfecta. Estos arcos se muestran como sectores anulares (arcos con grosor).
- Los centros de estos arcos son los vértices de los triángulos invertidos más pequeños. Cada uno de esos vértices es el centro de exactamente un arco.
- Cada arco tiene un radio de
- La excepción es que los arcos en los tres triángulos más externos (en las esquinas del triángulo grande) tienen un centro que es el punto medio de los dos vértices internos adyacentes, y por lo tanto tienen un radio de
- Cada arco se representa con un grosor total (diferencia entre el radio interno y el radio externo) y cada uno de los bordes negros tiene un grosor. La curva debe tener estos bordes, y no solo una tira sólida.
Unidades de medida
- Todas las distancias están en píxeles (1 es la distancia horizontal o vertical entre 2 píxeles adyacentes).
- La raíz cuadrada de 3 debe ser precisa para 7 cifras significativas. Es decir, sus cálculos deben ser equivalentes a usar un ROOT3 tal que
1.7320505 <= ROOT3 < 1.7320515
Tanteo
El código más corto en bytes gana.
Para aquellos que se preguntan, N = 0 y N = 1 no están incluidos porque corresponden a un círculo y un trébol, que no coinciden con el patrón que se aplica para N> = 2. Esperaría que la mayoría de los enfoques para este desafío tendrían que agregar un código de caso especial para 0 y 1, por lo que decidí omitirlos.
stroke-width:3.464102
y similar es un poco excesivo si la idea era obtener una precisión de 1 píxel. Sin embargo, seguiré adelante y lo incluiré así, si ese es el fallo.