Pour un nombre entier N> = 2, créez une image représentant un nœud de Sierpiński de degré N.
Par exemple, voici les nœuds de degré 2, 3, 4 et 5:
Cliquez sur les images pour les afficher en taille réelle (plus le degré est élevé, plus l'image est grande).
spécification
- Un nœud de Sierpiński de degré N est dessiné en utilisant les sommets d’un triangle de Sierpiński de degré N comme points de repère. Un triangle de Sierpiński de degré N est constitué de trois triangles de Sierpiński de degré N-1 disposés en un triangle plus grand. Un triangle de Sierpiński de degré 0 est un triangle équilatéral.
- Les triangles les plus petits ont une longueur de côté 64, ce qui donne au triangle de Sierpiński sur lequel le nœud est basé une longueur totale de côté de
- Le centre du triangle extérieur est positionné au centre de l'image. Cela ne donne pas un espace blanc égal en haut et en bas.
- La sortie est une image carrée de côté où est
ceiling(x)
, le plus petit entier supérieur ou égal à x. C'est juste assez grand pour que le sommet du triangle de Sierpiński sous-jacent soit contenu dans l'image lorsque le centre du triangle est au centre de l'image. - La courbe unique doit passer par-dessus et sous elle-même en alternant strictement. Les solutions peuvent choisir entre dessous puis dessus et dessous.
- Les exemples d'images montrent un avant-plan noir et un arrière-plan blanc. Vous pouvez choisir deux couleurs faciles à distinguer. L'anti-aliasing est autorisé mais pas nécessaire.
- Il ne doit pas y avoir de lacunes où deux arcs se rencontrent ou où la courbe passe par dessus ou par dessous.
- La sortie peut être vers n'importe quel fichier image au format raster ou vers n'importe quel fichier image au format vectoriel comportant une taille d'affichage par défaut correcte. Si vous affichez directement à l’écran, le formulaire doit permettre au défilement de voir la totalité de l’image lorsque celle-ci est plus grande que l’écran.
Détermination du centre, du rayon et de l'épaisseur de l'arc
- Le nœud est construit comme une série d’arcs circulaires qui se rejoignent à des points où leurs tangentes sont parallèles pour donner une jointure homogène. Ces arcs sont affichés sous forme de secteurs annulaires (arcs d'épaisseur).
- Les centres de ces arcs sont les sommets des plus petits triangles à l'envers. Chacun de ces sommets est le centre d'exactement un arc.
- Chaque arc a un rayon de
- La seule exception est que les arcs des trois triangles les plus extérieurs (aux coins du grand triangle) ont un centre qui est le centre des deux sommets internes adjacents et ont donc un rayon de
- Chaque arc est représenté par une épaisseur totale (différence entre le rayon intérieur et le rayon extérieur) de et les bordures noires de cet arc ont chacune une épaisseur de. La courbe doit avoir ces bordures et non pas simplement une bande pleine.
Unités de mesure
- Toutes les distances sont en pixels (1 est la distance horizontale ou verticale entre 2 pixels adjacents).
- La racine carrée de 3 doit être précise à 7 chiffres significatifs. C'est-à-dire que vos calculs doivent être équivalents à l'utilisation d'un ROOT3 tel que
1.7320505 <= ROOT3 < 1.7320515
Notation
Le code le plus court en octets gagne.
Pour ceux qui s’interrogent, N = 0 et N = 1 ne sont pas inclus car ils correspondent à un cercle et à un trèfle, qui ne correspondent pas tout à fait au modèle qui s’applique pour N> = 2. Je m'attendrais à ce que la plupart des approches de ce défi aient besoin d'ajouter un code de cas spécial pour 0 et 1, alors j'ai décidé de les omettre.
stroke-width:3.464102
pareil est un peu excessif si l’idée était d’obtenir une précision de 1 pixel. Je vais aller de l'avant et l'inclure comme ça, cependant, si c'est la décision.